比较软件实现的性能

时间:2010-02-27 10:04:47

标签: performance

全部,

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

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

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

由于底层硬件架构而提高了性能

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

有人可以想到别的东西还是全部?

谢谢, 西蒙

2 个答案:

答案 0 :(得分:2)

我会说:

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

答案 1 :(得分:1)

好问题。硬件确实有所作为,但软件结构差异也是如此。

像展开这样的微观优化很可能会产生很大的不同。

关于它的推理不会让你走得太远 - 你需要调查。

我不是说你可以对这个问题得到明确答案,但这就是我要做的。 Somehow, get 10 or 20 random-time stack samples,无论是通过中断和转储, pstack lsstack ,还是在调试器下运行并使用Ctrl-C或良好的堆栈 - 采样分析器,如RotateRight /缩放。

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

如果你没有符号,可能需要花费相当多的侦探工作来解决这个问题,你可能无法做到,但这就是我接近它的方式。