比较不同版本库的性能的最佳方法

时间:2010-01-27 17:22:48

标签: c++ windows performance optimization

目前,对于库中的每个调用,我正在进行多次迭代,测量每次调用所花费的时间,然后计算:

  1. 每次通话所需的平均时间
  2. 最短时间
  3. 最长时间
  4. 标准偏差
  5. 但它似乎不是一个好方法。由于这些时间取决于机器的状态,如果CPU忙于其他处理结果将受到影响。

    如果它是一个好方法,请建议我。或者我可以使用更好的方法。

1 个答案:

答案 0 :(得分:2)

它可以很好地衡量算法的基本速度,但找到总体性能取决于您使用的方式。指令数也没用。

例如,假设您有一些用C语言编写的func doMath(),以及一些带有3-4个模板化参数的模板化doMath调用。在简单的情况下,C函数通常会表现出更差的性能。但是,在大中型程序中,模板将增长到几十个或几百个甚至几千个而不是一个。这将扼杀指令缓存。同样适用于数据 - 一些树实现将具有更高的内存效率,而更臃肿的实现将在简单测试中表现更好,但在实际使用中它们将表现得更差。

类似地,通过基本测试看起来树似乎有性能,但是随着时间的推移,它可能会发现内存碎片过多,导致性能下降并随着时间的推移而下降,直到程序几乎无法运行。

所以,性能总是取决于你对某些东西的实际使用,而不仅仅是它的实现。不是说它总是权衡,有些实现比其他实现更好。但最终,获得卓越性能的唯一方法是深入了解计算机正在做什么以及编译器产生的确切内容,否则它对您来说将永远是个谜。

这是人们为什么建议剖析的部分原因,但剖析只会告诉你这么多,基本上指明了方向。你会看到症状,但往往不是原因。这是因为性能基于整个系统而且不仅仅是添加指令数量的简单问题。