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

49 cpu intel cpu-architecture avx flops

我对使用Sandy-Bridge和Haswell可以完成每个核心每个循环的触发器感到困惑.据我所知,对于SSE,每个核心每个周期应该为4个触发器,对于AVX/AVX2,每个核心每个周期应该有8个触发器.

这似乎在这里得到验证, 如何实现每个周期4个FLOP的理论最大值? ,这里, Sandy-Bridge CPU规范.

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

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

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

Mar*_*han 105

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

英特尔酷睿2和Nehalem:

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

英特尔Sandy Bridge/Ivy Bridge:

  • 8 DP FLOP /周期:4宽AVX + 4宽AVX乘法
  • 16 SP FLOP /周期: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 FLOP /周期:标量SSE2加法+标量SSE2每隔一个周期乘法
  • 6 SP FLOP /周期:每隔一个周期加4宽SSE + 4宽SSE乘法

AMD山猫:

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

AMD Jaguar:

  • 3 DP FLOP /周期:每隔一个周期增加4个宽AVX,在4个周期内增加4个宽AVX
  • 8 SP FLOP /周期:每隔一个周期增加8个宽AVX,每隔一个周期增加8个宽AVX

ARM Cortex-A9:

  • 1.5 DP FLOP /周期:标量加法+每隔一个周期的标量乘法
  • 4 SP FLOP /周期:每隔一个周期加4宽NEON +每隔一个周期加4宽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(蓝色基因/ Q),每个线程:

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

英特尔至强披风(骑士角),每核心:

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

英特尔至强披风(骑士角),每线程:

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

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

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

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

  • SSE2中也添加了DP支持 (3认同)
  • Cortex-M0和M3甚至没有FPU,因此它们的FLOP /周期为零.即使在M4上,FPU也是可选的.Cortex-A8可以使用NEON进行2个SP FLOP /循环.双精度......好吧,VFP*在A8上没有流水线*,所以它大约是1/8 DP FLOP /周期. (3认同)
  • @netvope他们是每个模块 (3认同)

A F*_*Fog 19

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

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

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

  • 大多数受计算限制的HPC代码(即触发器绑定)会执行大量FMA.根据我的经验,一个人做了大量添加的地方是带宽限制的,这样更多的增加吞吐量将无济于事. (3认同)
  • 最新一代英特尔产品具有更均衡的吞吐量.浮点加法,乘法和FMA都具有每个时钟周期2个指令的吞吐量和4的延迟. (2认同)