2

Oprofile 致力于基于采样的理论。Opreport -l 选项通过以下方式为我们提供分析报告:

样本 % 图像名称 符号名称
78149 15.0776 cvqa comp_corr.clone.2

有了这些信息,我可以知道消耗时间的百分比。如果我在我的代码中做一些优化,我会再次得到报告:

样本 % 图像名称 符号名称
73179 15.0732 cvqa comp_corr.clone.2

在这份报告中,我没有得到多少周期优化已经完成,以便我可以进行基准测试。到目前为止已经做了多少优化?

有什么方法可以知道已经完成了多少周期优化,或者我可以通过任何其他方式进行基准测试?

我正在使用 AMD64 位机器。

4

1 回答 1

0

由于您的真正目标是优化程序,所以让我提出另一种思考方式。

主要衡量的是总体时间,而不是各种例程的周期或时间。

现在,这里是如何进行优化。不要以任何测量为基础。相反,获取程序状态的一些样本并(这是关键点)用你自己的眼睛和大脑足够仔细地研究每个样本,并了解程序在该状态下正在做什么,以及它的全部原因正在做。(你会看到统计数据可以揭示的任何值得修复的东西,以及他们无法揭示的东西,这一切都不同了。)

一旦你在两个或多个样本上发现它正在做的事情,一些可以被删除的东西,修复它会给你一个显着的加速。 这里解释了它为什么起作用以及你可以期待多少加速。 完成此操作后,您可以再次进行整体时间测量,并查看您节省了多少时间。

然后不要停下来。再来一遍。您会找到其他要修复的问题,由于您删除的第一个问题,现在这个百分比更大。

根据我的经验,使用真正的软件,这可以完成多达 5 或 6 次,之后程序可以比原来快几个数量级。原因是因为每次优化都会删除原始执行时间的一小部分,而这些部分可以累积到接近 100%。我不知道使用 Oprofile 或任何其他分析器工具取得的任何此类结果。

于 2013-02-08T14:55:02.033 回答