代码之家  ›  专栏  ›  技术社区  ›  Gustavo Muenz

如何独立于所用机器来衡量性能

  •  4
  • Gustavo Muenz  · 技术社区  · 16 年前

    我现在想测量例程的性能,首先我想测量执行时间,但在我看来这是一种有缺陷的方法,因为可能会有更多的事情发生。

    当时我碰到了这个话题: Techniques to measure application performance - Stack Overflow

    我的老板建议尝试使用某种cpu时钟周期的测量方法,因此测试将是独立于机器的,然而,我认为这种方法属于MFlops测试。

    在我看来,衡量这两个方面(执行时间和MFlops)是一种方法,但我想听听stackoverflow专家们的看法。

    6 回复  |  直到 8 年前
        1
  •  6
  •   MSalters    16 年前

    如果应用程序内存有限,那么CPU时钟周期也不意味着太多。在更快的CPU上,您只需花费更多的CPU周期来等待相同的缓存丢失(数学应用程序可能不受I/O限制)。

    另一个问题是,特定指令序列的时钟周期数在不同的体系结构中仍然会有所不同(甚至包括Intel Core1/Core2)。因此,作为性能的绝对衡量标准,一个CPU上的时钟周期很难得到改善。

    我认为他们实际上更糟。与时间不同,用户不关心周期。这对于现代多核cpu尤其重要。使用两倍循环数和3个核心的“低效”算法将在67%的时间内完成。用户可能会喜欢这样。

        2
  •  3
  •   Community Mohan Dere    8 年前

    我建议 没有抓住重点。

    你真正需要做的是 定位 语句或指令(不是函数)1)占用了大量的挂钟时间,2)可以找到优化的方法。

    假设软件是一个非平凡的大小,机会是它至少有几个层次的函数调用,这是很有可能的,其中一些函数调用(不是函数,函数) )负责显著的时间分数,并可进行优化。

    This 是找到它们的好方法,而且 this 是它使用的一个例子。

        3
  •  2
  •   Stephen Doyle    16 年前

    我同意你老板的看法-用cpu时钟周期来衡量。请注意,可能还有其他事情正在发生,例如大量缓存未命中,这会减慢代码的速度。如果可以的话,可以使用VTune或英特尔提供的免费工具来确定瓶颈的性质。

        4
  •  2
  •   David Thornley    16 年前

    更不用说CPU限制已经不像以前那么清晰了,还有缓存丢失等等。以前,CPU绑定的进程是仅受I/O等限制的进程,因为内存访问需要一定数量的CPU周期。

        5
  •  1
  •   mfawzymkh    16 年前

    可以用CPU硬件计数器来衡量,VTune英特尔配置文件在这方面相当不错。

    这是假设您的函数没有内存限制。

    谢谢

        6
  •  0
  •   Alan Jackson    16 年前

    是一条路要走。

    尽量减少你的测量

    下一步,运行一个 基线 来校准那台机器。要么使用上一次签入的版本,要么使用某种与您尝试度量的计算类型大致匹配的密集例程。然后您可以将基准表示为

    relative_time = measured_time_for_routine / measured_time_for_baseline