如何解释kcachegrind的结果

时间:2014-05-21 14:27:11

标签: c++ profiling valgrind kcachegrind callgrind

有人能告诉我如何对kcachegrind的结果感兴趣。

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

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

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

在kcachegrind All Callers标签中,我有以下列:Incl. , Distance, Called, Caller

IIUC,Calledcaller是计划中调用“来电者”的次数。但我不了解别人。

另一件事是选择特定功能然后 “来电者”标签显示了更多信息。 Ir, Ir per call, count, caller 在类型选项卡中:`EventType,Incl。自我,简短,公式。

我在这里没有任何想法。

到目前为止,我已经阅读了这些问题:

KCachegrind interpretation confusion Confused about profiling result

1 个答案:

答案 0 :(得分:7)

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

所有来电者"选项卡列应代表以下内容:

  • 包含:此功能整体生成的指令数由每个调用者细分。因为调用者是一个层次结构(因此是距离列),如果你的调用栈很深,可能有几个具有相同的值。

  • 距离:分隔的函数调用数是从“平面配置文件”面板中选择的函数中选定的行。

  • 被叫:调用者调用最终导致执行所选函数的函数的次数。

  • 来电:直接呼叫或调用所选功能的另一个来电者的功能(由距离决定)。

“来电者”标签更直接。它显示与所选功能的距离为1的函数。换句话说,这些是直接调用所选函数的函数。

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

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

  • 计数:来电者调用所选功能的次数。

  • 来电:直接调用所选功能的功能。

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

  • 包含:此功能执行的总指令以及它在其下面调用的所有功能。

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

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