【发布时间】:2020-05-21 21:51:02
【问题描述】:
我正在使用 C++(在 Linux 上)进行编程,最近我开始使用 Valgrind/Callgrind 来优化我的代码。在阅读了几个教程之后,似乎关注具有最高“自我”成本的函数是一个好主意。
我发现两个函数的自身成本很高(相对于整个程序执行时间,它们都被调用 >1M 次,并且每个函数的自身成本都 >10%)。在 kcachegrind 中显示:
但是,Callgrind 并没有告诉我函数的哪一部分弥补了自我成本,因此难以优化代码。什么是自我成本,我该如何尝试降低它?
我的理解/猜测是,自我成本包括读取/写入数据、缓存未命中、基本数学运算、在堆栈中复制内容(包括函数参数)等。在解决它之前,我如何知道它是哪一个?
谢谢
【问题讨论】:
-
你能在问题中包含输出吗?
-
嗨@idclev463035818,你到底需要看什么? (一般信息/被调用者地图/源代码?)
-
我主要是好奇;)。老实说,我还不知道我是否可以回答,但是当我试图搜索它时,第一个障碍是我没有找到任何关于“自我时间”的东西,而只有“自我成本”。显示您尝试解释的输出将有助于其他人解释它
-
你说得对,我不认为自我时间是正确的术语。 :) 我用“自我”成本取代了“自我时间”。我已经包含了一个来自 kcachegrind 的小屏幕截图。
-
因此,在该特定功能的 18% 总成本中,14% 是自费,其中 3-4% 可归因于代码中的特定行(使用kcachegrind)。我怎样才能知道剩下的约 10% 的自费来自哪里?
标签: c++ valgrind self callgrind