如何解释kcachegrind的结果

rkm*_*rkm 14 c++ profiling valgrind callgrind kcachegrind

谁能告诉我如何对kcachegrind的结果感兴趣.

我有两个版本的代码(v1,v2)都在调试模式下编译.我通过valgrind用选项运行它们:

valgrind --tool=callgrind -v ....

这样生成的输出文件在kcachegrind中打开.现在我已经发现代码的版本v2运行速度比第一版v1更快,因为它意味着.但是我如何从kcachegrind的调用图中获得结果.

在kcachegrind All Callers选项卡中,我有以下列:Incl. , Distance, Called, Caller.

IIUC,Called并且caller在计划中没有被称为"来电者".但我不了解其他人.

另一件事是在选择特定功能然后在"呼叫者"选项卡上显示更多信息.Ir, Ir per call, count, caller 在类型选项卡中:`EventType,Incl.自我,简短,公式.

我在这里没有任何想法.

到目前为止,我读过这些问题:

KCachegrind解释混淆 对分析结果感到困惑

小智 12

我使用QCacheGrind,所以如果屏幕上的内容与您看到的内容不完全相符,我深表歉意.据我所知,QCacheGrind是KCacheGrind的直接Qt端口.此外,我还能够在指令计数和总指令的百分比之间切换.为了保持一致性,我将参考任何可以这种方式切换的列的指令计数视图.

"所有呼叫者"选项卡列应表示以下内容:

  • Incl.:每个调用者对此函数整体生成的指令数进行细分.因为调用者是层次结构(因此是距离列),所以如果调用堆栈很深,则可能有几个具有相同的值.

  • 距离:分隔的函数调用数是从"平面纵断面"面板中选择的函数中选定的行.

  • 调用:调用者调用最终导致所选函数执行的函数的时间数.

  • 调用者:直接调用或调用所选函数的另一个调用者的函数(由Distance确定).

"呼叫者"选项卡更直接.它显示与所选功能的距离为1的函数.换句话说,这些是直接调用所选函数的函数.

  • Ir:此调用者调用后由所选函数执行的指令总数.

  • 每次通话:每次通话执行的指令数.

  • 计数:调用者调用所选函数的次数.

  • 调用者:直接调用所选函数的函数.

有关活动,请参阅页面以获取该手册.我怀疑,如果你没有定义自己的类型,你应该看到的是"指令获取",可能还有"周期估计".这些列的快速细分如下:

  • Incl.:再次由此函数执行的总指令以及它在其下面调用的所有函数.

  • Self:由此功能专门执行的指令.此计数器仅跟踪此函数使用的指令,而不跟踪此函数调用的函数使用的任何指令.

  • 短和公式:定义自定义事件类型时使用这些列.你的应该是空白或非常短(如CEst = Ir),除非你最终定义自己的类型.