C++ 如何解释kcachegrind的结果

C++ 如何解释kcachegrind的结果,c++,profiling,valgrind,kcachegrind,callgrind,C++,Profiling,Valgrind,Kcachegrind,Callgrind,谁能告诉我如何对kcachegrind的结果感兴趣 我有两个版本的代码(v1,v2),都是在调试模式下编译的。我在valgrind中运行了以下选项: valgrind--tool=callgrind-v.. 由此生成的输出文件在kcachegrind中打开。现在我已经发现代码的v2版本比第一个版本运行得更快,v1本来就是这样。但是我如何从kcachegrind的调用图输入结果呢 在kcachegrind所有呼叫者选项卡中,我有以下列:包括距离、呼叫、呼叫者 IIUC、Called和caller是

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

我有两个版本的代码(v1,v2),都是在调试模式下编译的。我在valgrind中运行了以下选项:

valgrind--tool=callgrind-v..

由此生成的输出文件在kcachegrind中打开。现在我已经发现代码的v2版本比第一个版本运行得更快,v1本来就是这样。但是我如何从kcachegrind的调用图输入结果呢

在kcachegrind
所有呼叫者
选项卡中,我有以下列:
包括距离、呼叫、呼叫者

IIUC、
Called
caller
是程序中调用“调用者”的次数。但是我不知道其他人

另一件事是当选择一个特定的函数,然后 “呼叫者”选项卡显示了更多信息<代码>Ir,每次呼叫的Ir,计数,呼叫方 在“类型”选项卡中:`EventType,包括Self、short和Formula

我不知道这里

到目前为止,我已经阅读了以下问题:


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

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

  • include:此函数作为一个整体生成的指令数,由每个调用方分解。因为调用方是层次结构(因此是距离列),所以如果调用堆栈很深,则可能有几个调用方具有相同的值

  • 距离:所选行与平面配置文件面板中所选函数的间隔函数调用数

  • Called(调用方调用函数并最终导致执行所选函数的时间)

  • 调用者:直接调用或调用所选函数的另一个调用者的函数(由距离决定)

“呼叫者”选项卡更简单。它显示与所选函数的距离为1的函数。换句话说,这些是直接调用所选函数的函数

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

  • Ir per call:每次调用执行的指令数

  • 计数:调用方调用所选函数的次数

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

有关活动,请参阅手册第页。我怀疑,如果您没有定义自己的类型,那么您应该看到的只是“指令获取”和可能的“周期估计”。这些列的快速细分如下:

  • include:再次说明此函数执行的全部指令及其下调用的所有函数

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

  • Short和Formula:定义自定义事件类型时使用这些列。除非您最终定义了自己的类型,否则您的类型应该是空的或非常短的(如CEst=Ir)