3

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

该部分本身的执行时间不到一微秒,因此我正在分析该部分上的大量循环。

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

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

在此处输入图像描述

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

4

1 回答 1

2

Callgrind 不测量 CPU 时间。它测量指令读取。这就是“Ir”一词的来源。如果倍数为 0.13%(尤其是在您使用 mov 确认后),则意味着它们正在测量单个指令读取。还有一些缓存模拟选项,可以让它衡量您发生缓存未命中的可能性。

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

于 2015-01-08T20:27:10.700 回答