【问题标题】:Comparing performance of software implementations比较软件实现的性能
【发布时间】:2010-02-27 10:04:46
【问题描述】:

大家好,

这是一个更笼统的问题,但基本上我想比较两个多媒体软件应用程序的性能。尽管它们在做同样的事情,但它们在不同的平台上运行,而且对实现一无所知。我得到了一些完全不同的性能数据,我试图推断可能是什么情况。到目前为止,我想出了以下内容:

软件优化带来更好的性能:

  • 以更高的代码内存占用为代价的循环展开
  • 以更高的数据内存占用为代价对存储在内存中的结果进行专业计算

底层硬件架构带来更好的性能

  • 以更高的时钟速度运行
  • 为应用程序提供更好的硬件支持
  • 更好的缓存机会

有人能想到别的吗?还是仅此而已?

谢谢, 西蒙

【问题讨论】:

    标签: performance


    【解决方案1】:

    我会说:

    • 如果您对实现一无所知,您将不会对该实现的工作原理感兴趣,包括循环展开和所有内容。
    • 在该抽象级别上,您可能想要衡量与最终用户相关的性能目标,例如 in this Wikipedia article
    • 尤其对于单用户系统响应时间和吞吐量更重要;而对于多用户系统,并发性和吞吐量很重要。前者受时钟速度和UI设计的影响;后者还受高速缓存大小和高负载下的整体系统行为的影响。
    • Martin Fowler 在他的PoEA 中对性能指标进行了很好的审查,

    【讨论】:

      【解决方案2】:

      好问题。硬件当然会有所不同,但软件结构上的差异也会有所不同。

      展开之类的微观优化不太可能产生太大影响。

      推理不会让你走太远 - 你需要调查。

      我并不是说你可以得到这个问题的明确答案,但这就是我会做的。 Somehow, get 10 or 20 random-time stack samples,无论是通过中断和转储、pstacklsstack,还是在调试器下运行并使用Ctrl-C,或者像@ 这样的良好堆栈采样分析器987654322@/Zoom.

      您可以查看这些示例并按百分比了解每个程序如何花费时间。如果它们都接近最佳,即使您不确切知道它们在做什么,它们也应该看起来非常相似。比如说,如果有人在内存管理上花费了更高比例的时间,那就是一个危险信号。如果调用堆栈通常在一个上比另一个上深得多,这也会引起怀疑,不是因为调用很昂贵,而是因为过于笼统的浪费编码风格往往会表明这一点。

      如果您没有符号,则可能需要大量的侦探工作才能弄清楚这一点,而您可能无法做到,但这就是我的处理方式。

      【讨论】:

        猜你喜欢
        • 2011-08-12
        • 1970-01-01
        • 2012-06-07
        • 1970-01-01
        • 2021-11-27
        • 2021-10-19
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多