9

我一直在寻找很长一段时间,似乎无法找到一个官方/结论性的数字来引用英特尔至强四核可以完成的单精度浮点运算/时钟周期的数量。我有一个 Intel Xeon 四核 E5530 CPU。

我希望用它来计算我的 CPU 可以达到的最大理论 FLOP/s。

MAX FLOPS = (# 核心数) * (时钟频率 (周期/秒)) * (# FLOPS / 周期)

任何指向我正确方向的东西都会很有用。我发现 Sandy-bridge 和 haswell SSE2/AVX/AVX2 的每个周期都有这个 FLOPS

英特尔酷睿 2 和 Nehalem:

4 DP FLOPs/cycle:2-wide SSE2 加法 + 2-wide SSE2 乘法

8 SP FLOPs/cycle:4-wide SSE 加法 + 4-wide SSE 乘法

但我不确定这些数字是在哪里找到的。他们是否假设一个融合乘加(FMAD)操作?

编辑:使用它,在 DP 中,我计算英特尔引用的正确 DP 算术吞吐量为 38.4 GFLOP/s(在此处引用)。对于 SP,我得到了两倍,76.8 GFLOP/s。我很确定 4 DP FLOP/cycle 和 8 SP FLOP/cycle 是正确的,我只想确认他们如何获得 4 和 8 的 FLOPs/cycle 值。

4

1 回答 1

10

Nehalem 能够执行 4 DP 或 8 SP FLOP/cycle。这是使用 SSE 完成的,它对打包的浮点值、DP 中的 2/寄存器和 SP 中的 4/寄存器进行操作。为了实现 4 DP FLOP/cycle 或 8 SP FLOP/cycle,内核必须在每个周期执行 2 个 SSE 指令。这是通过在每个周期执行一个 MULDP 和一个 ADDDP(或一个 MULSP 和一个 ADDSP)来完成的。这是可能的原因是因为 Nehalem 为 SSE 乘法和 SSE 加法具有单独的执行单元,并且这些单元是流水线的,因此throughput每个周期是一个乘法和一个加法。乘法器流水线中的乘法器在 SP 中为 4 个周期,在 DP 中为 5 个周期。添加在流水线中持续 3 个周期,与 SP/DP 无关。流水线中的周期数称为latency. 要计算峰值 FLOP/cycle,您只需要知道吞吐量。因此,乘法器和加法器(2 个执行单元)的吞吐量均为 1 个 SSE 向量指令/周期,DP 中有 2 x 2 = 4 FLOP/周期,SP 中有 2 x 4 = 8 FLOP/周期。为了实际维持这个峰值吞吐量,您需要考虑延迟(因此您在管道中至少有与管道深度一样多的独立操作)并且您需要考虑能够足够快地提供数据。Nehalem 有一个集成的内存控制器,能够从内存中获得非常高的带宽,如果数据预取器正确地预测数据的访问模式(从内存中顺序加载是它可以预测的一个微不足道的模式),它就可以实现这一目标。通常没有'

以下是有关在何处可以找到有关独立执行单元数量及其吞吐量和周期延迟的信息的详细信息。

参见第 105 页8.9本文档的执行单元

http://www.agner.org/optimize/microarchitecture.pdf

它说对于尼哈勒姆

端口 0 上的浮点乘法器对于单精度的延迟为 4,对于双精度和长双精度的延迟为 5。浮点乘法器的吞吐量是每个时钟周期 1 次运算,Core2 上的长双精度除外。浮点加法器连接到端口 1。它的延迟为 3,并且是完全流水线的。

为了获得 8 SP FLOP/cycle,您需要 4 SP ADD/cycle 和 4 SP MUL/cycle。加法器和乘法器位于不同的执行单元上,并从不同的端口分派,每个都可以使用 SSE 压缩(向量)指令(4x32 位 = 128 位)同时在 4 个 SP 压缩操作数上执行。两者都具有每个时钟周期 1 次操作的吞吐量。为了获得该吞吐量,您需要考虑延迟......指令发出后多少个周期才能使用结果......所以您必须发出几个独立的指令来覆盖延迟。单精度乘法器的延迟为 4,加法器为 3。

您可以在英特尔优化指南表 C-15a 中找到 Nehalem 的这些相同吞吐量和延迟数字

http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-optimization-manual.html

于 2014-04-21T19:18:55.197 回答