【发布时间】:2014-10-17 05:13:21
【问题描述】:
我正在使用 Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz,我想知道为什么 64 位数字的乘法比 32 位数字的乘法慢。我在 C 中进行了一次测试,结果证明它需要两倍的时间。
我预计它需要相同的时间,因为 CPU 使用本机 64 位寄存器,并且数字的宽度无关紧要(只要它们适合 64 位寄存器)。
谁能解释一下?
【问题讨论】:
-
您确定要编译为 64 位吗?
-
@Boann 大多数实现 x86-64 的处理器仍将具有更快的 32 位乘法。参见例如agner.org/optimize/instruction_tables.pdf 中的第 12 页,了解 32 位和 64 位 IMUL 之间的时间差异。
-
@Boann 页面错误! (这适用于旧处理器,其中乘法仅达到 32 位。不过,它仍然比 16 位乘法快)。在实现 x86-64 的处理器上尝试 64 位与 32 位 IMUL 的第 22 页。
-
现代核心速度快得离谱。但这不是程序中的典型约束,那些快速内核必须处理非常慢的内存。有人期望当您使用 64 位乘法时移动两倍的数据,当真正的瓶颈是内存时,这当然会慢两倍。在那里,快速解释,还有更多。不显示您的代码是没有意义的,因此您可以获得准确的答案而不是猜测。
-
更好地展示汇编代码。此外,如果有机会,现代 CPU 很可能能够并行处理两个 32 位操作,使用与单个 64 位操作相同的逻辑电路。
标签: c performance cpu cpu-registers