CPU 的 FLOPS 怎么可能比它们的时钟速度高得多?

How can CPU's have FLOPS much higher than their clock speeds?

例如,据称现代 i7-8700k 可以执行 ~60 GFLOPS(单精度,source),而其最大频率为 4.7GHz。据我所知,一条指令至少需要一个周期才能完成,这怎么可能?

有多个因素相乘产生了这种巨大的影响:

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

将所有这些因素相乘,我们得到:8 * 6 * 2 * 2 * 4.3 = 825 GFLOPS(与报告的统计数据相匹配 here). This calculation certainly does not mean that it can actually be attained. For example the processor may downclock significantly under such a workload in order to stay within its power budget, which is what Intel has been doing at least since Haswell (though the specifics have changed and it applied to server parts). Also, most real code has significant trouble feeding that many FMAs with data. Large matrix multiplications can get close though, and for example according to these stats 8700k 在其 SGEMM 基准测试中达到了 496.7 Gflops。可能是 8700k 的最大 AVX2 6 核上的涡轮速度为 2.6GHz,但据我所知,它默认没有 AVX 偏移(仅在超频时需要),或者 GEMM 离达到峰值 FLOPS 还很远。