24

我今天看到了这段摘录:

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

我很好奇为什么按位运算比旧微处理器上的加法/减法运算要快一些。

我能想到的所有会导致延迟的是,实现加法/减法的电路取决于几个级别的逻辑门(并行加法器等),而按位运算的电路实现要简单得多。这是原因吗?

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

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

unsigned x = 1;
x <<= 5;

unsigned y = 0;
y += 32;

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

4

6 回答 6

26

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

例如,01111111 + 00000001 的最左边位为 1,但 01111110 + 00000001 的最左边位为 0。

在最简单的形式中,加法器将两个低位相加并产生一个输出位和一个进位。然后添加接下来的两个最低位,并添加进位,产生另一个输出位和另一个进位。这重复。因此,最高输出位位于加法链的末尾。如果像旧处理器那样一点一点地进行操作,那么需要时间才能完成。

通过将几个输入位输入更复杂的逻辑安排,有一些方法可以加快速度。但这当然需要更大的芯片面积和更大的功率。

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

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

于 2013-03-27T20:35:04.010 回答
4

加法的复杂之处(你通常可以免费减法)是存在讨厌的进位问题。

因此,您最终得到的天真的解决方案是 N 次全加器,其中 N 是您的 ALU 的位宽。

这些讨厌的携带意味着你有很多传播延迟。而且,由于一次结转可能会使整个结果不准确,因此您最终不得不等待相当长的时间来等待所有的结转值,而反过来,链上的所有其他全加器都必须等待结算。

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

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

于 2013-03-27T20:38:16.987 回答
2

要回答你的最后一个问题,这取决于。有些架构只有 1 的移位(例如 z80),有些架构公开了较大的常量和/或变量的移位,但在内部将它们实现为一堆“移位 1”(例如 x86 的旧实现),有一些架构可以在一个周期内移位超过 1,但只有当移位量是一个常数时,有些架构(例如 x86 的现代实现)使用桶形移位器并且可以在一个周期内移位一个变量,还有更多的可能性。

桶形移位器的电路深度与它可以做的最大移位成对数,这不一定是寄存器的宽度 - 它有时比宽度小一,甚至可以想象它更小。

于 2013-03-28T11:23:34.380 回答
0

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

于 2013-03-27T20:38:56.020 回答
-1

位操作符的执行时间更短,因为

  • 处理器需要一条指令来执行按位操作,并且(比如说)需要一个执行周期,另一方面,其他算术指令(特别是乘法和除法)需要更多的执行周期
  • 大多数情况下,逐位运算是在一个寄存器中执行的,而其他算术指令需要处理一个以上的寄存器

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

于 2013-03-27T20:37:08.027 回答
-2

这是我从汇编类的介绍中看到的。但是移位只是处理器可以执行的最快指令。加减法需要一些指令来执行。我想现代处理器会得到更好的优化。

想必有人可以更准确、更彻底地回答这个问题。

于 2013-03-27T20:30:12.563 回答