【问题标题】:Measure function time execution without modification code在不修改代码的情况下测量函数时间执行
【发布时间】:2012-07-19 14:36:47
【问题描述】:

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

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

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

【问题讨论】:

  • 您应该能够使用与您的编程语言兼容的任何代码分析器 - 这正是他们要解决的问题。
  • 你有异形库的源代码吗?你用的是什么编译器?你用gprof还是oprofile
  • 使用什么样的分析器并不重要。但重要的是不要重新编译应用程序并获取函数执行时间的真实值。是的,我有分析应用程序(库)的源代码。

标签: linux performance compiler-construction time measurement


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,但知道重要,甚至不知道如何更改编译器。重要的是如何测量某些东西(函数)的执行,例如在应用我的优化之前和之后,而不改变观察到的现象 - 这很重要。如果我添加 -gp (gprof) 和配置文件,我不能确定 gprof 没有改变测量时间 - 因为它改变了汇编程序并添加了额外的代码。我需要测量精确编译的二进制文件。我建议通过使用特定的硬件寄存器来完成 - 这些功能应该应用在配置文件/测量工具中。
猜你喜欢
  • 1970-01-01
  • 2022-07-19
  • 2013-04-28
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多