X86 是否有双泵64位操作的P4型号?

X86 是否有双泵64位操作的P4型号?,x86,x86-64,intel,cpu-architecture,X86,X86 64,Intel,Cpu Architecture,我记得最初的P4微体系结构的一个有趣特性是它的。我认为Intel称之为快速执行单元,但基本上它意味着ALU中的每个执行单元都以两倍的频率有效运行,并且可以在一个周期内处理两个简单的ALU操作,即使它们相互依赖 此功能在某个点消失(在P4之前或与P4同时消失),但是否曾经有过带有双转储ALU的64位P4?P4的64位变体于2004年问世,距离最初的32位版本大约四年后,但我不清楚当时双速ALU是否已经消失。似乎用于将速度提高一倍的宽度流水线方法对于64位来说是很困难的,这引起了我的好奇心 由于人们

我记得最初的P4微体系结构的一个有趣特性是它的。我认为Intel称之为快速执行单元,但基本上它意味着ALU中的每个执行单元都以两倍的频率有效运行,并且可以在一个周期内处理两个简单的ALU操作,即使它们相互依赖

此功能在某个点消失(在P4之前或与P4同时消失),但是否曾经有过带有双转储ALU的64位P4?P4的64位变体于2004年问世,距离最初的32位版本大约四年后,但我不清楚当时双速ALU是否已经消失。似乎用于将速度提高一倍的宽度流水线方法对于64位来说是很困难的,这引起了我的好奇心

由于人们可能仍然需要支持某些(显然相当旧的)64位P4硬件,因此了解ALU行为对于优化非常有意义。

我发现它同时涵盖32位和64位NetBurst处理器。参考第C-17页的表C-8。根据博客上的第一条评论,32位Northwood的模型是02h,64位Nocona的模型是03h。该表显示,
ADD/SUB/和/或/XOR
在两个处理器上的吞吐量均为0.5个周期,但在Northwood上的延迟为0.5个周期,在Nocona上的延迟为1个周期。这意味着Nocona支持双泵送,但前提是背对背指令不依赖。表的其余部分还显示,一些在Northwood上没有双泵的指令在Nocona上是双泵的


摘要:有充分的证据表明,一些基于NetBurst的处理器(无论是已发布还是已取消)可以使用2个32位交错ALU或至少一个64位交错ALU(可通过较小的功能尺寸(如当时的90nm)每个周期执行至少2个64位ALU操作


英特尔奔腾4 Willamette2处理器1的图7详细讨论了双泵3 ALU的工作原理(在逻辑设计层面)

此图显示单个32位交错ALU单元。这证实了ALU可以在三个快周期(其中快周期是主时钟周期的一半)内执行两个完全相关(两个输入操作数均相关)的简单ALU操作。操作结果本身在2个快速循环(1个主循环)后可用,但新标志仅在第三个快速循环(1.5个主循环)后可用。请注意,端口0和1上有两个这样的ALU,它们都是交错的。因此,该设计可以执行2个依赖ALU链,每个慢周期吞吐量执行4个操作

该论文发表于2001年。英特尔在2005年发布了另一款4处理器,在电路层面上详细讨论了交错整数内核在英特尔奔腾4处理器中的性能。我不清楚这篇文章讨论的是64位版本的普雷斯科特还是32位版本的普雷斯科特。然而,本文明确指出交错ALU单元只能执行加法、布尔运算、移位和旋转(另一篇论文讨论了pre-Prescott内核的设计,其中两个快速ALU单元不支持移位和旋转)。另一个重要的区别是这篇文章的陈述:

有两个不同的32位FCLK执行数据路径,它们由 一个时钟用于实现64位操作

因此,端口0和1上的两个快速ALU单元似乎交错在一起,支持64位快速整数操作,如加法。因此,设计可以执行两个32位依赖性ALU链,每个慢周期吞吐量4个操作,或者一个64位依赖性ALU链,每个慢周期吞吐量2个操作。这甚至比单个交错64位ALU更强大,它只能执行64位操作,而不能执行32位操作。最有可能的是NetBurst微体系结构的64位变体中使用的设计

英特尔6 7证实英特尔确实能够设计双泵64位ALU。我引述该报的话:

在本文中,我们描述了一个单周期整数ALU 采用90nm双Vt CMOS工艺制造,工作频率为4GHz 64b模式,32b模式延迟为7GHz(在 1.3V,25◦C)

本文没有提到这种设计是否已经在任何特定的处理器中实际使用过。但考虑到这篇论文发表于2004年,所有64位NetBurst内核(无论是发布还是取消)都很有可能采用这种设计

英特尔发布了许多基于64位NetBurst的处理器。例如,请参阅服务器级处理器的列表。其中一个核心叫做Nocona。有一些实验证据表明,前面提到的设计(2个交错32位ALU)实际上用于Nocona。请参阅2008年在CMU讲授的一些关于代码优化的课程中使用的幻灯片。幻灯片比较了Nocona(64位NetBurst)、Intel Core(也是64位)和AMD Opteron(也是64位,显然实现了相同的64位交错ALU设计)的性能。这是循环中使用的代码:

x = x + d[i];
其中所有元素均为32位整数(遗憾的是,尚未使用64位)

在幻灯片35中,您可以看到在Nocona和Opteron上实现的32位整数加法吞吐量。由于每个操作都需要一个负载,而Nocona每个周期只支持一个负载,因此Nocona的性能在每个周期大约1个操作时达到最大。然而,Opteron每循环支持两个负载,接近理论上每个循环最多运行两次。当然,这个实验并没有利用交错,只是利用了有两个32位简单ALU的事实

但是,在幻灯片的后面部分,使用SSE3代替标量整数寄存器。结果