Vil*_*ray 22 c bit-manipulation cpu-architecture bitwise-operators digital-logic
我今天看到了这段摘录:
在大多数较旧的微处理器上,按位运算比加法和减法运算稍快,并且通常比乘法和除法运算快得多.在现代体系结构中,情况并非如此:按位运算通常与添加速度相同(尽管仍然比乘法更快).
我很好奇为什么按位操作比旧微处理器上的加/减操作稍快一些.
我能想到的只会导致延迟的是,实现加/减的电路取决于几级逻辑门(并行加法器和诸如此类),而按位运算则具有更简单的电路实现.这是什么原因?
我知道算术和按位运算都在现代处理器的一个时钟内执行,但纯粹谈到电路的传播时间,理论上现在处理器中的延迟仍然存在吗?
最后,我有一个关于按位移位操作执行的概念C问题:
unsigned x = 1;
x <<= 5;
unsigned y = 0;
y += 32;
Run Code Online (Sandbox Code Playgroud)
双方x并y应持有的价值32,但它采取5个独立左移获得x该值(中位运算的变化通过管道实现)?为了澄清,我纯粹是在询问电路行为而不是时钟周期数.
Eri*_*hil 24
在任何二进制位操作中,每个输出位仅取决于输入中的两个相应位.在加法运算中,每个输出位取决于输入中的相应位和右侧的所有位(朝向较低值).
例如,最左边的位01111111 + 00000001为1,但最左边的位01111110 + 00000001为0.
在最简单的形式中,加法器将两个低位相加并产生一个输出位和一个进位.然后添加接下来的两个最低位,并添加进位,产生另一个输出位和另一个进位.这重复.因此,最高输出位是添加链的末尾.如果你像老式处理器那样一点一点地进行操作,那么到达终点需要时间.
通过将几个输入位馈入更复杂的逻辑布置,有一些方法可以加快这一点.但这当然需要更多的芯片面积和更大的功率.
今天的处理器有许多不同的单元,用于执行各种工作负载,存储,添加,乘法,浮点运算等.鉴于今天的功能,与其他任务相比,执行添加的工作量很小,因此它适合单个处理器周期.
也许从理论上讲,您可以使处理器比添加更快地执行按位操作.(有,至少在纸面上,异步操作,用做在自己的步伐工作不同单位异国情调的处理器).然而,与使用中的设计,你需要一些常规固定周期的处理器负载来协调很多事情指令,将它们分派给执行单元,将执行单元的结果发送到寄存器,以及更多.一些执行单元确实需要多个周期来完成它们的工作(例如,一些浮点单元需要大约四个周期来进行浮点加法).所以你可以混合使用.但是,对于当前的刻度,使循环时间变小以使其适合按位操作而不是添加可能不经济.