如何衡量FLOPS

时间:2012-02-18 21:39:41

标签: c++ performance benchmarking flops

如何衡量FLOPSIOPS?如果我测量普通浮点加法/乘法的时间,它是否相当于FLOPS?

5 个答案:

答案 0 :(得分:4)

FLOPS是每秒浮点运算。要测量FLOPS,首先需要执行此类操作的代码。如果您有这样的代码,您可以测量的是它的执行时间。您还需要总结或估计(不测量!)所有浮点运算并将其除以测量的壁时间。你应该计算所有普通的操作,如加法,减法,乘法,除法(是的,即使它们更慢,更好地避免,它们仍然是FLOP ......)。你要怎么算小心!您在源代码中看到的内容很可能不是编译器在所有优化之后产生的内容。确定你可能不得不看一下装配..

FLOPS与每秒操作次数不同。因此,即使某些架构具有单个MAD(乘法和加法)指令,仍然会将这些指令视为两个FLOP。同样是SSE指令。您将它们视为一条指令,尽管它们执行多个FLOP。

FLOPS并非毫无意义,但在将FLOPS与sb进行比较时需要小心。 elses FLOPS,尤其是硬件供应商。例如。假设MAD操作,NVIDIA为其卡片提供了峰值FLOPS性能。因此,除非您的代码具有这些代码,否则您将无法获得此性能。要么重新考虑算法,要么通过正确的因子修改峰值硬件FLOPS,您需要为自己的算法找出它!例如,如果您的代码只执行乘法,则将其除以2.向右计数可能会使代码从次优到非常有效而无需更改单行代码。

答案 1 :(得分:3)

您可以使用CPU性能计数器让CPU自己计算它用于特定程序的浮点运算的数量。然后将它除以运行时间是一件简单的事情。在Linux上,perf工具可以很容易地完成这个工作,我在博客上写了详细信息:

http://www.bnikolic.co.uk/blog/hpc-howto-measure-flops.html

答案 2 :(得分:2)

通常你会使用一些众所周知的基准。像MIPS和megaFLOPS这样的事情并不意味着开始,如果你不将它们限制在特定的基准测试中,那么即使是那么一点意义都会丢失。

通常,例如,整数速度将在“drystone MIPS”中引用,浮点在“Linpack megaFLOPS”中引用。在这些中,“drystone”和“Linpack”是用于进行测量的基准的名称。

IOPS是I / O操作。它们大致相同,但在这种情况下,关于使用哪种基准(尽管SPC-1看起来相当受欢迎)的协议并不多。

答案 3 :(得分:1)

FLOP的定义不明确。 mul FLOPS与添加FLOPS不同。您必须提出自己的定义或从众所周知的基准中获取定义。

答案 4 :(得分:1)

这是一个高度架构特定的问题,对于天真/基本/开始启动,我建议找出你的特定硬件上有多少操作1乘法然后进行大矩阵乘法,并查看它需要多长时间。然后,您可以轻松估算特定硬件的FLOP

衡量人字拖的行业标准是众所周知的LinpackHPL high performance linpack,请尝试查看来源或运行自己的

我也会将此答案称为优秀的reference