linux - 在不修改代码的情况下测量函数执行时间

标签 linux performance compiler-construction time measurement

我在库中发现了一些代码(函数),可以通过编译器的优化来改进(作为主要思想——找到好的东西来深入编译器)。我想通过脚本自动测量这个函数的执行时间。由于它是库中的低级函数并获取参数,因此很难提取它。 因此我想找出在不修改库/应用程序/环境的情况下准确测量此功能(精确的 CPU 时间)的方法。您对如何实现这一目标有任何想法吗?

我可以编写包装器,但在不久的将来我需要更多的应用程序来进行性能测试,我认为为每个应用程序编写包装器是非常丑陋的。

P.S.:我的代码将在 ARM (armv7el) 架构上运行,该架构具有某种“性能监视器控制”寄存器。我已经了解了 linux 内核中的“perf”。但是不知道是不是我需要的?

最佳答案

不清楚您是否有权访问要分析或改进的函数的源代码,即您是否能够重新编译所考虑的库。

如果您在最新的 Linux 系统上使用最新的 GCC(至少是 4.6),您可以使用像 gprof 这样的分析器(假设您能够重新编译库)或更好的 oprofile (无需重新编译即可使用),并且可以根据需要自定义 GCC。

请注意,与任何测量一样,分析可能会改变观察到的现象。

如果您正在考虑为优化目的定制 GCC 编译器,请考虑制作一个 GCC 插件,或者更好的是,为此目的制作一个 MELT 扩展(MELT 是一种用于扩展 GCC 的高级领域特定语言)。您还可以为自己的特定分析目的自定义 GCC(使用 MELT)。

关于linux - 在不修改代码的情况下测量函数执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11577294/

相关文章:

c++ - 嵌套模板 gcc 编译器 4.1.2 错误

java - 需要扫描仪类的帮助来创建 token

java - 在编译时检查传递给方法的字符串参数是否有@deprecated 注释

python - 许多数据帧上的高效 Python Pandas Stock Beta 计算

java - 具有返回类型而不是 void 的性能影响是什么?

performance - goroutine 堆栈跟踪不完整

C语言命令行参数+读入文件

c - 将相对路径传递给 fopen()

c++ - 优化 O_DIRECT 写入

linux - 找出 JBoss 消耗了多少 cpu 时间、内存和 I/O 时间?