我对使用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上重做这些测试会很有趣。
答案 0 :(得分:104)
以下是一些最近处理器微体系结构的FLOP计数以及如何实现它们的解释:
Intel Core 2和Nehalem:
Intel Sandy Bridge / Ivy Bridge:
Intel Haswell / Broadwell / Skylake / Kaby Lake:
AMD推土机/打桩机/压路机/挖掘机,每个模块(两个核心):
Intel Atom(Bonnell / 45nm,Saltwell / 32nm,Silvermont / 22nm):
ARM Cortex-A9:
ARM Cortex-A15:
Qualcomm Krait:
IBM PowerPC A2(蓝色基因/ Q),每个核心:
IBM PowerPC A2(蓝色基因/ Q),每个线程:
Intel Xeon Phi(Knights Corner),每核心:
Intel Xeon Phi(Knights Corner),每个主题:
Intel Xeon Phi(Knights Landing),每核心:
IBM Blue Gene / Q和Intel Xeon Phi(Knights Corner)的每个线程和每个核心数据的原因是,当每个核心运行多个线程时,这些核心具有更高的指令发布率。 / p>
答案 1 :(得分:18)
Haswell的吞吐量低于乘法和FMA。有两个乘法/ FMA单位,但只有一个f.p.添加单位。如果您的代码主要包含添加内容,则必须使用乘数为1.0的FMA指令替换添加内容以获得最大吞吐量。
Haswell上的FMA指令的延迟为5,每个时钟的吞吐量为2。这意味着您必须保持10个并行操作才能获得最大吞吐量。例如,如果要添加一个非常长的f.p列表。数字,你必须将它分成十个部分并使用十个累加器寄存器。
这确实可能,但谁会为一个特定的处理器进行如此奇怪的优化?