首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++ Callgrind中自己的时间到底是什么?

在C++ Callgrind中自己的时间到底是什么?
EN

Stack Overflow用户
提问于 2020-02-06 06:24:28
回答 1查看 357关注 0票数 4

我正在用C++ (在Linux上)编程,最近我开始使用Valgrind/Callgrind来优化我的代码。在阅读了几个教程之后,似乎专注于具有最高“自我”成本的函数是一个好主意。

我发现了两个自身成本很高的函数(它们都被调用了>1M次,并且相对于整个程序执行时间,每个函数都有>10%的自我成本)。在kcachegrind中,它显示:

然而,Callgrind没有告诉我函数的哪一部分弥补了自身的成本,这使得优化代码变得困难。自我成本到底是什么,我如何尝试降低它?

我的理解/猜测是,自我成本包括读/写数据、缓存未命中、基本数学操作、复制堆栈中的内容(包括函数参数)等。在我可以解决它之前,我如何知道它是哪一个?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-02-07 17:32:41

Callgrind/Kcachegrind可以通过两种方式表示时间。

  1. %相对。这是默认设置,所有时间都以总time.
  2. Absolute.的百分比表示这是“周期估计”的计数。这是基于各种“事件”,如指令读取,数据缓存未命中等。默认情况下,callgrind将只计算指令读取-您将需要添加选项--cache-sim=yes用于缓存模拟,--branch-sim=yes用于分支预测器模拟。请注意,Valgrind只有简单的缓存模拟和基本的分支预测器。

"Self“是在每个函数中花费的时间(不包括任何子函数)。“包含性”是指在一个函数及其调用的所有子函数上所花费的时间。

如果您希望查看花费在函数中的时间的细目,则需要使用调试信息编译您的应用程序。然后,在Callgrind下运行应用程序并在Kcachegrind中打开输出文件后,您可以查看右上角窗格中的"Source Code“选项卡。这应该会在函数的每一行上给出时间的指示。

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

https://stackoverflow.com/questions/60084991

复制
相关文章

相似问题

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