我正在分析我的代码,我已经找到了它最昂贵的部分。然而,它发生在内联函数中。为了衡量影响,我强制函数不内联。
现在,我想报告准确的分析数据。如果没有内联,我们就会有大量的开销(函数基本上是一个循环,但它经常被调用)。
我想知道是否有可能指示valgrind将代码的特定部分视为函数本身(如makros CALLGRIND_START_INSTRUMENTATION、CALLGRIND_STOP_INSTRUMENTATION),而不强制该函数不内联。
发布于 2012-12-05 03:58:18
valgrind --tool=callgrind能够显示关于cpu (和其他成本,如缓存)花费的许多细节。kcachegrind (可视化工具)可以很容易地显示各种成本(包括内联函数)。
试着运行,例如:
valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes 注意:要查看指令级的开销,必须使用kcachegrind
发布于 2012-12-04 22:06:21
也许你可以在调用你的函数之前调用CALLGRIND_TOGGLE_COLLECT宏,在你的函数开始时,同样的方式退出你的函数,然后在你的函数调用之后。例如。
int main()
{
CALLGRIND_TOGGLE_COLLECT;
myFunction();
CALLGRIND_TOGGLE_COLLECT;
}
__attribute__((noinline))
void myFunction()
{
CALLGRIND_TOGGLE_COLLECT;
//Do stuff
CALLGRIND_TOGGLE_COLLECT;
}应该能行得通。
发布于 2012-10-23 21:26:53
我不确定这是否是您想要的,但我不确定它不是:):
http://valgrind.org/docs/manual/cg-manual.html#cg-manual.overview
此外,由于每次执行指令都会执行一次指令高速缓存读取,因此您可以找出每行执行了多少条指令,这对传统的评测很有用。
https://stackoverflow.com/questions/13030281
复制相似问题