gpt4 book ai didi

cpu - 沙桥和 haswell SSE2/AVX/AVX2 的每个周期的 FLOPS

转载 作者:行者123 更新时间:2023-12-03 06:06:48 26 4
gpt4 key购买 nike

我对使用 Sandy-Bridge 和 Haswell 可以完成每个内核每个周期的触发器感到困惑。
根据我对 SSE 的理解,SSE 的每个内核每个周期应该是 4 个触发器,AVX/AVX2 的每个内核每个周期应该是 8 个触发器。

这似乎在这里得到验证,
How do I achieve the theoretical maximum of 4 FLOPs per cycle?
,和这里,
Sandy-Bridge CPU specification .

然而,下面的链接似乎表明 Sandy-bridge 每个内核每个周期可以执行 16 个触发器,Haswell 每个内核每个周期可以执行 32 个触发器
http://www.extremetech.com/computing/136219-intels-haswell-is-an-unprecedented-threat-to-nvidia-amd .

谁可以给我解释一下这个?

编辑:
我现在明白为什么我感到困惑了。我认为术语 FLOP 仅指单浮点 (SP)。我现在看到 How do I achieve the theoretical maximum of 4 FLOPs per cycle? 处的测试实际上在双浮点 (DP) 上,因此它们为 SSE 实现了 4 DP FLOPs/cycle,对于 AVX 实现了 8 DP FLOPs/cycle。在 SP 上重做这些测试会很有趣。

最佳答案

以下是一些最近的处理器微架构的理论最大 FLOP 计数( 每核 )以及如何实现它们的说明。

一般来说,要计算这个查找 FMA 指令的吞吐量,例如在 https://agner.org/optimize/或任何其他微基准测试结果,然后乘以(FMAs per clock) * (vector elements / instruction) * 2 (FLOPs / FMA) .
请注意,在实际代码中实现这一点需要非常仔细的调整(如循环展开),并且缓存未命中接近于零,并且在其他任何方面都没有瓶颈。现代 CPU 具有如此高的 FMA 吞吐量,以至于其他指令没有太多空间来存储结果或为它们提供输入。例如每个时钟 2 个 SIMD 负载也是大多数 x86 CPU 的限制,因此点积将在每 1 个 FMA 2 个负载上出现瓶颈。不过,经过仔细调整的密集矩阵乘法可以接近实现这些数字。

如果您的工作负载包括任何无法收缩到 FMA 中的 ADD/SUB 或 MUL,则理论上的最大数量不是您工作负载的合适目标。 Haswell/Broadwell 有 2 个每时钟 SIMD FP 乘法(在 FMA 单元上),但每个时钟只有 1 个 SIMD FP 加法(在具有较低延迟的单独矢量 FP 加法单元上)。 Skylake 放弃了单独的 SIMD FP 加法器,以 4c 延迟、每时钟 2 个吞吐量、对于任何向量宽度运行相同的 add/mul/fma。

英特尔

请注意,最近的微架构的赛扬/奔腾版本不支持 AVX 或 FMA 指令,仅支持 SSE4.2。

英特尔酷睿 2 和 Nehalem (SSE/SSE2):

  • 4 DP FLOPs/周期:2-wide SSE2 加法 + 2-wide SSE2 乘法
  • 8 SP FLOPs/cycle:4-wide SSE加法+ 4-wide SSE乘法

  • 英特尔 Sandy Bridge/Ivy Bridge (AVX1):
  • 8 DP FLOPs/周期:4 宽 AVX 加法 + 4 宽 AVX 乘法
  • 16 个 SP FLOPs/周期:8 宽 AVX 加法 + 8 宽 AVX 乘法

  • Intel Haswell/Broadwell/Skylake/Kaby Lake/Coffee/... (AVX+FMA3):
  • 16 DP FLOPs/cycle:两个 4-wide FMA(融合乘加)指令
  • 32 SP FLOPs/cycle:两个 8-wide FMA(融合乘加)指令
  • (使用 256 位向量指令可以降低某些 CPU 上的最大睿频时钟速度。)

  • 英特尔 Skylake-X/Skylake-EP/Cascade Lake/etc ( AVX512F ) 和 1 个 FMA 装置 :一些至强青铜/银
  • 16 DP FLOPs/cycle:一个 8-wide FMA(融合乘加)指令
  • 32 SP FLOPs/cycle:一条 16 宽的 FMA(融合乘加)指令
  • 与较窄的 256 位指令具有相同的计算吞吐量,但使用 AVX512 仍然可以加快速度以实现更广泛的加载/存储、一些不在 FMA 单元上运行的向量操作(如按位操作)和更宽的洗牌。
  • (运行中的 512 位向量指令会关闭端口 1 上的向量 ALU。此外 会降低最大睿频时钟速度 ,因此“周期”在您的性能计算中不是常数。)

  • 英特尔 Skylake-X/Skylake-EP/Cascade Lake/etc ( AVX512F ) 和 2 个 FMA 装置 :Xeon Gold/Platinum 和 i7/i9 高端桌面 (HEDT) 芯片。
  • 32 DP FLOPs/cycle:两个 8-wide FMA(融合乘加)指令
  • 64 SP FLOPs/cycle:两个 16 宽 FMA(融合乘加)指令
  • (运行中的 512 位向量指令会关闭端口 1 上的向量 ALU。同时降低最大睿频时钟速度。)

  • future :英特尔 Cooper Lake (Cascade Lake 的继任者) 预计推出 Brain Float ,一种用于神经网络工作负载的 float16 格式,支持实际的 SIMD 计算,不像当前的 F16C 扩展只支持加载/存储转换为 float32。在相同的硬件上,这应该使 FLOP/周期吞吐量与单精度相比增加一倍。

    当前的英特尔芯片仅在 iGPU 中的标准 float16 上直接进行实际计算。

    AMD

    AMD K10:
  • 4 DP FLOPs/周期:2-wide SSE2 加法 + 2-wide SSE2 乘法
  • 8 SP FLOPs/cycle:4-wide SSE加法+ 4-wide SSE乘法

  • AMD 推土机/打桩机/ Steam 压路机/挖掘机,每个模块(两个内核):
  • 8 DP FLOPs/周期:4-wide FMA
  • 16 SP FLOPs/周期:8-wide FMA

  • AMD锐龙
  • 8 DP FLOPs/周期:4-wide FMA
  • 16 SP FLOPs/周期:8-wide FMA


  • x86 低功耗

    英特尔凌动(Bonnell/45nm、Saltwell/32nm、Silvermont/22nm):
  • 1.5 DP FLOPs/cycle:标量 SSE2 加法 + 标量 SSE2 乘法每隔一个周期
  • 6 SP FLOPs/cycle:4-wide SSE加法+ 4-wide SSE乘法每隔一个周期

  • AMD 山猫:
  • 1.5 DP FLOPs/cycle:标量 SSE2 加法 + 标量 SSE2 乘法每隔一个周期
  • 4 SP FLOPs/cycle:每隔一个周期4-wide SSE加法+每隔一个周期4-wide SSE乘法

  • AMD捷豹:
  • 3 DP FLOPs/cycle:4-wide AVX 加法每隔一个周期+ 4-wide AVX 乘法在四个周期
  • 8 个 SP FLOPs/周期:每隔一个周期进行 8 次宽 AVX 加法 + 每隔一个周期进行 8 次宽 AVX 乘法



  • ARM

    ARM Cortex-A9:
  • 1.5 DP FLOPs/cycle:标量加法+标量乘法每隔一个周期
  • 4 SP FLOPs/cycle:4-wide NEON 加法每隔一个周期 + 4-wide NEON 乘法每隔一个周期

  • ARM Cortex-A15:
  • 2 DP FLOPs/周期:标量 FMA 或标量乘加
  • 8 SP FLOPs/周期:4 宽 NEONv2 FMA 或 4 宽 NEON 乘加

  • 高通Krait:
  • 2 DP FLOPs/周期:标量 FMA 或标量乘加
  • 8 SP FLOPs/周期:4 宽 NEONv2 FMA 或 4 宽 NEON 乘加


  • IBM电源

    IBM PowerPC A2 (Blue Gene/Q),每核:
  • 8 DP FLOPs/cycle:4-wide QPX FMA 每个周期
  • SP 元素扩展到 DP 并在同一单元上处理

  • IBM PowerPC A2 (Blue Gene/Q),每个线程:
  • 4 DP FLOPs/cycle:4-wide QPX FMA 每隔一个周期
  • SP 元素扩展到 DP 并在同一单元上处理


  • 英特尔麦克风/至强融核

    英特尔至强融核(Knights Corner),每个内核:
  • 16 DP FLOP/周期:每个周期 8 宽 FMA
  • 32 SP FLOP/周期:每个周期 16 宽 FMA

  • 英特尔至强融核(Knights Corner),每个线程:
  • 8 DP FLOP/周期:每隔一个周期 8 宽 FMA
  • 16 SP FLOPs/cycle:16-wide FMA 每隔一个周期

  • 英特尔至强融核(Knights Landing),每个内核:
  • 32 DP FLOPs/cycle:每个周期两个 8-wide FMA
  • 64 SP FLOPs/cycle:每个周期两个 16-wide FMA

  • IBM Blue Gene/Q 和 Intel Xeon Phi(Knights Corner)之所以有 per-thread 和 per-core 数据,是因为当每个内核运行一个以上线程时,这些内核具有更高的指令发布率。

    关于cpu - 沙桥和 haswell SSE2/AVX/AVX2 的每个周期的 FLOPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655835/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com