计算机实际上是否使用超前超前加法器?


12

在大学CS课程中,有很多关于超前进位加法器的详细信息,例如Kogge-Stone,Lander-Fischer等。它们被描述为“业界常见”。但是,我最近没有发现任何证据(除了曼彻斯特进位链),也没有发现它们确实在任何特定地方使用过。Google搜索仅返回期刊和学术研究的页面。最多给出假设的实现。

我的问题是,是否使用了任何特定的地方/实现携带超前加法器?还是它们与现实世界无关?


1
高性能处理器的周期时间及其单个周期增加了延迟,这肯定表明它们不使用纹波携带(但这将允许进位选择)。即使对于英特尔的22纳米制程,以不到300ps的速度穿越64位也是不可能的。
保罗·克莱顿

@ PaulA.Clayton通过查看一些使用了进位选择或类似解码器的加法器的数据表,我得到了印象。
qwr 2014年

Answers:


16

这是一个简单的问题,答案很复杂。

首先,有一些背景。

现实世界中的VLSI设计是一个技术性很强的领域,其折衷平衡在不断变化。电路计算答案所需的时间很少是唯一重要的因素。还有功耗和物理面积,还有一堆因素表明,您设计的电路实际上是模拟的(例如,线电阻,寄生电容)。所有这些在实际电路中都很重要,并可能影响选择哪种设计。

其次,您必须考虑项目的整个生命周期。适用于VLSI实现的加法器可能不适用于FPGA实现。如果设计要经过在FPGA上测试的阶段,那么您就会明白了。

第三,并不是每个加法器都相等。在典型的CPU上,周围有很多加法器,它们执行不同的任务。可能有几个整数ALU,一个浮点尾数加法器,一个用于地址计算的加法器,一个用于计算分支目标的加法器等等。这还不包括您在现代乘法单元中发现的进位保存加法器。每个都有其自身的特点和约束。

例如,分支目标的计算通常涉及在一个完整的单词上添加一个小的常数,这表明与将两个完整的单词加在一起的设计不同的加法器设计。同样,浮点加法需要一个加法后的舍入步骤,该步骤可能需要不到一个周期的时间,因此没有理由为什么您不能偷走其余的周期来完成加法。

最后,也许是最重要的一点是,出于明显的原因,大型企业(例如英特尔,AMD,NVIDIA)对低级实施细节持相对保守的态度,除非他们认为可以从中获得论文和/或专利。即使那样,如果没有逆向工程,您通常也无法确定他们的实际工作。

话虽如此,我们知道一些事情。

您需要意识到的关键是,超前进位方法是构建块,而本身不一定是方法。这里可能有一个类比。

如果您考虑算法类,则可能会学到很多排序算法,例如快速排序,合并排序,插入排序等等。在现实世界中,如果排序是性能瓶颈,那么任何体面的工程师都将其视为可构建“真实”排序的原始构建基块。

例如,GNU C ++标准库中的排序算法使用快速排序,当间隔足够小时,使用插入排序。但是,如果经过几次通过后,看起来快速排序分区似乎遇到了病理问题,那么它就会退回到堆排序。这是进行一种工业强度排序的三种不同的排序算法。

加法器电路也是如此。例如,已知奔腾4整数单位使用Han-Carlson加法器,它是Kogge-Stone和Brent-Kung的混合。(Han-Carlson尤其有趣,因为它是传播延迟和芯片面积之间权衡的“最佳位置”,这也非常省电。)通常需要混合使用几种方法。

“纯”超前加法器在合成电路中仍然很常见(例如,如果您将Verilog“ +”运算符提供给Cadence或Synopsys),那么在手工设计时,现代高端CPU的超标量将超出有序执行引擎似乎正朝着整数单元的稍微不同的方向发展。

推测性加法器是具有极低传播延迟的电路,但是在某些时间只能正常工作(通常有95%的时间),并且可以用很少的逻辑判断推测性加法器是否返回正确的结果。因此,该想法是在一个周期中并行进行推测性加法和超前进位加法的一半。如果推测性加法器返回了正确的答案,则说明已完成。否则,请暂停管道并执行精确添加的另一半。

因为您知道慢速路径将花费两个周期,所以设计人员可以使用更大的空间和更省电的方法,即使对于一般用途而言太慢了。


6

是的,许多计算机使用超前超前加法器。我对一些旧的微处理器进行了反向工程,我可以举一些例子。

英特尔8008(他们的第一个8位处理器)上的ALU包括一个采用动态逻辑实现的大型进位超前电路。该电路占用的空间与ALU本身一样大。进位超前显示在8008数据表上,图3。我还没有看到其他任何1970年代带有ALU的ALU处理器,因此8008在这方面有点不寻常。

6502对程序计数器(PC)增量器使用原始的超前进位。它检测PC的低字节是否有进位,并使用它来递增高字节。这样可以将纹波进位从潜在的16位减少到8位。6502的ALU使用纹波进位,尽管进位逻辑是针对交替位而反转的,这将反相器切出路径,使其速度稍快。

Z-80具有用于PC更新,inc / dec指令和循环计数器的16位增量器/减量器。它使用进位跳过结构,因此可以对两位组进行进位计算。此外,它使用一些超前进位来从位0-7、7-11和12-14生成进位。其他进位以纹波进位计算(详细信息)。令人惊讶的是,Z-80的ALU是4位,因此每个8位操作都会通过ALU两次。

另一方面,8085将纹波进位用于其16位增量器/减量器。但是,像6502一样,它通过将进位逻辑反转为交替位而获得一点加速。

ARM-1具有不带先行进位,就脉动进一个32位ALU。它还使用了将交替进位的进位反转的技巧。

在小型计算机世界中,许多处理器都是用著名的74181 4位ALU芯片构建的,该芯片具有内部进位提前功能。例如,Data General Nova,Xerox Alto,VAX-11 / 780和TI-990。(请参阅较长的Wikipedia列表。)其中一些使用的纹波在每个4位芯片之间进行,有些使用74182进行超前查找芯片进行完全提前。

总而言之,不同的微处理器根据其性能目标和关键路径上的操作而使用各种进位技术。ALU可以使用完整的超前查找(例如8008),甚至可以使用一半的尺寸(例如Z-80)。增量器可能是性能问题,因为它在8位处理器中通常为16位,从而导致两倍的纹波延迟。增量器可以具有纹波进位(8085),一个进位超前(6502)或几个进位超前级(Z-80)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.