如何测量FLOPS或IOPS?如果我测量普通浮点加法/乘法的时间,是否等同于FLOPS?
发布于 2012-09-06 14:33:18
FLOPS是每秒的浮点操作数。要测量FLOPS,您首先需要执行此类操作的代码。如果你有这样的代码,你能衡量的就是它的执行时间。您还需要总结或估计(而不是测量!)所有浮点运算,并将其除以测量的墙时间。你应该计算所有的普通运算,比如加法、减法、乘法、除法(是的,即使它们速度更慢、避免得更好,但它们仍然是失败的。)小心你的数数方式!您在源代码中看到的内容很可能不是编译器经过所有优化后生成的内容。为了确保您很可能需要查看程序集..
FLOPS与每秒操作数不同。因此,即使某些体系结构只有一条MAD (乘法和加法)指令,这些指令仍然算作两个FLOP。类似的SSE指令。你将它们算作一条指令,尽管它们执行的是不止一条FLOP。
FLOPS并不是完全没有意义的,但在将你的FLOPS与某人进行比较时,您需要小心。elses失败了,尤其是硬件供应商。例如,NVIDIA在假设MAD操作的情况下为他们的卡提供了最高的FLOPS性能。因此,除非您的代码具有这些特性,否则您永远不会获得这样的性能。要么重新考虑算法,要么使用正确的因子修改峰值硬件FLOPS,这需要您自己的算法来解决!例如,如果你的代码只执行乘法,你可以将它除以2。正确的计数可能会让你的代码从次优到相当有效,而不需要改变一行代码。
发布于 2012-09-05 14:39:49
您可以使用CPU性能计数器让CPU自己计算它用于特定程序的浮点运算的数量。然后就是将其除以运行时间的简单问题。在Linux上,perf工具可以很容易地做到这一点,我在我的博客上有一篇关于这方面的细节的文章:
http://www.bnikolic.co.uk/blog/hpc-howto-measure-flops.html
发布于 2012-02-19 06:53:28
通常你会使用一些著名的基准测试。像MIPS和megaFLOPS这样的东西从一开始就没有多大意义,如果你不将它们限制在特定的基准测试中,甚至连这一点意义都会丢失。
通常,例如,整数速度将在"drystone MIPS“中引用,浮点在"Linpack megaFLOPS”中引用。其中,"drystone“和"Linpack”是用于进行测量的基准的名称。
IOPS是I/O操作。它们大同小异,尽管在这种情况下,关于使用哪个(多个)基准测试并没有达成太多一致(尽管SPC-1似乎相当流行)。
https://stackoverflow.com/questions/9344325
复制相似问题