我对使用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 回答
以下是一些最近处理器微体系结构的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)的每线程和每核心数据的原因是,当每个核心运行多个线程时,这些核心具有更高的指令发布率 .
Haswell的吞吐量低于乘法和FMA . 有两个乘法/ FMA单位,但只有一个f.p.添加单位 . 如果您的代码主要包含添加内容,则必须使用乘数为1.0的FMA指令替换添加内容以获得最大吞吐量 .
Haswell的FMA指令的延迟是5和吞吐量为每时钟2个 . 这意味着您必须保持10个并行操作才能获得最大吞吐量 . 例如,如果要添加一个非常长的f.p列表 . 数字,你必须将它分成十个部分,并使用十个累加器寄存器 .
这确实是可能的,但谁会为一个特定的处理器进行如此奇怪的优化?