管道的性能取决于指令延迟。哪种微处理器在管线中具有最佳性能?(英特尔)管线技术在未来将如何发展?
答案 0 :(得分:1)
大多数CPU对诸如add
之类的常见指令有1个周期的延迟。英特尔CPU对于整数paddd xmm,xmm
这样的SIMD指令有1个周期的延迟。 FP数学的延迟较高,例如Skylake上的mul / add / FMA有4个周期。
整数乘法和其他内容(例如popcnt,lzcnt)在Intel上为3周期延迟,并在端口1上的执行单元上运行。(唯一可以运行多周期延迟uc的GP整数ALU。)Sandybridge -family标准化延迟以简化调度程序(更容易避免回写冲突),因此没有2周期延迟。 (某些2 uop指令的延迟为2c,每uop 1个。)
Intel,因为IvyBridge可以以 0个周期延迟 运行mov reg,reg
和movdqa xmm,xmm
指令,从而在寄存器重命名阶段处理它们,而无需执行后端uop。请参阅Can x86's MOV really be "free"? Why can't I reproduce this at all? AMD,因为Bulldozer可以对XMM regs做同样的事情,而AMD因为Zen也可以对整数寄存器做同样的事情。
有关指令表(等待时间,前端uop成本和后端端口),另请参见https://agner.org/optimize/,以及了解这些数字的含义的微体系结构指南。
除了零延迟之外,奔腾4(Prescott之前)及其双泵ALU是唯一具有少于1个周期延迟的指令的x86 CPU。它可以在同一时钟周期内执行两条 dependent add
指令; ALU延迟为0.5个周期。我不知道是否有任何非x86微体系结构可以做到这一点。我知道有些人使用了较窄的ALU,但通常它们不是高性能的。
64位P4(Prescott / Nocona)删除了该内容; ALU的吞吐量仍然是双抽的,但不能在同一周期内进行2个从属添加。 (Was there a P4 model with double-pumped 64-bit operations?)。 Agner Fog将add
的延迟显示为1个周期。
不幸的是,P4的其余部分充满了瓶颈和性能陷阱/“玻璃下巴”效应,因此实际性能要比Sandybridge系列或Zen之类的现代CPU低得多。 IDK在现代CPU中半周期整数ALU延迟会带来多少好处。 (实现64位整数可能会出现问题;即使P4 Nocona也没有做到这一点。但是考虑一下会很有趣。)
通常,无序执行可以通过重叠独立的工作来掩盖延迟。使代码试图缩短关键路径的编译器可以提供帮助。
哪个微处理器在管道中具有最佳性能?
这是一个非常不同的问题,而且涉及面更广。有关实际工作负载的性能,请参考SPECint和SPECfp之类的基准。 (尽管其中包括内存)。
流水线技术将如何发展?
更广泛,更混乱的情况下,会在更大的窗口中提取ILP。
管道的长度不可能更长一些; P4沿着那条路走到了分支错误预测成本过高的地步。
但是,多周期等待时间指令也不太可能获得更低的等待时间。乘法比加法复杂,浮点数也复杂。使这些ALU在时钟周期中具有较低的延迟会限制时钟速度,因为这些ALU中的阶段之一将位于传播延迟的关键路径上。
(CPU中任何地方最长的单个流水线级(以门延迟或纳秒为单位,设置您的最大时钟速度=>最小循环时间。)
某些软件可以利用线程级并行性。 CPU可以并且确实可以利用超线程(SMT)来利用该功能,以在同一物理内核上运行多个延迟绑定的线程时,使执行单元承受工作量。值得注意的是,至强融核(KNL)的矢量指令等待时间要比Skylake高,并且依靠4级SMT才能在单个指令流中没有足够ILP的代码中获得良好的性能。