fir*_*exx 3 c cpu performance cpu-registers
我正在使用Intel(R)Core(TM)i5-4200U CPU @ 1.60GHz,并想知道为什么64位数的乘法比32位数慢.我已经在C中完成了一次测试,结果发现它需要两倍的时间.
我预计它需要相同的时间,因为CPU使用本机64位寄存器,并且数字的宽度无关紧要(只要它们适合64位寄存器).
有人可以解释一下吗?
x86-64指令集中有专门的指令表示您只想乘以两个32-bit量.IMUL %EBX, %ECX对于x86-64程序集,一条指令可能看起来像是特定的方言,而不是64位乘法IMUL %RBX, %RCX.
因此处理器知道您只想乘以32位数量.这种情况经常发生,以至于处理器的设计者确保内部电路将在这种简单的情况下进行优化以提供更快的答案,就像您将3位数字乘以6位数字更容易.可以在Agner Fog测量的时序中看到差异,并在他的综合装配优化资源中进行了描述.
如果您的编译器针对较旧的32位IA-32指令集,则32位和64位乘法之间的差异会更大.编译器必须实现64位乘法,只使用32位乘法指令,使用其中的四个(如果仅计算结果的64个最低有效位,则为3个).在这种情况下,64位乘法可能比32位乘法慢大约四到四倍.