对于主流计算,考虑到今天和不久的将来的需求,64 位寄存器大小的 CPU 的实际优势是什么?

电器工程 中央处理器
2022-01-08 06:26:48

我知道 32 位处理器的限制之一是无法轻松处理超过 4GiB 的 RAM,即使是手机、平板电脑和笔记本电脑上的主流计算,这也是当今的需求。

与 48 位寄存器大小架构相比,64 位寄存器大小架构的其他主流计算优势是什么?

请在您的答案中引用相关来源或提供详细的推理。以 2 为幂的比特数更好并不能提供技术依据。

当然,如果不考虑价格,那么比特数越多越好,我们显然也无法预测遥远的未来需求。

更宽的总线可能能够更快地移动数据,但总线大小并不总是必须与寄存器大小相匹配,不是吗?此外,可能由于物理限制,具有更多晶体管和更多线路的 CPU 可能被迫以稍慢的时钟速率运行?

使用 48 位,您可以处理 256TiB 的 RAM:至少在接下来的几十年里有足够的空间使用。对于主流编程的大多数整数和十进制计算来说,一般来说,32 位数字已经足够大了,这使得 64 位看起来很浪费。64 位应用程序最终会消耗更多的 RAM,而处理器本身最终会在 ALU、控制单元和总线中浪费大量晶体管来处理根本不需要的位。所有这些东西都占用了额外的硅空间,这些空间可以用来简单地使处理器更小、更便宜,或者可以以缓存或额外内核的形式更好地使用。

4个回答

使用 48 位,您可以寻址 256TiB 的 RAM,有足够的可用空间

它与地址空间(*)无关。

事实上,大多数 64 位桌面处理器都有48 位地址总线没有什么比这更大的了,你是对的。

对于大多数整数和十进制计算来说,通常 32 位数字似乎已经足够大了

许多,但绝不是全部,而且可能不是大多数。大量计算(即使在 32 位 CPU 上)最终使用 64 位计算

最简单的例子是 Y2k38 错误,它将在未来 20 年内困扰任何使用 32 位 Unix 时间戳的系统。

许多浮点数是双精度的(64 位),因为单精度浮点数的范围非常有限。

64 位处理器仍然可以执行 32 位计算,事实上,拥有 64 位缓存允许将两倍的 32 位值存储在缓存中,从而通过减少内存操作(缓存未命中)潜在地提高性能

支持高级 SIMD 式指令的现代 64 位处理器还可以同时执行多个 32 位操作,因此即使是 32 位计算也可以受益。

那么,为什么处理器设计人员这么快就选择了向 64 位过渡呢?

64位进来的地方是数据总线。我们倾向于以我们基本值的两倍的幂来工作——在计算机中,这通常是一个 8 位字节。因此,如您所料,2 的幂将是 8 位(1 x 8 位)、16 位(2 x 8 位)、32 位(4 x 8 位)。因此,下一个逻辑步骤是 64 位(8 x 8 位)。

48 位数据总线将是非 2 次幂的字节数,这使得寻址操作更有趣,因为数据不再以良好的两个多重边界的幂次方对齐。这并非不可能,只是相当罕见。


(*) 嗯,有点。

虽然有少数例外,但计算行业已在很大程度上标准化了 8 位字节*。

非常希望字大小字节大小的两倍的幂。当总线系统需要将字节地址转换为字地址时,不这样做会导致一些极其混乱的地址转换。

非常希望能够在单个数据字中操作内存地址,尤其是在现代高度流水线的 CPU 上。

非常希望具有向后兼容性,这意味着 32 位模式。为您的系统添加处理“半词”的支持相对容易,添加对处理“三分之二词”的支持会更麻烦。

将这些因素放在一起,将内存地址空间增加到超过 32 位限制的最合乎逻辑的方法是将数据字大小扩展到 64 位。即使您不立即计划将所有这些位用于内存寻址(许多 64 位系统的内存地址空间小于 64 位)。

* 就本文而言,“字节”用于指代处理器可以寻址的最小数据单元,“字”用于指代主要整数数据路径可以处理的最宽数据类型单个单元。

你认为这是浪费,但在一个地方存钱通常意味着在另一个地方浪费。

在字长上节省很少的寄存器单元会使您浪费 CPU 周期来处理未对齐的值。运行新的全 48 位程序肯定没有问题,但试图在 48 位 CPU 上运行旧的 32 位程序将是一场噩梦。您可以节省的所有晶体管很可能会以专用 32 位处理/翻译单元的形式获得利息回报。另一种方法是破坏向后兼容性,也就是“没有人使用的 CPU”。

这与杀死 Intel 的 64 位 Itanium 的原因非常相似:作为一种全新的架构,它无法像 AMD(相对而言)将 x86 的粗略延伸到两倍字长那样快地运行传统的 32 位代码。没有人留下来看看英特尔勇敢的新世界是否最终会成为现实——转型的成本让所有人都望而却步。另一方面,AMD 带来了“更多的好东西”,看看我们:16 年后,我们仍然有 32 位代码的残留物在四处飘荡,我们的 64 位 CPU 比 32 位 CPU 运行它的速度更快。

现在已经不是80年代了。Ram 和寄存器空间现在并不昂贵,因此我们不再以“尽可能少”为目标。相反,我们以“尽可能实用”为目标。64 位是最实用的:正如 Tom 所说,我们已经在 32 位 CPU 上运行了一些 64 位精度,但恕我直言,主要卖点是轻松处理遗留问题。

在 x86 市场中,一直追溯到 IBM XT 的传统追溯是一股不可忽视的力量。而且由于一个架构有 64 个东西,没有人能卖得更少。这就是营销。客户不明白事情是什么,他们只知道越多越好。

我开始在一台计算机上使用大型计算机,该计算机的每个单词寻址 60 位字宽,使用 6 位单元作为字符(10 个单词),尽管有几个 12 位字符(如小写字母)。地址和地址寄存器是 18 位的。这是一个主要用于数字运算的系统:由于内存无法按字符寻址,因此文本处理非常笨拙。

那么今天这种设置有什么问题呢?今天的数据,无论好坏,几乎都以字节大小的数量进行交换。字节大小的数量用二进制地址寻址,并组织在具有 2 字节大小的扇区/块/单元中。虽然在非常有限的上下文中存在寻址位的特殊指令,但标准是用于寻址字节的指令,包括仅适用于整个字的指令。即使在具有严格对齐要求的 CPU 上(尽管 x86 架构成员在这里相当松懈),内存地址也都是字节地址(我记得有一个 TI 面向图形的处理器,其基本可寻址单元实际上是一个位,但这已经是一个奇怪的问题了当时)

文件有字节大小,所有内容都是 2 的幂,实际的数据总线传输是 CPU 字宽的倍数。将 48 位字放入该世界将是一场噩梦,因为您不仅将地址拆分为寻址更大总线宽度的部分和寻址字节的部分,还必须执行实际除以 6 来计算地址偏移量在更大的字宽中(您不能真正期望获得专门满足您的字宽选择的存储设备)。

简而言之:在标准化数据表示和字符集以及库存外围单元和接口的世界中,使用除 2 的幂以外的字宽将比“计算机鼠标”指的是在穿孔卡片盒中挖洞的啮齿动物时更加禁止,对长期数据存储构成重大危险。