Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
寻找低影响的c++;剖析器 < >我正在寻找一个低冲击、操作系统无关的C++代码分析器。p>_C++_Performance_Profiling - Fatal编程技术网

寻找低影响的c++;剖析器 < >我正在寻找一个低冲击、操作系统无关的C++代码分析器。p>

寻找低影响的c++;剖析器 < >我正在寻找一个低冲击、操作系统无关的C++代码分析器。p>,c++,performance,profiling,C++,Performance,Profiling,当我说低影响时,我指的是比valgrind更不具侵入性的东西。我计划在基于MIPS的嵌入式环境中使用它(因此是操作系统独立性),并尝试了valgrind的移植版本,它完全改变了性能特征(太多的海森堡原理在工作),所以我不能走这条路。我们知道内存总线速度是一个瓶颈,这很可能解释了valgrind为何如此具有侵入性 我创建了一个基于检查点的自产探查器,可以测量代码的某些部分。基本上,我必须修改代码(并重新编译),以便在代码的关键位置设置检查点。然后,在执行时,它存储每个检查点被命中的次数以及自上次检

当我说低影响时,我指的是比valgrind更不具侵入性的东西。我计划在基于MIPS的嵌入式环境中使用它(因此是操作系统独立性),并尝试了valgrind的移植版本,它完全改变了性能特征(太多的海森堡原理在工作),所以我不能走这条路。我们知道内存总线速度是一个瓶颈,这很可能解释了valgrind为何如此具有侵入性

我创建了一个基于检查点的自产探查器,可以测量代码的某些部分。基本上,我必须修改代码(并重新编译),以便在代码的关键位置设置检查点。然后,在执行时,它存储每个检查点被命中的次数以及自上次检查点被命中以来的时间。然后,在运行它之后,我可以转储检查点,并为每个检查点计算:num hits、max time、min time、avg time等

这个分析器(我称之为LowImpactProfiler)工作正常,但我想知道是否有更好的东西


我考虑过oProfile,它是一个采样分析器,但由于我不运行Linux,我认为它将很难实现。

我曾经在非常有限的嵌入式设备上成功地进行过评测。根据您的描述,它采用了与LowImpactProfiler类似的方法。

如果您使用的是Windows,您可以尝试我的profiler,如下所述


听起来它可能比你的更容易使用,但它不是独立于操作系统的。它使用对QueryPerformanceCounter()的调用,QueryPerformanceCounter()是一个windows API。它是开源的,所以使用任何可用的高性能计时器将其移植到您的操作系统可能是值得的。

如果目标是找出代码中的什么导致了速度慢,并且可能会改进以获得更好的性能。@Brady:Heisenburger?我不知道这件事@马修:从没听说过吗?这是一个量子汉堡。@Brady:Heisenbug经常被认为是剖析的黑手,但它不一定是个问题。您可以区分衡量性能和发现性能问题。不要认为测量是发现问题的方法。发现不需要测量。非常少的样本给了你非常不精确的测量,但同时它也给了你很好的指示,说明了要解决的问题。@Brady:Amdahl定律说,在各种代数中,所有的加速都是s=1/(1-X),其中X是节省时间的总分数。它没有提到X作为样本数函数的不确定度。但真正的问题是,您正在寻找代码中某个缓慢的部分或区域,因此探查器将忽略在特定函数所花费的时间中没有揭示的缓慢原因。如果你不考虑这些因素,它们最终将占据主导地位。经过实际检查和理解的示例将找到它们。谢谢,但我们不会使用windows,它是一个电信应用程序,如果有的话,有一天它可能会被移植到unix平台。无论如何,我会看一看。+1,我喜欢它使用的API,它与我的检查点非常相似。我将查看代码并了解如何将其与我的代码进行移植/合并。我会准备好我的,下周放在github上让你看。我也有作用域检查点,或者可以设置单独的检查点,而不需要在作用域中。当我提交代码时,我会在这里发布消息和/或在您的网站上向您发送消息。谢谢我将在本周下载并看一看,格雷西亚斯·德斯德·马德里!我看了一下闪亮的代码,到目前为止我很喜欢它,它似乎是一个比我目前拥有的更好的解决方案。谢谢它看起来很有希望,但我怀疑它是否能在非常低功耗的嵌入式设备上工作。