【问题标题】:How can CPU's have FLOPS much higher than their clock speeds?CPU 的 FLOPS 怎么可能远高于其时钟速度?
【发布时间】:2018-12-15 14:51:30
【问题描述】:

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

【问题讨论】:

标签: performance cpu flops


【解决方案1】:

有多种因素叠加在一起才能产生这种巨大的影响:

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

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

【讨论】:

  • 除了多核外,每个核还可以运行 2 个不同的线程以获得更高的性能
  • 英特尔提供了不同的编号。他们为他们的处理器发布了 GFLOPS 指标:intel.com/content/dam/support/us/en/documents/processors/…——他们提到 i7-8700K 达到了 355.2 GFLOPS。 - 但是,正如您所提到的,一些基准测试产生了更高的结果。 -- Intel 使用 i7-8700 的基本时钟,即 3.7GHz -- 因此,Rpeak = GPU Ghz * # cores * vector-ops * special-instr = 3.7 GHz * 6 cores * 8 DP vector ops * 2 FMA3 = 355.2 GFlops
猜你喜欢
  • 2014-09-16
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-09
  • 2018-12-22
  • 2010-09-11
  • 1970-01-01
  • 2017-09-24
相关资源
最近更新 更多