C ++分析:时钟周期计数

时间:2014-11-26 13:30:20

标签: c++ profiling clock kcachegrind callgrind

我使用valgrind --tool=callgrind来分析我的C ++程序的关键部分。

该部件本身执行的时间少于一微秒,因此我对该部分上的大量循环进行了分析。

我注意到指令执行的时间是0.13%的倍数(程序执行总时间的百分比)。所以我只看到0.13,0.26,0.52,等等。

我的问题是,我应该假设这个原子数量衡量一个CPU周期吗?见照片。 (callgrind输出以图形方式显示kcachegrind。)

enter image description here

编辑:顺便说一句,看看机器代码,我看到mov需要0.13,所以这可能确实是一个时钟周期。

1 个答案:

答案 0 :(得分:1)

Callgrind没有测量CPU时间。它测量指令读取。那就是" Ir"术语来自。如果倍数为.13%(特别是因为你用mov确认)那么这意味着他们正在测量单个指令读数。还有缓存模拟选项,可以衡量缓存未命中的可能性。

请注意,并非所有指令都会花费相同的时间来执行,因此百分比与每个部分所花费的时间不完全匹配。但是,它仍然可以让您很好地了解您的计划在哪些方面做得最多,并且可能花费最多的时间。