Haswell双路径执行CPU?

时间:2016-07-13 22:31:29

标签: x86 x86-64 intel cpu-architecture branch-prediction

Haswell现在有 2个分支单元 - 如下所示:http://arstechnica.com/gadgets/2013/05/a-look-at-haswell/2/

enter image description here

这是否意味着Haswell是双路径执行CPU?

http://ditec.um.es/~jlaragon/papers/aragon_ICS02.pdf

而言

这是否意味着Haswell只能在Integer ALU上执行第二个分支&移位(端口6)而不是其他端口上的任何其他ALU?

2 个答案:

答案 0 :(得分:6)

不,Haswell仍然只是沿着分支的预测方面进行推测。

Agner Fog's instruction tables可以看出,port0上的分支单元只能执行预测的未采用分支。这加速了大型比较和分支链的执行,其中大多数都没有被采用。这在编译器生成的代码中并不罕见。

参见David Kanter的Haswell撰写,特别是the page about execution units。如果Haswell引入了您所链接的那篇论文中描述的功能,那么Kanter的文章就会提到它,英特尔的优化手册和Agner Fog的微架构pdf也是如此。 (请参阅标记wiki以获取该链接以及更多内容。)

port6上的整数/分支单元的一大优点是它不与任何向量执行端口共享。因此循环可以有3个向量ALU uop和一个分支,并且仍然在每个循环的一次迭代中运行。大卫坎特的写作也说了同样的话。

  

这是否意味着Haswell只能在Integer ALU上执行第二个分支&移位(端口6)而不是其他端口上的任何其他ALU?

如果实现了该论文的想法,它将影响整个管道,而不仅仅是执行分支的端口!

  

From the paper:

     

双路径指令   提出处理(DPIP)作为一种简单的机制   提取,解码和重命名,但不执行指令   从低可信度预测分支的替代路径   与预测路径正在执行的同时。

所以事实上,替代路径不会涉及执行单元。这应该是显而易见的......

答案 1 :(得分:3)

你不需要同时执行这两个路径 - 假设平均每5个指令通常有一个分支,那很难,因为你很快会得到一个指数路径。即使你只是在难以预测的分支上发生这样的分歧,你仍然可能最终得到大量的并行路径。

添加第二个分支单元的原因要简单得多 - 在无序机器中,即使计算单个预测的“主要”执行路径,您仍然会得到大量的飞行中分支机构。请注意,预测是在管道的开头进行的,因此它与每个分支的实际执行和分辨率分离。在实践中,前端将为机器提供分支机构,OOO机器需要解决依赖关系并尽快执行它们(因为你想尽早解决预测,如果你错了就恢复) 。我想设计人员发现需要额外的执行带宽,因为可能存在多个分支(甚至可能在程序顺序上不连续)同时准备好它们的源并突然需要一次执行的情况。因此,关于“第二个欧盟高分支代码”的评论。

除了彼此冲突的分支之外,您还可以看到执行端口0还承载了许多其他类型的操作,因此您还可以准备执行分支但由于其他非分支操作而停滞。因此关于port0冲突的其他评论(理论上,他们可能只是将分支执行单元移动到另一个端口,但这会增加其他冲突,并且它不会解决分支与分支冲突)。