Microsoft's Parallel Programming whitepaper描述了在各种FLOPS阈值下最佳的情况,并且FLOPS速率是何时应使用某种实现的决策点。
如何在应用程序中测量FLOPS?
最佳答案
FLOPS表示每秒进行浮点运算并对其进行测量,就像对执行的浮点运算的数量进行计数并除以执行它们所花费的时间一样简单。测量时间很容易。对操作进行计算很棘手,通常取决于硬件平台和所使用的编译器。通常,简单的运算(例如加法,减法和乘法)非常快。除法有点慢。求平方根甚至更慢。频谱中最慢的部分是先验函数,例如正弦,余弦,求幂和取对数。这些都将依次扩展并迭代计算,直到实现收敛。当前大多数CPU支持融合乘法和加法(FMA)操作,即A * B + C在单个周期中执行。
考虑到所有这些,给出绝对FLOPS值非常困难。如果您的代码仅执行简单的操作,那么您将获得较高的FLOPS计数。如果它做大量的先验,那么FLOPS计数将低得多(最多低100倍)。它还取决于获取/计算比率,该比率是您访问主内存的频率以及编译器在生成可从延迟隐藏中受益的代码的能力。
标准的FLOPS基准是LINPACK测试,它可以解决线性方程组的稠密系统。它仅使用简单的算术运算(无先验),尽管这还不足以说明CPU在执行更复杂的运算时的性能如何,但仍用于将超级计算机排在Top500中。