每个周期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数字列表,则必须将其分成十部分,并使用十个累加器寄存器。
这确实是可能的,但是谁会为一个特定的处理器做出如此奇怪的优化?