如何独立测量所用机器的性能

Edi*_*enz 5 c++ performance profiler

我有一个表现良好的例程.但是,我不得不改变它.这种改变提高了程序的精确度但却损害了性能.

例程是大量的数学计算,可能是CPU绑定(我仍然需要对此进行更严格的测试,但我99%肯定).它是用C++编写的(编译器是Borland C++ 6).

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

然后我讨论了这个主题:测量应用程序性能的技术 - Stack Overflow.我喜欢通过MFlops测量的想法.

我的老板建议尝试通过cpu时钟周期进行某种测量,因此测试将与机器无关,但是,我认为这种方法属于MFlops测试.

在我看来,衡量两件事(执行时间和MFlops)是要走的路,但我想听听stackoverflow专家你们的想法.

测量CPU绑定例程性能的方法是什么?

MSa*_*ers 6

如果您的应用程序受内存限制,CPU时钟周期也不是那么多.在更快的CPU上,您将花费更多的CPU周期等待相同的缓存未命中.(数学应用程序可能不受I/O限制).

另一个问题是某个指令序列的时钟周期数仍然会因架构而异(甚至包括Intel Core1/Core2之间).因此,作为性能的绝对衡量标准,一个CPU上的时钟周期几乎没有改进.

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


Ste*_*yle 2

我同意你老板的观点——以CPU时钟周期来衡量。但请注意,可能还会发生其他情况,例如大量缓存未命中会减慢代码速度。如果可以,请使用 VTune 或 Intel 的免费工具之一来查明瓶颈的性质。