首页 文章

为什么按位运算比旧微处理器上的加/减操作稍快?

提问于
浏览
21

我今天看到了这段摘录:

在大多数较旧的微处理器上,按位运算比加法和减法运算稍快,并且通常比乘法和除法运算快得多 . 在现代体系结构中,情况并非如此:按位运算通常与添加速度相同(尽管仍然比乘法更快) .

我很好奇为什么按位操作比旧微处理器上的加/减操作稍快一些 .

我能想到的只会导致延迟的是,实现加/减的电路取决于几级逻辑门(并行加法器和诸如此类的东西),而按位运算则具有更简单的电路实现 . 这是什么原因?

我知道算术和按位运算都在现代处理器的一个时钟内执行,但纯粹谈到电路的传播时间,理论上现在处理器中的延迟是不是仍然存在?

最后,我有一个关于按位移位操作执行的概念C问题:

unsigned x = 1;
x <<= 5;

unsigned y = 0;
y += 32;

xy 都应该保持值 32 ,但它是否需要 5 单独左移以获得 x 到该值(如通过管道实现的按位移位)?为了澄清,我纯粹是在询问电路行为而不是时钟周期数 .

6 回答

  • -1

    在任何二进制位操作中,每个输出位仅取决于输入中的两个相应位 . 在加法运算中,每个输出位取决于输入中的相应位和右侧的所有位(朝向较低值) .

    例如,01111111 00000001的最左位是1,但最左边的位01111110 00000001是0 .

    在最简单的形式中,加法器将两个低位相加并产生一个输出位和一个进位 . 然后添加接下来的两个最低位,并添加进位,产生另一个输出位和另一个进位 . 这重复 . 因此,最高输出位是添加链的末尾 . 如果你像老式处理器那样逐位进行操作,那么到达终点需要时间 .

    通过将几个输入位馈入更复杂的逻辑布置,有一些方法可以加快这一点 . 但这当然需要更多的芯片面积和更大的功率 .

    今天的处理器有许多不同的单元,用于执行各种工作负载,存储,添加,乘法,浮点运算等 . 鉴于今天的功能,与其他任务相比,执行添加的工作量很小,因此它适合单个处理器周期 .

    也许从理论上讲,您可以使处理器比添加更快地执行按位操作 . (至少在纸面上,有异步操作的外来处理器,不同的单元按照自己的节奏工作 . )然而,随着设计的使用,你需要一些定期的固定周期来协调处理器加载中的许多事情指令,将它们分派给执行单元,将执行单元的结果发送到寄存器,等等 . 一些执行单元确实需要多个周期来完成它们的工作(例如,一些浮点单元需要大约四个周期来进行浮点加法) . 所以你可以混合使用 . 但是,对于当前的刻度,使循环时间变小以使其适合按位操作而不是添加可能不经济 .

  • 0

    添加(你通常可以免费减去)的复杂事情是,有一个讨厌的携带问题 .

    所以,你最终的天真解决方案是N次Full-Adders,其中N是你的ALU的多少位宽 .

    这些讨厌的意味着你有很多传播延迟 . 并且,由于单次进位可能会导致整个结果不准确,因此您最终必须等待相当长的时间才能获得所有进位值,然后将链中的所有其他全加器等待结算 .

    围绕这个特定的瓶颈有很多方法,但没有一种方法可以像完整加法器链那样简单或资源便宜 . (最快的是在硅中实现的查找表)

    如果您想了解更多细节,可能需要在http://electronics.stackexchange.com上询问

  • 23

    要回答你的上一个问题,这取决于 . 有些架构只有1的移位(例如z80),有些架构通过较大的常量和/或变量来显示移位,但是在内部实现它们是一堆_478426_(例如x86的旧实现),有一些架构可以在一个周期中移位超过1但是只有当移位量是常数时,才有一些架构(例如x86的现代实现)使用barrel shifter并且可以在一个周期内通过变量移位,并且仍然存在更多可能性 .

    桶形移位器的电路深度在它可以做的最大偏移中是对数的,而不是必须是寄存器的宽度 - 它有时比宽度小一个,并且可以想象它更小 .

  • 2

    一些额外的实现必须为进位执行额外的循环 . 例如:16位整数需要8位处理器上的多条指令 . 这也适用于转变 . 但是移位总是可以将高度位移到下一个字节的低位 . 添加必须在另一轮中添加较低位 .

  • -2

    比特运算符在更短的时间内执行,因为

    • 处理器采用一条指令执行逐位运算,(假设)采用一个执行周期,另一方面其他算术指令(特别是乘法和除法)需要更多的执行周期

    • 大多数情况下,在一个寄存器中执行逐位操作,并且需要处理多个寄存器的其他算术指令

    这就是为什么移位比其他算术运算更快的原因

  • 4

    我从一个介绍到装配课,我发现了这一点 . 但是,移位只是处理器可以执行的最快指令 . 添加和减去需要执行一些指令 . 我认为现代处理器的优化程度更高 .

    据推测,有人可以更准确,更彻底地回答这个问题 .

相关问题