是否有具有双泵 64 位操作的 P4 模型?
Was there a P4 model with double-pumped 64-bit operations?
我记得最初的 P4 微架构的一个有趣特征是它 double-pumped ALU。我认为英特尔将其称为 快速执行单元 ,但基本上它意味着 ALU 中的每个执行单元有效地 运行 两倍的频率,并且可以处理两个简单的ALU 运算在一个周期内,即使它们是相关的。
此功能在某个时候消失了(在 P4 之前或同时),但是曾经有过带有双转储 ALU 的 64 位 P4 吗? P4 的 64 位变体于 2004 年问世,距最初的 32 位版本发布大约四年,但我不清楚那时双速 ALU 是否已经消失。似乎用于使速度加倍的宽度流水线方法对于 64 位来说很难,这激起了我的好奇心。
由于可能仍需要支持某些(显然很旧)64 位 P4 硬件,因此了解 ALU 行为对于优化很有意义。
找到Intel Optimization Manual 2005 that covers both 32-bit and 64-bit NetBurst processors. Refer to Table C-8 on page C-17. According to the first comment on this博客post,32位的Northwood的型号是02h,64位的Nocona的型号是03h。 table 显示 ADD/SUB/AND/OR/XOR
在两个处理器上的吞吐量均为 0.5 个周期,但在 Northwood 上的延迟为 0.5 个周期,在 Nocona 上为 1 个周期。这意味着 double-pumping 在 Nocona 上受支持,但前提是 back-to-back 指令不依赖。 table 的其余部分还表明,一些在 Northwood 上不是 double-pumped 的指令在 Nocona 上是 double-pumped。
总结:有充分的证据表明某些 NetBurst-based 处理器(无论是已发布还是已取消)可以使用 2 个 32 位交错 ALU 或至少每个周期执行至少 2 个 64 位 ALU 操作单个 64 位交错 ALU(当时可以通过更小的特征尺寸(例如 90nm)实现)。
Intel Pentium 4 Willamette2 处理器上 original paper1 的图 7 讨论了 double-pumped 3 ALU 工作的一些细节(在逻辑设计层面)。
图中显示了单个 32 位交错 ALU 单元。这证实了 ALU 可以在三个快速周期(其中一个快速周期是主时钟周期的一半)内执行两个完全相关(两个输入操作数都相关)的简单 ALU 操作。操作本身的结果在 2 个快速循环(1 个主循环)后可用,但新标志仅在第三个快速循环(1.5 个主循环)后可用。请注意,端口 0 和 1 上有两个这样的 ALU,它们是交错的。因此,该设计可以执行 2 个依赖 ALU 链,每个慢周期吞吐量有 4 个操作。
那篇论文发表于 2001 年。英特尔在 2005 年发表了另一篇 paper4,在电路层面非常详细地讨论了交错整数内核在英特尔奔腾 4 Prescott5 处理器。我不清楚这篇论文讨论的是 64 位版本的 Prescott 还是 32 位版本。然而,这篇论文明确指出交错的ALU单元只能执行加法、布尔运算、移位和旋转(另一篇论文讨论了pre-Prescott核的设计,其中两个快速ALU单元不支持移位和旋转).另一个重要的区别是论文中的这个声明:
There are two distinct 32-bit FCLK execution data paths staggered by
one clock to implement 64-bit operations.
看来0和1端口的两个快速ALU单元错开在一起,可以实现加法等64位快速整数运算。因此,该设计可以执行两个 32 位依赖 ALU 链,每个慢周期吞吐量有 4 个操作,或者一个 64 位依赖 ALU 链,每个慢周期吞吐量有 2 个操作。这甚至比只能执行 64 位运算而不能执行 32 位运算的单个交错 64 位 ALU 更强大。这很可能是 NetBurst 微体系结构的 64 位变体中使用的设计。
来自 Intel 的 Another6 paper7 确认 Intel 确实能够设计 double-pumped 64 位 ALU。我引用论文:
In this paper, we describe a single-cycle integer ALU
fabricated in 90nm dual-Vt CMOS technology operating at 4GHz in
the 64b mode, with a 32b mode latency of 7GHz (measured at
1.3V, 25◦C).
这篇论文没有提到这种设计是否实际用于任何特定的处理器。但考虑到该论文发表于 2004 年,很有可能所有 64 位 NetBurst 内核(无论是发布还是取消)都使用了该设计。
英特尔发布了许多 64 位 NetBurst-based 处理器。例如,请参阅 2008 年在 CMU 教授的一些关于代码优化的课程中使用的 this list for the server-grade processors. One of the cores is called Nocona. There is some experimental evidence that the design mentioned earlier (2 staggered 32-bit ALUs) was actually used in Nocona. Refer to these 幻灯片。幻灯片比较了 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 接近每个周期 2 个操作的理论最大值。这个实验当然没有利用交错,只是利用了两个 32 位简单 ALU 的事实。
但是,在后面的幻灯片中,使用了 SSE3 而不是标量整数寄存器。所有三个处理器的结果显示在幻灯片 44 中。使用 SSE3,每 4 个元素将只有一个 128 位加载。 Nocona 可以在每个周期从 L1D 执行 64 位加载(请参阅下面引用的文章),而 Core 可以在每个周期执行单个 128 位 L1D 加载。但是,Core 有一个称为 Advanced Digital Media Boost (ADMB) 的特性,可以使它每个周期执行 4 次 32 位加法。同一篇论文还提到 pre-Core 架构每个周期仅支持 2 个 32 位 SSE3 ALU 操作。但是如果 Nocona 中有两个 32 位交错的 ALU,低 SSE3 吞吐量意味着 SSE3 操作 m只使用一个交错的 ALU。 ADMB 可以通过两种方式实现。通过将每个 ALU 扩展到 64 位并使它们交错并利用两个 ALU 在每个周期执行 2 个 64 位 ALU 操作。另一种可能性是将每个 ALU 扩展到 128 位并消除交错。
Intel 于 1998 年提交并于 2001 年批准了一项指令交错执行的 patent,基本上是任何指令,而不仅仅是 ALU 操作。该专利仍然有效。那里有很多关于交错执行如何对 128 位 SIMD 指令有用的讨论。根据这项专利,英特尔酷睿很可能使用两个 64 位交错 ALU 来实现其吞吐量。每个64位的ALU实际上都可以用上图所示的两个交错的32位ALU来制作。
2002 年,英特尔提交了 patent 通用交错 ALU 设计。从某种意义上说,它是通用的,它与任何特定的 ALU 操作或时钟周期数或时钟周期无关。这里有趣的是,其中一个图显示了交错的 64 位 ALU 设计!那是在 2002 年。该专利还讨论了设计交错 ALU 的一些挑战。
该专利说它在 2006 年的同一天被授予和放弃。然后几个月后,另一个相同的 patent application 被提交。
这个article shows that Potomac (another server-grade Pentium 4) is 64-bit architecture and supports 4 64-bit per cycle. Yamhill and Jayhawk were canceled by Intel. (There is an error in the article: Nocona是64位的CPU。)
(1) 以防 link 出现故障,本文标题为 "The Microarchitecture of the Pentium® 4 Processor",由 Glenn Hinton 等人撰写
(2) 也称为 first-gen 奔腾 4。
(3) 也称为交错 ALU。
(4) 以防 link 出现故障,本文标题为 "Low-Voltage Swing Logic Circuits for a Pentium® 4 Processor Integer Core",由 Daniel J. Deleganes 等人撰写
(5) 也称为 third-gen Pentium 4.
(6) 以防 link 出现故障,论文标题为 "A 4GHz 300mW 64b Integer Execution ALU with Dual Supply Voltages in 90nm CMOS",由 Sanu K. Mathew 等人撰写
(7) 以防 link 出现故障,本文标题为 "HIGH-PERFORMANCE ENERGY-EFFICIENT DUAL-SUPPLY ALU DESIGN",由 Sanu K. Mathew 等人撰写
我记得最初的 P4 微架构的一个有趣特征是它 double-pumped ALU。我认为英特尔将其称为 快速执行单元 ,但基本上它意味着 ALU 中的每个执行单元有效地 运行 两倍的频率,并且可以处理两个简单的ALU 运算在一个周期内,即使它们是相关的。
此功能在某个时候消失了(在 P4 之前或同时),但是曾经有过带有双转储 ALU 的 64 位 P4 吗? P4 的 64 位变体于 2004 年问世,距最初的 32 位版本发布大约四年,但我不清楚那时双速 ALU 是否已经消失。似乎用于使速度加倍的宽度流水线方法对于 64 位来说很难,这激起了我的好奇心。
由于可能仍需要支持某些(显然很旧)64 位 P4 硬件,因此了解 ALU 行为对于优化很有意义。
找到Intel Optimization Manual 2005 that covers both 32-bit and 64-bit NetBurst processors. Refer to Table C-8 on page C-17. According to the first comment on this博客post,32位的Northwood的型号是02h,64位的Nocona的型号是03h。 table 显示 ADD/SUB/AND/OR/XOR
在两个处理器上的吞吐量均为 0.5 个周期,但在 Northwood 上的延迟为 0.5 个周期,在 Nocona 上为 1 个周期。这意味着 double-pumping 在 Nocona 上受支持,但前提是 back-to-back 指令不依赖。 table 的其余部分还表明,一些在 Northwood 上不是 double-pumped 的指令在 Nocona 上是 double-pumped。
总结:有充分的证据表明某些 NetBurst-based 处理器(无论是已发布还是已取消)可以使用 2 个 32 位交错 ALU 或至少每个周期执行至少 2 个 64 位 ALU 操作单个 64 位交错 ALU(当时可以通过更小的特征尺寸(例如 90nm)实现)。
Intel Pentium 4 Willamette2 处理器上 original paper1 的图 7 讨论了 double-pumped 3 ALU 工作的一些细节(在逻辑设计层面)。
图中显示了单个 32 位交错 ALU 单元。这证实了 ALU 可以在三个快速周期(其中一个快速周期是主时钟周期的一半)内执行两个完全相关(两个输入操作数都相关)的简单 ALU 操作。操作本身的结果在 2 个快速循环(1 个主循环)后可用,但新标志仅在第三个快速循环(1.5 个主循环)后可用。请注意,端口 0 和 1 上有两个这样的 ALU,它们是交错的。因此,该设计可以执行 2 个依赖 ALU 链,每个慢周期吞吐量有 4 个操作。
那篇论文发表于 2001 年。英特尔在 2005 年发表了另一篇 paper4,在电路层面非常详细地讨论了交错整数内核在英特尔奔腾 4 Prescott5 处理器。我不清楚这篇论文讨论的是 64 位版本的 Prescott 还是 32 位版本。然而,这篇论文明确指出交错的ALU单元只能执行加法、布尔运算、移位和旋转(另一篇论文讨论了pre-Prescott核的设计,其中两个快速ALU单元不支持移位和旋转).另一个重要的区别是论文中的这个声明:
There are two distinct 32-bit FCLK execution data paths staggered by one clock to implement 64-bit operations.
看来0和1端口的两个快速ALU单元错开在一起,可以实现加法等64位快速整数运算。因此,该设计可以执行两个 32 位依赖 ALU 链,每个慢周期吞吐量有 4 个操作,或者一个 64 位依赖 ALU 链,每个慢周期吞吐量有 2 个操作。这甚至比只能执行 64 位运算而不能执行 32 位运算的单个交错 64 位 ALU 更强大。这很可能是 NetBurst 微体系结构的 64 位变体中使用的设计。
来自 Intel 的Another6 paper7 确认 Intel 确实能够设计 double-pumped 64 位 ALU。我引用论文:
In this paper, we describe a single-cycle integer ALU fabricated in 90nm dual-Vt CMOS technology operating at 4GHz in the 64b mode, with a 32b mode latency of 7GHz (measured at 1.3V, 25◦C).
这篇论文没有提到这种设计是否实际用于任何特定的处理器。但考虑到该论文发表于 2004 年,很有可能所有 64 位 NetBurst 内核(无论是发布还是取消)都使用了该设计。
英特尔发布了许多 64 位 NetBurst-based 处理器。例如,请参阅 2008 年在 CMU 教授的一些关于代码优化的课程中使用的 this list for the server-grade processors. One of the cores is called Nocona. There is some experimental evidence that the design mentioned earlier (2 staggered 32-bit ALUs) was actually used in Nocona. Refer to these 幻灯片。幻灯片比较了 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 接近每个周期 2 个操作的理论最大值。这个实验当然没有利用交错,只是利用了两个 32 位简单 ALU 的事实。
但是,在后面的幻灯片中,使用了 SSE3 而不是标量整数寄存器。所有三个处理器的结果显示在幻灯片 44 中。使用 SSE3,每 4 个元素将只有一个 128 位加载。 Nocona 可以在每个周期从 L1D 执行 64 位加载(请参阅下面引用的文章),而 Core 可以在每个周期执行单个 128 位 L1D 加载。但是,Core 有一个称为 Advanced Digital Media Boost (ADMB) 的特性,可以使它每个周期执行 4 次 32 位加法。同一篇论文还提到 pre-Core 架构每个周期仅支持 2 个 32 位 SSE3 ALU 操作。但是如果 Nocona 中有两个 32 位交错的 ALU,低 SSE3 吞吐量意味着 SSE3 操作 m只使用一个交错的 ALU。 ADMB 可以通过两种方式实现。通过将每个 ALU 扩展到 64 位并使它们交错并利用两个 ALU 在每个周期执行 2 个 64 位 ALU 操作。另一种可能性是将每个 ALU 扩展到 128 位并消除交错。
Intel 于 1998 年提交并于 2001 年批准了一项指令交错执行的 patent,基本上是任何指令,而不仅仅是 ALU 操作。该专利仍然有效。那里有很多关于交错执行如何对 128 位 SIMD 指令有用的讨论。根据这项专利,英特尔酷睿很可能使用两个 64 位交错 ALU 来实现其吞吐量。每个64位的ALU实际上都可以用上图所示的两个交错的32位ALU来制作。
2002 年,英特尔提交了 patent 通用交错 ALU 设计。从某种意义上说,它是通用的,它与任何特定的 ALU 操作或时钟周期数或时钟周期无关。这里有趣的是,其中一个图显示了交错的 64 位 ALU 设计!那是在 2002 年。该专利还讨论了设计交错 ALU 的一些挑战。
该专利说它在 2006 年的同一天被授予和放弃。然后几个月后,另一个相同的 patent application 被提交。
这个article shows that Potomac (another server-grade Pentium 4) is 64-bit architecture and supports 4 64-bit per cycle. Yamhill and Jayhawk were canceled by Intel. (There is an error in the article: Nocona是64位的CPU。)
(1) 以防 link 出现故障,本文标题为 "The Microarchitecture of the Pentium® 4 Processor",由 Glenn Hinton 等人撰写
(2) 也称为 first-gen 奔腾 4。
(3) 也称为交错 ALU。
(4) 以防 link 出现故障,本文标题为 "Low-Voltage Swing Logic Circuits for a Pentium® 4 Processor Integer Core",由 Daniel J. Deleganes 等人撰写
(5) 也称为 third-gen Pentium 4.
(6) 以防 link 出现故障,论文标题为 "A 4GHz 300mW 64b Integer Execution ALU with Dual Supply Voltages in 90nm CMOS",由 Sanu K. Mathew 等人撰写
(7) 以防 link 出现故障,本文标题为 "HIGH-PERFORMANCE ENERGY-EFFICIENT DUAL-SUPPLY ALU DESIGN",由 Sanu K. Mathew 等人撰写