如何衡量FLOPS

Mad*_*a B 5 c++ performance benchmarking flops

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

ang*_*nor 7

FLOPS 是每秒浮点运算。要测量 FLOPS,您首先需要执行此类操作的代码。如果你有这样的代码,你可以衡量的是它的执行时间。您还需要总结或估计(而不是测量!)所有浮点运算并将其除以测量的壁时间。您应该计算所有普通操作,如加法、减法、乘法、除法(是的,即使它们更慢并且更好地避免,它们仍然是 FLOPs..)。小心你如何计算!您在源代码中看到的内容很可能不是编译器在所有优化后生成的内容。可以肯定的是,您可能必须查看程序集。

FLOPS 与每秒操作数不同。因此,即使某些体系结构只有一条 MAD(乘加)指令,这些指令仍然算作两个 FLOP。同样的SSE指令。你把它们算作一条指令,尽管它们执行不止一条 FLOP。

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


usr*_*usr 2

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