CPU的FLOPS如何比其时钟速度高得多?

时间:2018-07-07 04:10:11

标签: performance cpu flops

例如,现代i7-8700k的最大频率为4.7GHz,可以实现约60 GFLOPS(单精度source)。据我所知,一条指令至少要花费一个周期才能完成,那怎么可能呢?

1 个答案:

答案 0 :(得分:5)

要达到如此大的效果,必须将多个因素加在一起:

  • SIMD,Intel 8700k和类似处理器支持AVX和AVX2,其中包括许多对可同时保存8个浮点数的寄存器进行操作的指令。
  • 多核,8700k有6个核。
  • AVX2的一部分,融合乘法加法在同一指令中同时具有乘法和加法。
  • 高吞吐量执行。 latency (单个指令所花费的时间)对于处理器在一个单位时间内可以执行多少计算并不直接重要。诸如8700k之类的现代CPU可以在相同的周期内开始执行两个(独立)FMA(并且请记住,这些FMA仍然是SIMD指令,因此代表很多浮点运算)。该操作实际上是4个周期。

将所有这些因素相乘,我们得到:8 * 6 * 2 * 2 * 4.3 = 825 GFLOPS(与报道的统计here相匹配)。这种计算当然并不意味着它实际上可以实现。例如,处理器可能会在这样的工作负载下大幅降低时钟频率,以使其保持在其功率预算之内,这至少是自Haswell以来Intel一直在做的事情(尽管具体信息已更改且已应用于服务器部件)。同样,大多数实际代码在向许多FMA提供数据方面存在很大的麻烦。不过,大型矩阵乘法可以接近,例如,根据these stats,8700k在其SGEMM基准测试中达到496.7 Gflops。可能8700k在6核上的最大AVX2 Turbo速度为2.6GHz,但据我所知默认情况下它没有AVX偏移(仅在超频时才需要),或者GEMM并没有达到达到峰值FLOPS的水平。 / p>