首页 文章

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

提问于
浏览
49

我对使用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 回答

  • 103

    以下是一些最近处理器微体系结构的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 FLOPs / cycle:标量加法标量乘法每隔一个周期

    • 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)的每线程和每核心数据的原因是,当每个核心运行多个线程时,这些核心具有更高的指令发布率 .

  • 18

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

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

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

相关问题