try ai
科普
编辑
分享
反馈
  • 进位保留加法器

进位保留加法器

SciencePedia玻尔百科
核心要点
  • 进位保留加法器通过延迟进位传播来克服传统加法器的速度限制,它生成两个输出:一个和向量与一个进位向量。
  • 进位保留加法器由一组并行的全加器(3:2 压缩器)构成,其中每个比特位的计算都是独立的,从而消除了行波进位延迟。
  • 它们在高速硬件乘法器(例如华莱士树)中至关重要,能有效地将大量的部分积简化为两个数。
  • 最终需要一个进位传播加法器,将最终的和向量与进位向量相加,得到一个单一的、非冗余的结果。

引言

在数字计算的世界里,速度至关重要,而最基本的瓶颈之一始终是简单的加法运算。传统加法器受“行波进位”效应的掣肘,即每个比特位的计算都必须等待其低位邻居传来的进位信号,这造成了与数字规模成正比的延迟。本文将探讨一种极其简单而强大的解决方案:进位保留加法器(Carry-Save Adder, CSA)。CSA 并不传播进位,而是巧妙地推迟了这项任务,从而释放了巨大的并行性和速度。这种架构技巧不仅仅是一个小小的优化,它更是支撑现代处理器高性能的核心原理。

本文将引导您了解进位保留加法器背后的精妙逻辑。第一章“原理与机制”将剖析 CSA 的工作方式,即通过使用简单的全加器将三个输入压缩为两个,从而将进位保存到一个单独的向量中。接下来的章节“应用与跨学科联系”将揭示这项技术如何革新硬件乘法器、加速数字信号处理,甚至为编写更快、更并行的软件提供了一个概念框架。

原理与机制

要真正领会​​进位保留加法器 (CSA)​​ 的精妙之处,我们必须首先理解它所优雅解决的问题。想象一下你正在手工计算一长列大数。你一丝不苟地处理最右边的一列,对数字求和,写下结果的个位数,然后——关键的一步——你将十位数“进位”到下一列的顶部。在知道第一列的进位之前,你甚至无法开始对第二列求和。这种依赖性从右到左,逐列地传递。计算机使用标准的​​行波进位加法器​​执行加法时,面临着完全相同的问题。每一级都必须等待其邻居的进位,从而产生一个随比特数增长的传播延迟。对于高速计算而言,这种“进位比特的暴政”是不可接受的瓶颈。

拖延的艺术:保留,而非传播

如果我们能找到一种作弊的方法呢?如果我们不立即处理进位,而是……暂时不管它呢?这就是进位保留加法器背后核心的、近乎异想天开的洞察。我们不是传播进位,而是简单地保留它。

让我们想象一下将三个 16 位数相加,比如 AAA、BBB 和 CCC。对于每一列(或比特位),我们对三个对应的比特求和。例如,在最右边的一列,我们相加 A0A_0A0​、B0B_0B0​ 和 C0C_0C0​。三个比特的和可以是 0、1、2 或 3。在二进制中,这些是 00200_2002​、01201_2012​、10210_2102​ 和 11211_2112​。注意,结果总是恰好可以用两位二进制数表示。

绝妙的想法是不要立即合并这两位。相反,我们生成两个全新的数。第一个数,​​部分和向量 (SSS)​​,由每一列加法结果的最右边的比特(“和”比特)构成。第二个数,​​进位向量 (CCC)​​,由每一列加法结果的最左边的比特(“进位”比特)构成。

所以,对于每个比特位置 iii,我们执行以下操作: Ai+Bi+Ci=Si+2⋅Ci+1A_i + B_i + C_i = S_i + 2 \cdot C_{i+1}Ai​+Bi​+Ci​=Si​+2⋅Ci+1​

这里,SiS_iSi​ 成为我们的和向量 SSS 的第 iii 位,而 Ci+1C_{i+1}Ci+1​ 成为我们的进位向量 CCC 的第 (i+1)(i+1)(i+1) 位。来自第 iii 列的进位被简单地“保存”在另一个数的第 i+1i+1i+1 列中,而不是立即被加进去。关键在于,第 iii 列的计算完全独立于第 i−1i-1i−1 列的计算。所有列都可以同时、并行地处理。我们成功地打破了进位传播链。

朴素的天才:3:2 压缩器

是什么神奇的设备执行了这种将三个比特变成两个比特的逐列技巧?事实证明,这是每个数字设计师都熟知并喜爱的组件:​​全加器​​。一个标准的全加器被设计用来接收两个操作数比特和一个进位输入比特,并产生一个和比特和一个进位输出比特。但如果我们简单地将输入重新标记为我们的三个操作数比特——AiA_iAi​、BiB_iBi​ 和 CiC_iCi​——它就完全满足了我们的需求。它将三个输入减少到两个输出,一个和与一个进位,因此在这种情况下它赢得了​​3:2 压缩器​​的名称。

其逻辑非常简单。和比特 SiS_iSi​ 只是三个输入比特的异或(XOR),它告诉你输入中是否有奇数个‘1’。 Si=Ai⊕Bi⊕CiS_i = A_i \oplus B_i \oplus C_iSi​=Ai​⊕Bi​⊕Ci​ 进位输出比特 Ci+1C_{i+1}Ci+1​ 为‘1’当且仅当至少有两个输入比特为‘1’(多数决函数)。 Ci+1=(Ai⋅Bi)+(Bi⋅Ci)+(Ai⋅Ci)C_{i+1} = (A_i \cdot B_i) + (B_i \cdot C_i) + (A_i \cdot C_i)Ci+1​=(Ai​⋅Bi​)+(Bi​⋅Ci​)+(Ai​⋅Ci​)

一个多比特的进位保留加法器只不过是这样一排全加器,每个比特位一个,它们之间没有任何连接,并行工作。这种结构是其惊人速度的原因。加三个 64 位数所需的时间不比加三个 1 位数长——它仅仅是一个全加器的延迟。

并行性的力量:加速乘法

这一原理最重要的应用是在硬件乘法器中。将两个 NNN 位数相乘会产生 NNN 个中间的“部分积”,这些部分积必须全部相加。使用传统方法,比如级联的行波进位加法器,将会极其缓慢。人们会先将前两个部分积相加,等待所有进位传播完毕,然后将第三个部分积与该结果相加,再次等待,如此往复。总延迟会随着操作数数量线性增长。

这正是 CSA 大放异彩的地方。我们可以将 CSA 排列成树状结构,通常称为​​华莱士树 (Wallace Tree)​​,以惊人的效率来规约部分积。想象一下从 8 个部分积开始。我们可以将其中三个输入到一个 CSA 中,将它们减少为两个向量。现在我们有 8−3+2=78-3+2 = 78−3+2=7 个向量要求和。我们可以并行地再次这样做。在每个阶段,一个 CSA 接收三个输入行并输出两行,因此要求和的操作数数量迅速减少。规约阶段的数量随着初始操作数数量呈对数级增长,而不是线性增长。

与更简单的阵列乘法器的根本区别在于:在 CSA 树中,一列中产生的进位只会被传递到树的下一级中下一个更高有效位的列。它绝不会在单个级内水平传播。这种对进位的遏制是其性能的秘诀。一个定量的比较揭示了巨大的差异:对于一个 8 位乘法器,华莱士树架构的速度可以比顺序的行波进位设计快 16 倍以上。

最后的清算

CSA 的拖延策略并非无限。在 CSA 树发挥其魔力之后,我们只剩下两个向量:一个最终的和向量 SSS 和一个最终的进位向量 CCC。真正的乘积是这两个向量的和(其中进位向量左移一位以赋予其正确的位值)。

在这一点上,我们必须最终解决所有积攒下来的进位,以产生一个单一的、非冗余的数。对于这最后一步,我们绝对不能使用另一个进位保留加法器。为什么?因为 CSA 的本质就是接收数字并输出两个新的数字。将 SSS、CCC 和一个零向量输入 CSA 只会产生一对新的和向量与进位向量,使问题无限延续下去。

因此,对于最后阶段,我们必须使用一个​​进位传播加法器 (CPA)​​。因为这是唯一一个发生完全进位传播的阶段,设计者可以负担得起使用一个高度复杂且快速的 CPA,例如​​超前进位加法器​​,它使用更复杂的逻辑来并行计算进位。整体设计是策略的杰作:使用快速、简单、非传播的 CSA 来完成将多个操作数减少为两个的繁重工作,然后部署一个专门的高性能 CPA 来进行那一次最终的加法。这种混合方法使得数字电路能够以否则难以想象的速度执行乘法这一基本操作。

应用与跨学科联系

一个简单而强大的思想背后蕴含着深邃的美。在科学和工程领域,最优雅的解决方案往往不是依靠蛮力,而是源于视角的巧妙转变。进位保留加法器正是这类思想的杰作。它的天才之处不在于更快地完成加法这项艰苦工作,而在于巧妙地推迟了它。一个标准的加法器,在面临两个数相加时,会立即陷入进位的交通堵塞中,其中第一位的决策可能会一路波及到最后一位,迫使其他所有位依次等待。进位保留加法器的简单而美妙的技巧是说:“为什么现在要担心这个?”它在每个位置执行一次“部分”加法,产生一个和比特和一个进位比特,但它不让那个进位干扰它的邻居。它只是保留了进位,将其传递给下一列,以备后续阶段的清算。

通过推迟进位传播这一棘手事务,该技术释放了非凡的速度和效率,其影响辐射到现代计算的几乎每一个方面,从处理器核心的设计到高级软件的执行。

计算的引擎:革新乘法运算

进位保留加法最经典也最关键的应用可能是在二进制乘法中。如果你回想一下在纸上如何计算大数乘法,你会创建一系列“部分积”,然后必须将它们相加。计算机做的是同样的事情,但对于二进制数来说,生成这一堆部分积很容易——只是一系列的与(AND)操作。困难的部分在于将它们全部加起来。如果你有一个 NNN 位乘以 NNN 位的乘法,你最终会得到 NNN 行数字需要相加。

对这堆数字求和的最佳方式是什么?可以想象一种天真的方法:用一个标准加法器将前两行相加,取其结果再与第三行相加,依此类推。这慢得令人痛苦。每次加法都需要一个完整的、缓慢的、跨越整个数字宽度的进位传播步骤。总时间将是灾难性的,因为关键路径延迟会随着操作数的数量惊人地增长。

这正是进位保留加法器大放异彩的地方,它构成了像华莱士树这样的高速乘法器的核心。华莱士树不使用顺序链,而是利用一个进位保留加法器网络来一次性处理整堆部分积。一个进位保留加法器接收三行输入,并以恒定的延迟,在一个迅速的步骤中将它们减少为两行——一个和向量和一个进位向量。华莱士树就是这些 CSA 层的级联。在每一层,数字堆的高度大约减少 3/23/23/2 的因子。这个过程重复进行,直到整个、杂乱的 NNN 个部分积堆被压缩成仅仅两个数。所需的层数仅随 NNN 呈对数增长,即 O(log⁡N)O(\log N)O(logN),这相对于天真方法的线性扩展是一个巨大的进步。

只有在最后,当只剩下两行时,我们才最终付出代价。使用一个单一的、最终的进位传播加法器来将最后的和向量与进位向量相加,以产生最终的、规范的乘积。通过将完全的进位传播推迟到最后的一次性事件,我们用一阵快速、并行的压缩和一个最终不可避免的加法,取代了堆积如山的缓慢工作。

超越乘法:高性能计算的心脏

延迟进位传播的原理如此强大,以至于它的应用远远超出了简单的乘法。它是数字信号处理(DSP)和现代 CPU 设计中高性能算术的基石。

科学和工程中的许多关键算法都围绕着一个执行“乘法累加”(MAC)操作的循环构建——例如,计算许多乘积的和,∑ai⋅bi\sum a_i \cdot b_i∑ai​⋅bi​。这是数字滤波器、傅里叶变换和神经网络计算的数学核心。一个天真的实现会计算一个乘积,使用进位传播加法器将其加到一个运行总和上,计算下一个乘积,再次相加,如此往复。每个累加步骤都会被一次完整的进位传播所拖延。

一个远为优雅的解决方案是将运行总和,即累加器,保持在其进位保留形式——一对和向量与进位向量。当一个新的乘积到达时(它也可以是进位保留形式),它被使用另一个快速的进位保留加法器加到累加器上。我们可以执行成百上千次这样的累加步骤,而从未停下来解决进位。只有当整个循环结束时,我们才执行一次单一的进位传播加法来得到最终结果。这个策略极大地提高了 MAC 单元的吞吐量,也正是现代 FPGA 中专用 DSP 片实现其惊人性能的方式。

同样的想法也影响着处理器流水线的设计。一个长的组合逻辑操作,比如一次完整的乘法,可能会产生一个瓶颈,限制处理器的时钟速度。通过将操作分为一个基于 CSA 的快速规约阶段和一个最终较慢的进位传播阶段,设计者可以将操作分解到多个流水线阶段。进位保留的结果在阶段之间通过寄存器传递,从而允许更高的时钟频率和整体吞吐量。此外,通过使用 CSA 原理将一个三输入加法器直接构建到算术逻辑单元(ALU)中,处理器可以在一个周期内执行像 D=A+B+CD = A + B + CD=A+B+C 这样的操作,而不是两个独立的加法指令。这种硬件增强直接减少了某些计算所需的微操作数量,从而为执行的代码带来切实的加速。这种使用 CSA 树有效求和多个操作数的通用原理是任何设计高速数据通路的硬件架构师的基本工具。

惊人的联系:从硬件逻辑到软件算法

进位保留原理的美妙之处在于,它不仅仅是一个硬件技巧;它是一个关于管理依赖关系的基本概念,其影响可以在意想不到的地方看到。

考虑“位数统计”(population count)问题——计算一个 64 位二进制字中“1”的数量。我们如何能快速做到这一点?可以逐位乏味地检查。但一个更具创造性的方法将其视为一个多操作数加法问题。一个 64 位的字可以看作是 64 个单比特的数。我们可以简单地将这 64 个比特全部扔进一个 CSA 树!该树将有效地将这 64 个输入压缩成两个向量,然后由一个小型、快速的 CPA 求和,得出最终的计数。这是对用于乘法的相同机制的一个绝妙且不明显的应用。

也许最深刻的联系是进位保留硬件与软件中追求并行性之间的桥梁。现代超标量处理器被设计用来并行执行多条指令,但它们的能力被数据依赖性所束缚。考虑对“大整数”进行算术运算——这些数非常大,必须存储为机器字的数组(例如,用 8 个 64 位字的数组来表示一个 512 位的数)。使用标准的“带进位加法”指令来相加两个这样的大整数会产生一个刚性的依赖链。第二对字的加法在第一对的进位已知之前无法开始;第三对必须等待第二对,依此类推。这个串行链完全挫败了并行处理器,迫使其一次执行一条指令,并将其有效的指令级并行(ILP)降低到 1,无论其发射能力有多宽。

但是,如果我们需要对几个大整数求和呢?如果我们运用进位保留的思想,我们就可以打破这些链条。我们可以并行处理这些字,使用基本的处理器指令来模拟一个 CSA,产生两个大整数结果(一个和向量和一个进位向量)。这个过程是高度并行的,因为每个字位置的计算都独立于其他位置。我们有效地用一种超标量处理器可以利用的结构,替换了一组串行依赖。漫长而缓慢的进位传播再次被推迟到一个单一的最终步骤。通过理解一个源于数字逻辑的原理,我们可以编写出更智能的软件,从而释放底层并行硬件的全部威力。

从硅乘法器的核心,到流水线处理器的架构,再到软件算法的逻辑,进位保留原理始终是优雅思维力量的证明。它提醒我们,有时,得到答案最快的方法是智能地将最困难的工作推迟到最后一刻。