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

我很困惑,Sandy-Bridge和Haswell可以完成每个核心每个周期的触发器数量。 就我所了解的SSE而言,对于AVX / AVX2来说,SSE每个内核每个周期应该有4个触发器,而每个内核每个周期应该有8个触发器。

这似乎在这里得到validation, 我怎样才能达到每个周期4 FLOP的理论最大值? ,以及Sandy-Bridge CPU规格 。

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

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

编辑:我现在明白为什么我感到困惑。 我认为术语FLOP只涉及单浮点(SP)。 我现在看到,testing如何达到每个周期4 FLOP的理论最大值? 实际上是双浮点(DP),因此它们为SSE实现4个DP FLOP /周期,为AVX实现8个DP FLOP /周期。 在SP上重做这些testing会很有趣。

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

英特尔酷睿2和Nehalem:

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

英特尔Sandy Bridge /常春藤桥:

  • 8个DP FLOP /周期:4个全AVX加+ 4个全AVX乘法
  • 16 SP FLOPs /周期:8宽AVX加+ 8宽AVX乘法

Intel Haswell / Broadwell / Skylake / Kaby Lake:

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

AMD K10:

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

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

  • 8个DP FLOP /周期:4个范围的FMA
  • 16个SP FLOP /周期:8个宽的FMA

AMD Ryzen

  • 8个DP FLOP /周期:4个范围的FMA
  • 16个SP FLOP /周期:8个宽的FMA

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

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

AMD山猫:

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

AMD捷豹:

  • 3个DP FLOP /周期:每隔一个周期4个AVX加4个周期+ 4个AVX乘法
  • 8个SP FLOP /周期:每隔一个周期8个AVX加成,每隔一个周期加8个AVX乘法

ARM Cortex-A9:

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

ARM Cortex-A15:

  • 2个DP FLOP /周期:标量FMA或标量乘加
  • 8个SP FLOP /周期:4个宽度的NEONv2 FMA或4个宽度的NEON乘加

Qualcomm Krait:

  • 2个DP FLOP /周期:标量FMA或标量乘加
  • 8个SP FLOP /周期:4个宽度的NEONv2 FMA或4个宽度的NEON乘加

IBM PowerPC A2(Blue Gene / Q),每核心:

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

IBM PowerPC A2(Blue Gene / Q),每个线程:

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

英特尔至强融合(骑士angular),每核心:

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

英特尔至强融合(骑士angular),每个线程:

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

英特尔至强融合(骑士降落),每核心:

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

IBM Blue Gene / Q和Intel Xeon Phi(Knights Corner)的每线程和每内核数据的原因在于,每个内核运行多个线程时,这些内核的指令问题率较高。

Haswell的吞吐量低于乘法和FMA。 有两个乘法/ FMA单位,但只有一个fp加单位。 如果你的代码主要包含附加内容,那么你必须用乘法器1.0replaceFMA指令的附加内容,以获得最大的吞吐量。

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

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