【问题标题】:Cycles consumed in each function through Oprofile通过 Oprofile 在每个函数中消耗的周期
【发布时间】:2013-02-08 12:49:34
【问题描述】:

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

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

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

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

在这份报告中,我没有了解已对周期进行了多少优化,以便我可以进行基准测试。到现在做了多少优化?

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

我正在使用 AMD64 位机器。

【问题讨论】:

    标签: profiling oprofile


    【解决方案1】:

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

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

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

    一旦你在两个或更多样本上发现它正在做的事情,可以删除的东西,修复它给你一个显着的加速。 Here is an explanation of why it works and how much speedup you can expect. 完成此操作后,您可以再次进行整体时间测量,看看您节省了多少时间。

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

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

    【讨论】:

    • 感谢您的建议。但是,我更感兴趣的是了解总代码执行时间或整个代码消耗的总周期。有什么办法可以得到吗?即使有办法通过 gprof 你也可以建议我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多