如何测量FLOPS



如何测量FLOPS或IOPS?如果我测量普通浮点加法/乘法的时间,它等效于FLOPS吗?

FLOPS是每秒浮点运算。要测量FLOPS,首先需要执行此类操作的代码。如果你有这样的代码,你可以衡量的是它的执行时间。您还需要总结或估计(而不是测量!)所有浮点运算,并将其除以测量的墙时间。你应该计算所有的普通运算,如加法、减法、乘法、除法(是的,尽管它们更慢,也更好地避免了,但它们仍然是FLOP…)。小心计算!你在源代码中看到的很可能不是编译器经过所有优化后产生的结果。为了确定起见,您可能需要查看该程序集。。

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,请尝试查找源代码或运行您自己的

我也认为这个答案是一个很好的参考

相关内容

  • 没有找到相关文章

最新更新