Haswell双路径执行CPU?

Is Haswell dual path execution CPU?

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

是不是说Haswell是双路径执行CPU?

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

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

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

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

请参阅 David Kanter 的 Haswell 文章,特别是 the page about execution units. If Haswell had introduced the feature described in that paper you linked, Kanter's writeup would have mentioned it, and so would Intel's optimization manual, and Agner Fog's microarch pdf. (See the 标记 wiki 以获取指向该内容的链接以及更多内容)。

端口 6 上 integer/branch 单元的一大优势是它不与任何矢量执行端口共享。所以一个循环可以有 3 个向量 ALU 微指令和一个分支,并且在每个循环的一次迭代中仍然 运行。 David Kanter 的文章也说了同样的话。


And does it mean that Haswell can execute 2-nd branch only on Integer ALU & Shift (Port 6) and not on any other ALU on other Ports?

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

From the paper:

Dual Path Instruction Processing (DPIP) is proposed as a simple mechanism that fetches, decodes, and renames, but does not execute, instructions from the alternative path for low confidence predicted branches at the same time as the predicted path is being executed.

所以实际上备用路径不会涉及执行单元。这应该是显而易见的...

您不需要执行两条路径 - 考虑到通常平均每 5 条指令就有一个分支,这将很困难,因为您很快就会得到指数数量的路径。即使你只是在难以预测的分支上发散,你仍然可能会得到大量的并行路径。

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

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