首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Callgrind内联函数

Callgrind内联函数
EN

Stack Overflow用户
提问于 2012-10-23 20:20:34
回答 3查看 1.7K关注 0票数 6

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

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

我想知道是否有可能指示valgrind将代码的特定部分视为函数本身(如makros CALLGRIND_START_INSTRUMENTATION、CALLGRIND_STOP_INSTRUMENTATION),而不强制该函数不内联。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-05 03:58:18

代码语言:javascript
复制
valgrind --tool=callgrind

能够显示关于cpu (和其他成本,如缓存)花费的许多细节。kcachegrind (可视化工具)可以很容易地显示各种成本(包括内联函数)。

试着运行,例如:

代码语言:javascript
复制
valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes 

注意:要查看指令级的开销,必须使用kcachegrind

票数 5
EN

Stack Overflow用户

发布于 2012-12-04 22:06:21

也许你可以在调用你的函数之前调用CALLGRIND_TOGGLE_COLLECT宏,在你的函数开始时,同样的方式退出你的函数,然后在你的函数调用之后。例如。

代码语言:javascript
复制
int main()
{
    CALLGRIND_TOGGLE_COLLECT;
    myFunction();
    CALLGRIND_TOGGLE_COLLECT;
}

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

应该能行得通。

票数 0
EN

Stack Overflow用户

发布于 2012-10-23 21:26:53

我不确定这是否是您想要的,但我不确定它不是:):

http://valgrind.org/docs/manual/cg-manual.html#cg-manual.overview

此外,由于每次执行指令都会执行一次指令高速缓存读取,因此您可以找出每行执行了多少条指令,这对传统的评测很有用。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13030281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档