Intel Xeon E5-2640 v4 CPU 的理论最大性能 (FLOPS),仅使用加法?

Theoretical maximum performance (FLOPS ) of Intel Xeon E5-2640 v4 CPU, using only addition?

我对 Intel Xeon E5-2640 v4 的理论最大性能感到困惑 CPU(基于 Boardwell)。在 this post, >800GFLOPS; in this post, about 200GFLOPS; in this post 中,每个内核 3.69GFLOPS,每台计算机 147.70GFLOPS。那么Intel Xeon E5-2640 v4的理论最大性能是多少CPU?

部分规格:

我试图计算理论上的最大 FLOPS。根据我的理解,应该是(Max turbo frequency) * (IPC) * (#SIMD),也就是3.4 * 2 * 8 = 54.4GFLOPS,对不对?

是否应该乘以 2(由于流水线技术使得加法和乘法可以并行完成)?如果加法和乘法不同时出现怎么办? (例如,如果工作负载仅包含添加,*2 合适吗?)

另外,上面的计算应该是每核的最大FLOPS吧?

3.4 GHz 是最大 单核 turbo(以及 2 核),因此请注意,这不是 per-核心 GFLOPS,它是 单核 GFLOPS。

最大全核睿频为 2.6 GHz on that CPU, and probably won't sustain that for long with all cores maxing out their SIMD FP execution units. That's the most power-intensive thing x86 CPUs can do。因此,如果您实际上让所有内核都处于忙碌状态,它可能会回落到 2.4 GHz。


是的,你漏掉了两倍,因为 FMA 算作两个 FP 操作,这就是你需要做的才能达到硬件的理论最大 FLOPS。 FLOPS per cycle for sandy-bridge and haswell SSE2/AVX/AVX2。 (出于最大吞吐量的目的,您的 Broadwell 与 Haswell 相同。)

如果您只使用加法,则每条指令的每个 SIMD 元素只有一个 FLOP,而且 only 1/clock FP instruction throughput on a v4 (Broadwell) or earlier

Haswell / Broadwell 有两个完全流水线的 SIMD FMA 单元(在端口 0 和 1 上)和一个完全流水线的 SIMD FP-add 单元(在端口 1 上),延迟低于 FMA。

FP-add 单元与其中一个 FMA 单元位于同一执行端口,因此它每个时钟可以启动 2 个 FP 微指令,其中最多可以有一个是纯加法。 (除非您将 x+y 添加为 fma(x, 1.0, y),以更高的延迟换取更多的吞吐量。)


IPC (instruction per cycle) = 2;

不,这是每个周期的 FP 数学 指令的最大值,而不是每个时钟的指令总数。流水线的最窄点是 4 微指令宽,因此有一些循环开销和每个周期的存储指令以及两个 SIMD FP 操作的空间。

但是是的,每个时钟启动 2 FP 操作,如果它们不是加法的话。

Should it be multiplied by 2 (due to the pipeline technique which makes addition and multiplication can be done in parallel)?

您已经乘以 IPC=2 进行并行加法和乘法。

如果您指的是 FMA (Fused Multiply-Add),那么不,这实际上是将它们作为单个操作的一部分来执行,而不是作为“管道技术”并行执行。这就是为什么它被称为“融合”的原因。

FMA 与许多 CPU 中的乘法具有相同的延迟,而不是先乘后加。 (虽然在 Broadwell 上,FMA 延迟 = 5 个周期,vmulpd 延迟 = 3 个周期,vaddpd 延迟 = 3 个周期。所有都是完全流水线化的,吞吐量在这个答案的其余部分讨论,因为理论上最大吞吐量需要安排你的计算,而不是加法或乘法延迟的瓶颈。例如,使用多个累加器进行点积或其他减少。)无论如何,重点是,硬件 FMA 执行单元并不比 FP 乘法器或加法器复杂得多, 你不应该把它当作两个独立的操作。

如果您在源代码中写入 a*b + c,编译器可以 将其压缩 为 FMA,而不是先将 a*b 舍入为临时结果另外,取决于编译器选项(和默认值)是否允许。

  • How to use Fused Multiply-Add (FMA) instructions with SSE/AVX
  • FMA3 in GCC: how to enable

Instruction Set Extensions: AVX2, so #SIMD = 256/64 = 8;

256/64 = 4,而不是 8。在 32 字节(256 位)SIMD 向量中,可以容纳 4 个 double 精度元素。


每个内核每个时钟,Haswell/Broadwell 最多可以开始:

  • 两个 FP 数学指令(FMA/MUL/ADD),其中最多可以加法。
  • FMA 算作每个元素 2 个 FLOP,MUL/ADD 每个元素只算 1 个。
  • 最多 32 个字节宽的输入(例如 4 个双精度数或 8 个浮点数)