首页 > 解决方案 > CPU 的 FLOPS 怎么可能远高于其时钟速度?

问题描述

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

标签: performancecpuflops

解决方案


对于这种巨大的影响,有多个因素相乘:

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

将所有这些因素相乘,我们得到:8 * 6 * 2 * 2 * 4.3 = 825 GFLOPS(与此处报告的统计数据相匹配)。这个计算当然并不意味着它实际上可以达到。例如,在这样的工作负载下,处理器可能会显着降频,以保持在其功率预算之内,这是英特尔至少从 Haswell 以来一直在做的事情(尽管细节已经改变,并且适用于服务器部件)。此外,大多数真实的代码在为许多 FMA 提供数据时遇到了很大的麻烦。大型矩阵乘法可以接近,例如根据这些统计数据8700k 在他们的 SGEMM 基准测试中达到了 496.7 Gflops。可能 8700k 在 6 核上的最大 AVX2 turbo 速度为 2.6GHz,但据我所知,默认情况下它没有 AVX 偏移(仅在超频时需要),或者 GEMM 并没有接近达到峰值 FLOPS。


推荐阅读