为什么没有 256 位或 512 位微处理器?

电器工程 微控制器 微处理器 建筑学
2022-01-07 22:59:37

在 8 位微处理器中,它的数据总线由 8 条数据线组成。在 16 位微处理器中,它的数据总线由 16 条数据线等组成。

为什么既没有 256 位微处理器也没有 512 位微处理器?他们为什么不简单地增加数据线的数量并创建一个 256 位微处理器或 512 位微处理器?

阻碍创建 256 位微处理器或 512 位微处理器的障碍是什么?

4个回答

想想看。您对“256 位”处理器的设想究竟是什么?首先是什么让处理器的位数?

我认为如果没有进一步的限定,处理器的位数是指它的 ALU 宽度。这是它可以在单个操作中本机处理的二进制数的宽度。因此,“32 位”处理器可以在单个指令中直接对高达 32 位宽的值进行操作。因此,您的 256 位处理器将包含一个非常大的 ALU,能够在单个操作中对 256 位数字进行加、减、ORing、ANDing 等。你为什么要那个?什么问题使得大型且昂贵的 ALU 值得拥有和支付,即使对于处理器仅计算 100 次循环迭代等的情况也是如此?

关键是,你必须为广泛的 ALU 付费,无论你是大量使用它还是只使用它的一小部分功能。为了证明 256 位 ALU 的合理性,您必须找到一个足够重要的问题,该问题可以真正受益于在单个指令中操作 256 位字。虽然你可以设计几个例子,但这样的问题还不足以让制造商觉得他们会从生产这种芯片所需的大量投资中获得回报。如果存在可以真正受益于广泛 ALU 的利基但重要(资金充足)的问题,那么我们将看到非常昂贵的高度针对性处理器用于该应用程序。然而,它们的价格将阻止在其设计的狭窄应用程序之外广泛使用。例如,如果 256 位使某些密码学应用成为可能,那么每个花费 100 到 1000 美元的专用 256 位处理器可能会出现。不过,您不会将其中一个放在烤面包机、电源甚至汽车中。

我还应该清楚,宽 ALU 不仅使 ALU 更昂贵,而且芯片的其他部分也是如此。256 位宽的 ALU 也意味着必须有 256 位宽的数据路径。仅此一项就需要大量的硅片面积。该数据必须来自某个地方并到达某个地方,因此需要有寄存器、缓存、其他内存等,才能有效地使用宽 ALU。

另一点是您可以在任何宽度处理器上进行任何宽度算术。您可以在 8 条指令中将 32 位内存字添加到 PIC 18 上的另一个 32 位内存字中,而您可以在仅用 2 条指令缩放到 32 位的相同架构上执行此操作。关键是窄 ALU 不会阻止您执行宽计算,只是宽计算需要更长的时间。因此,这是一个速度问题,而不是能力问题。如果您查看需要使用特定宽度数字的应用程序,您会发现很少需要 256 位字。用对其他应用程序没有帮助的硬件来加速那些少数应用程序的费用是不值得的,也不是对产品开发的良好投资。

好吧,我不知道 256 位还是 512 位,但我听说过 1024 位处理器(我现在找不到)。这个词是VLIW,表示非常长的指令字所以这是指令总线,而不是数据总线宽度。优点是您可以大规模实施指令级并行 (ILP) 。

我第一次接触 ILP 肯定是在 20 年前摩托罗拉 DSP 上,它有在将数据移入和移出内存时执行 MAC(乘法和累加)的指令,这样您就可以在下一条指令上执行新的 MAC,而不会浪费用于移动数据的两个 MAC 之间的时间。
今天也有提供此选项的通用控制器。VLIW 以更高的规模应用了这一点。

由于您的数据总线宽度不会那么宽,因此您可以在一条指令中包含多个指令和常量。数据总线之所以没有跟上潮流,是因为它太没用了;一个 64 位数据寄存器可以表示一个 20 位十进制数字。你上一次需要 20 位数的准确度是什么时候?对于大多数应用 1020=.

进一步阅读
VLIW 架构

微处理器的“位数”通常根据通用寄存器的大小来定义。大小决定了处理器可以本地处理多少数字以及它可以访问多少内存。64 位数字对于几乎任何算法来说都足够了,而可寻址内存量(1600 万兆兆字节)在相当长的一段时间内也足够了。增加通用寄存器的大小根本没有任何优势。另一方面,用于对寄存器执行操作的算术逻辑单元 (ALU) 的面积与位数的平方成比例。256 位 ALU 会大 16 倍,而且速度要慢得多。

另一方面,扩大处理器以使其可以一次执行许多较小的操作是有意义的。事实上,英特尔的 Sandy Bridge 和 Ivy Bridge 处理器就是这样做的,它们有 256 位 SIMD 寄存器,每个周期可以对它们进行两次算术运算和一次内存操作。因此,如果有人是一个狡猾的营销人员想要歪曲经常使用的术语,那么称它们为 256 位甚至 768 位处理器是合理的。

首先,处理器的位大小通常由机器语言程序员可见的抽象架构决定,而不是由数据总线大小等实现细节决定。

例如,摩托罗拉 68000 是 32 位处理器。它有 32 位数据寄存器和 32 位地址寄存器。现在,该架构系列的第一个版本只公开了 24 位地址线。此外,存在仅具有 8 位数据总线的变体(因此 32 位存储器操作由处理器作为多个访问周期执行)。

现在关于这个问题,为什么不转到 256 和 512。处理器“本机”处理多种数据类型,因此单独查看 256 或 512 位对这些数据类型中的每一种意味着什么是有帮助的。我们有整数、指针和浮点类型。

  1. 整数:程序从 32 位和 64 位整数中获得了很多。如果 64 位是一个限制,解决方法是使用软件实现的 bignum 整数。高级语言可以实现整数类型,以便操作在“fixnums”和“bignums”之间平滑转换。当然你会受到 bignums 的性能影响,但你必须从大局考虑:程序中有多少操作是 bignum 操作。256 或 512 位数并不能消除对 bignums 的需求,它们只会在我们必须切换到 bignums 之前增加空间。如果你想操作 2048 位公钥,512 位整数是不行的(但是一个 512 位数字的 bignum 可能很快)。

  2. 指针:更宽的指针允许两件事:更宽的地址空间,以及存储在指针中的附加元数据。如今,地址空间是虚拟的,因此即使内存没有增长,它们也可以增长。有人提出,如果你有 128 位指针,地址空间是如此巨大,以至于你可以将操作系统的所有用户空间进程和内核随机放置在一个不受保护的空间中,而且它们不太可能碰撞。不是简单地创建更大的地址空间,更胖的指针可用于携带不是地址位的位,例如有关所指对象的信息(类型、大小和其他信息)或与安全相关的信息。这种东西可能有一些“最佳肥胖”,如果我猜的话,我仍然会将它限制在 128 位。它没有 转到 256 位指针似乎没有意义,更不用说 512。胖指针有一个缺点:它们会使所有包含指针的数据结构膨胀。而且,通常,您希望指针具有相同的大小,否则您需要指令集架构(如内存段)的复杂性,然后您将拥有完整的指针(段描述符和偏移量)或只有本地指针(在某些理解的段内的偏移量) .

  3. 浮点类型:浮点数中的更多位意味着更高的精度。我会说浮点类型从更广泛的表示中受益最多。256 或 512 位浮点类型将提高数字代码的稳定性和需要多次迭代的科学计算的质量,并在此过程中累积错误。浮点精度与整数精度不同:我们不能将浮点类型划分为诸如 fixnums 与 bignums 之类的范围。更高的浮点精度会影响所有不精确数字的质量,无论它们接近于零还是具有很大的数量级。浮点指数中的更多位也可以极大地扩展浮点数的范围,并且比将位添加到 bignum 整数要快得多。

由于这些原因,我怀疑未来的主要趋势将是硬件浮点数宽度的增加,而不一定是指针和整数宽度的增加。

请记住,浮点数在过去已经领先于其他类型。例如,有一段时间我们主要使用支持 64 位 IEEE 双浮点的 32 位处理器。这是因为虽然您可以使用 32 位指针和整数做很多事情,但 32 位浮点数对于任何严肃的数字工作都非常有限。

一个非常非常有用的特性,很高兴看到在浮点表示中出现,那就是类型标签的一些备用位。在动态的高级语言(其中对象具有类型,但存储位置保存任何类型的值)中实现浮点类型是一项艰巨的任务,因为在指针和类似整数的对象中可以找到备用位来放置部分识别类型标签,这对于浮点数来说很难做到。所以最终经常发生的是浮点数被堆分配。一些方案从尾数中窃取位,因此与同一台机器上的其他语言中的浮点数相比,该语言中的浮点类型会丢失精度。