gpt4 book ai didi

c - 带有注释(编译指示)的仪器 C 代码用于性能跟踪

转载 作者:行者123 更新时间:2023-11-30 17:02:17 25 4
gpt4 key购买 nike

我想测量 C 代码中非常特定部分的时间(或出现次数)(它们可能仅限于某些函数中的少数指令)。目的之一是跟踪多个代码修订后的本地性能改进或回归。

我知道我可以为此目的定义宏。但是否有任何工具已经能够以一种更少侵入性的方式做到这一点呢?使用注释(#pragma)将是完美的:

void func_to_profile()
{
/* Some instructions */
...


#pragma profile foo start
/* A part of the code to track */
...
#pragma profile foo stop


/* More instructions */
...


#pragma profile bar start
/* Another part to measure */
...
#pragma profile bar stop
}

理想情况下,在运行结束时,该工具将显示每个分段的累计耗时。例如:

-- [foo] cumulated time: 42s
-- [bar] cumulated time: 7s

是否有任何现有工具已经可以做到这一点,或者我别无选择,只能开发自己的GCC 插件

最佳答案

核心时钟周期等事件的

perf record会将事件累积到指令中。但这并不精确:获取事件计数的指令并不总是那些本身很慢的指令,只是在附近,例如等待缓慢的事情发生。但足够接近,具有潜在的用途。

看起来您所需要的只是查看每个 insn 或每行 C 的计数(通过调试信息映射)并查看相对计数何时发生变化。

这应该可以确定更改何时使 asm 的某个部分运行速度变慢:对于与该源代码行关联的 insn,来自 perf 事件的计数的相对份额将会更高。 (+/- 很多挥手,因为 C 行并不总是直接映射到 asm 指令,特别是当优化重组一些分支逻辑、自动向量化等时)

<小时/>

也许可以编写一个自动化测试程序,在性能记录下运行您的代码,然后将性能报告数据处理为某种可以被使用的格式。比较源版本时进行比较/跟踪。

关于c - 带有注释(编译指示)的仪器 C 代码用于性能跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36615007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com