如何确定最佳(处理器)字长?越大越好吗?

How is the optimal (processor) word size determined? The larger the better?

我的理解是,处理器的字长是该处理器在单次计算中处理的位数。这(目前)通常是 32 或 64 位。然而,我的研究表明,字的大小在过去较小,并且随着时间的推移逐渐增加。

我也明白字的大小决定了通过系统总线的数据传输、指令大小、地址大小等。

鉴于此,最佳字长是如何确定的?更大的字号总是更好吗?如果不是,为什么?

我怀疑更大的字大小并不总是更好,因为更大的字大小可能意味着一个总线周期(通过总线传输一个字所花费的时间) 需要更长的时间?

谢谢。

However, my research indicates that the word size was smaller in the past, and has gradually increased over time.

是的,非常正确。虽然英特尔在 16 位和 32 位 CPU 方面做了开创性的工作(8086 和 80386 处理器分别是同类产品中的第一个),但 AMD 创造了他们的 AMD64(a.k.a.x86-64 或简称 x64)架构, 对 32 位 x86 架构的扩展始于 80386。英特尔创造了一个全新的东西,即 IA-64 架构,但实际上没有人使用它。

I suspect that a larger word size is not always better, since a larger word size may mean that one bus cycle (the time it takes to transfer one word across the bus) takes longer?

假设您的总线没有您要运输的数据那么宽,这是正确的。通过 16 位总线发送 32 位数据确实需要更长的时间。但是,通过 64 位总线传输 64 位数据所需的时间与通过 16 位总线传输 16 位数据所需的时间一样长。

因此,字长等于总线的宽度。在冯·诺依曼机中,有 3 条总线,因此对于究竟将什么定义为字长一直存在一些争议,但通常指的是数据总线。

所以,这些年来字数增加的事实是技术进步造成的(相关:Moore's Law)。科学不断向前发展,旨在开发出更好、更快的 CPU。

现在我们有 64 位 CPU,但是对于它们的指令集,直接操作数(文字)也被视为 64 位。这意味着,例如,将 0x1 加载到 64 位寄存器中至少需要 9 个字节(立即操作数 + 操作码)。如果体系结构不提供将一个符号或零扩展字节加载到 64 位寄存器的特殊指令,这显然是不利的。因此,有一些方法可以改进它,特别是 ARM Thumb1 指令集,它试图以增加执行时间为代价来减少代码大小。

毕竟没有"optimal word size."要看应用和环境。有些程序需要速度,有些程序必须体积小。


1 不知道为什么叫"Thumb," 可能是说明书太小了,顶针都能装进去

Given this, how is the optimal word size determined?

字长是处理器设计的一部分。它不一定是最优的。过去,字大小包括 8、12、16、32、36 和 64 位。字长中的位数越多,处理器实现起来就越复杂。 64 位加法(包括计算内存地址)需要的比较次数是 16 位加法的 4 倍。

Is a larger word size always better? If not, why?

“640K 应该对任何人都足够了。”

曾几何时,32 位(4GB 内存)被认为足以永久使用。 64 位需要多长时间?

更大的字长会消耗更多的内存并且实现起来更复杂。有一个权衡。

I suspect that a larger word size is not always better, since a larger word size may mean that one bus cycle (the time it takes to transfer one word across the bus) takes longer?

总线传输大小可能与处理器字长不同。这通常是一个瓶颈。