每个循环的FLOPS用于沙桥和haswell SSE2 / AVX / AVX2

时间:2013-03-27 09:48:53

标签: cpu intel cpu-architecture avx flops

我对使用Sandy-Bridge和Haswell可以完成每个核心每个循环的触发器感到困惑。 据我所知,对于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 FLOP /周期和AVX的8个DP FLOP /周期。在SP上重做这些测试会很有趣。

2 个答案:

答案 0 :(得分:104)

以下是一些最近处理器微体系结构的FLOP计数以及如何实现它们的解释:

Intel Core 2和Nehalem:

  • 4 DP FLOP /周期:2宽SSE2加+ 2宽SSE2乘法
  • 8 SP FLOP /周期:4宽SSE加法+ 4宽SSE乘法

Intel Sandy Bridge / Ivy Bridge:

  • 8 DP FLOP /周期:4宽AVX加法+ 4宽AVX乘法
  • 16 SP FLOPs / cycle:8-wide AVX plus + 8-wide AVX multiplication

Intel Haswell / Broadwell / Skylake / Kaby Lake:

  • 16 DP FLOP /周期:两个4宽FMA(融合乘法 - 加法)指令
  • 32 SP FLOPs / cycle:两个8宽FMA(融合乘法 - 加法)指令
AMD P10:

  • 4 DP FLOP /周期:2宽SSE2加+ 2宽SSE2乘法
  • 8 SP FLOP /周期:4宽SSE加法+ 4宽SSE乘法

AMD推土机/打桩机/压路机/挖掘机,每个模块(两个核心):

  • 8 DP FLOPs / cycle:4-wide FMA
  • 16 SP FLOP /周期:8宽FMA
AMD Ryzen

  • 8 DP FLOPs / cycle:4-wide FMA
  • 16 SP FLOP /周期:8宽FMA

Intel Atom(Bonnell / 45nm,Saltwell / 32nm,Silvermont / 22nm):

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

  • 1.5 DP FLOPs / cycle:标量SSE2加法+标量SSE2乘法每隔一个周期
  • 4 SP FLOP /周期:每隔一个周期加4宽SSE +每隔一个周期加4宽SSE乘法

AMD Jaguar:

  • 3 DP FLOP /周期:每隔一个周期增加4个宽AVX + 4个周期内4个宽AVX乘法
  • 8 SP FLOPs / cycle:每隔一个周期加8个AVX +每隔一个周期加8个AVX倍增

ARM Cortex-A9:

  • 1.5 DP FLOPs / cycle:标量加法+每隔一个周期的标量乘法
  • 4 SP FLOP /周期:每隔一个周期增加4个NEON +每隔一个周期增加4个NEON乘法

ARM Cortex-A15:

  • 2 DP FLOPs / cycle:标量FMA或标量乘法加法
  • 8 SP FLOPs / cycle:4-wide NEONv2 FMA或4-wide NEON multiply-add

Qualcomm Krait:

  • 2 DP FLOPs / cycle:标量FMA或标量乘法加法
  • 8 SP FLOPs / cycle:4-wide NEONv2 FMA或4-wide NEON multiply-add

IBM PowerPC A2(蓝色基因/ Q),每个核心:

  • 8 DP FLOP /周期:每个周期4宽QPX FMA
  • SP元素扩展到DP并在相同单元上处理

IBM PowerPC A2(蓝色基因/ Q),每个线程:

  • 4 DP FLOP /周期:每隔一个周期使用4宽QPX FMA
  • SP元素扩展到DP并在相同单元上处理

Intel Xeon Phi(Knights Corner),每核心:

  • 16 DP FLOP /周期:每个周期8个宽FMA
  • 32 SP FLOPs / cycle:每个周期16个FMA

Intel Xeon Phi(Knights Corner),每个主题:

  • 8 DP FLOP /周期:每隔一个周期8个宽FMA
  • 16 SP FLOP /周期:每隔一个周期16个宽FMA

Intel Xeon Phi(Knights Landing),每核心:

  • 32 DP FLOP /周期:每个周期两个8宽FMA
  • 64 SP FLOPs / cycle:每个周期两个16宽FMA

IBM Blue Gene / Q和Intel Xeon Phi(Knights Corner)的每个线程和每个核心数据的原因是,当每个核心运行多个线程时,这些核心具有更高的指令发布率。 / p>

答案 1 :(得分:18)

Haswell的吞吐量低于乘法和FMA。有两个乘法/ FMA单位,但只有一个f.p.添加单位。如果您的代码主要包含添加内容,则必须使用乘数为1.0的FMA指令替换添加内容以获得最大吞吐量。

Haswell上的FMA指令的延迟为5,每个时钟的吞吐量为2。这意味着您必须保持10个并行操作才能获得最大吞吐量。例如,如果要添加一个非常长的f.p列表。数字,你必须将它分成十个部分并使用十个累加器寄存器。

这确实可能,但谁会为一个特定的处理器进行如此奇怪的优化?