Callgrind内联函数

时间:2012-10-23 12:20:34

标签: c++ gcc profiling valgrind callgrind

我正在分析我的代码,我已经找到了最昂贵的部分。但它发生在内联函数中。为了衡量影响,我强迫函数不被内联。

现在我想报告准确的分析数据。没有内联,我们有一个巨大的开销(该函数基本上是一个循环,但它经常被调用)。

我想知道是否可以指示valgrind处理代码的特定部分,因为它本身就是一个函数(如makros CALLGRIND_START_INSTRUMENTATION,CALLGRIND_STOP_INSTRUMENTATION),而不强制函数不被内联。

3 个答案:

答案 0 :(得分:5)

valgrind --tool=callgrind

能够显示有关cpu(以及其他成本)的详细信息 作为缓存)花了。 kcachegrind(可视化工具)可以轻松显示各种成本 (包括内联函数)。

尝试运行,例如用:

valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes 

注意:要在指令级别查看成本,必须使用kcachegrind

答案 1 :(得分:0)

也许你可以在调用你的函数之前和函数的开头调用CALLGRIND_TOGGLE_COLLECT宏,同样在你的函数调用之后调用它。 E.g。

int main()
{
    CALLGRIND_TOGGLE_COLLECT;
    myFunction();
    CALLGRIND_TOGGLE_COLLECT;
}

__attribute__((noinline))
void myFunction()
{
    CALLGRIND_TOGGLE_COLLECT;
    //Do stuff
    CALLGRIND_TOGGLE_COLLECT;
}

应该做的伎俩。

答案 2 :(得分:-1)

我不确定这是不是你想要的但是我不确定它不是:):
http://valgrind.org/docs/manual/cg-manual.html#cg-manual.overview

  

此外,由于每个指令执行一次指令高速缓存读取   执行后,您可以查看每个执行的指令数量   line,这对传统的分析很有用。