通过Oprofile在每个函数中消耗的循环

时间:2013-02-08 12:49:34

标签: profiling oprofile

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

samples  %        image name               symbol name
78149    15.0776  cvqa                     comp_corr.clone.2

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

samples  %        image name               symbol name
73179    15.0732  cvqa                     comp_corr.clone.2

在本报告中,我没有得到多少循环优化,以便我可以进行基准测试。到目前为止已经进行了多少优化?

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

我正在使用AMD64位机。

1 个答案:

答案 0 :(得分:0)

由于你的真正目标是优化程序,让我建议另一种思考方式。

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

现在,这是如何进行优化的。不要以任何测量为基础。相反,获取程序状态的一些样本(这是关键点)用自己的眼睛和大脑仔细研究每个样本,并了解程序在该状态下正在做什么,以及它的完整原因正在做。 (你会看到任何值得修正的统计数据可以揭示的内容,加上他们无法揭示的内容,这些都会产生重大影响。)

只要你在行动中抓住它,在两个或更多样本上,可以删除的东西,修复它给你一个大幅度的加速。 Here is an explanation of why it works and how much speedup you can expect. 完成后,您可以再次进行整体时间测量,看看您节省了多少时间。

然后不要停止。再来一遍。你会发现其他东西需要修复,由于你删除了第一个问题,现在这个问题已经变得更大了。

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

相关问题