如何测量FLOPS或IOPS?如果我测量普通浮点加法/乘法的时间,它等效于FLOPS吗?
FLOPS与每秒操作数不同。因此,即使有些体系结构只有一个MAD(乘法和加法)指令,这些指令仍然算作两个FLOP。类似于SSE指令。尽管它们执行多个FLOP,但您可以将它们视为一条指令。
FLOPS并非完全没有意义,但当你将你的FLOPS与其他人的FLOPS进行比较时,你需要小心,尤其是硬件供应商。例如,NVIDIA为假设MAD操作的卡提供峰值FLOPS性能。因此,除非您的代码具有这些特性,否则您将永远无法获得这种性能。要么重新思考算法,要么通过正确的因素修改峰值硬件FLOPS,你需要为自己的算法计算出来!例如,如果你的代码只执行乘法运算,你会把它除以2。计算正确可能会使您的代码从次优变为高效,而无需更改一行代码。。
您可以使用CPU性能计数器让CPU自己计算它为特定程序使用的浮点运算的数量。然后就是将其除以运行时间的简单问题。在Linux上,perf工具可以很容易地做到这一点,我在博客上写了一篇关于这一点的详细文章:
http://www.bnikolic.co.uk/blog/hpc-howto-measure-flops.html
FLOP的定义不明确。mul FLOPS不同于add FLOPS。你要么提出自己的定义,要么从一个众所周知的基准中获得定义。
通常使用一些众所周知的基准测试。像MIPS和megaFLOPS这样的东西一开始意义不大,如果你不把它们限制在特定的基准上,即使是那一点点意义也会失去。
通常,例如,整数速度将在"drystone MIPS"中引用,浮点将在"Linpack megaFLOPS"中引用。其中,"drystone"one_answers"Linpack"是用于进行测量的基准的名称。
IOPS是I/O操作。它们基本上是一样的,尽管在这种情况下,对于使用哪个基准没有达成太多一致(尽管SPC-1似乎相当受欢迎)。
这是一个高度特定于体系结构的问题,对于一个简单/基本/启动的开始,我建议您在特定的硬件上找出运算1乘法需要多少次,然后进行一个大型矩阵乘法,并查看它需要多长时间。然后你可以很容易地估计你的特定硬件的FLOP
测量触发器的行业标准是众所周知的Linpack或HPL高性能Linpack,请尝试查找源代码或运行您自己的
我也认为这个答案是一个很好的参考