为什么计算机可以有数百万条指令却只有几千条指令?

电器工程 指令系统
2022-01-26 14:36:01

大多数计算机只包含几千条指令,但位宽(通常为 64 位)在技术上允许计算机访问数百万甚至数十亿条指令。有些可能非常有用,例如 DIVIDE、EXPONENT 或条件运算。此外,时钟速度正在停止,量子计算还有很长的路要走。为什么他们还没有向微处理器添加额外的指令?

4个回答

因为每条指令都需要一些电路来实现它。您添加的指令越多,处理器就越大。由于大多数这些操作永远不会被使用,它只是浪费了复杂性。

所有的复杂性甚至会减慢处理器的速度。RISC 处理器,如 ARM,是基于丢弃大量操作并尽可能快地生成更小的处理器内核的想法。

即使是具有庞大指令集的现代 X86 处理器,最终也隐藏了一个更快的处理器,模拟一个巨大的复杂处理器。

另一方面,为了补充 Simon B 的答案,GPU 会进行很多复杂的计算。但它们可以归结为乘加指令,A = B*C + D。因此它们至少尝试使用复杂的乘加指令,因为它们是常见指令。

回顾一下。如果添加更多指令,CPU 将变为:

  1. 更复杂,即更大的 CPU 和更难有效使用
  2. 慢点。您可以运行它的速度取决于最慢的单元
  3. 更贵。这是您的客户想要的吗?

另外,请阅读“risc 与 cisc 架构”

大多数计算机只包含几千条指令,但位宽(通常为 64 位)在技术上允许计算机访问数百万甚至数十亿条指令。

首先,让我们明确一点,64 位对指令没有任何意义。大多数 64 位系统使用 32 位长指令,但 x86 除外,其中指令可以是小于 32 位到数百位的任意位置。

至于为什么指令数量有限,对于使用 32 位指令的系统(这是一个非常有效的数字),可以编码的可能指令的数量有些有限,因为理想情况下您希望至少有 3 个寄存器对于至少一些操作码。然而,即使指令可以具有任意长度的 x86 也有大约几千条独特的指令(并非所有指令都必须仍然使用),因为一条指令可以做的有用的事情并不多。编码大量无用的指令(如 x86 那样)并不一定会伤害您,但也无济于事。

为什么他们还没有向微处理器添加额外的指令?

英特尔和 ARM 会定期添加新指令。聚焦intel,先后有Haswell New Instructions、Broadwell New Instructions、Skylake New Instructions、Palm Cove(Cannonlake)New Instructions和去年的Sunny Cove(Icelake)New Instructions。

大多数有用的指令是很久以前添加的,因此这些指令通常平均具有边际效应,但在某些特定的应用程序中,这些指令可能会产生很大的不同。

大多数计算机只包含几千条指令,

这取决于你如何计算它们。是否应该将具有相似功能的所有指令组合在一起,或者将不同的变体分开计算?还是应该根据 CPU 必须执行哪些操作来实现它们(以及这些操作必须有多大不同才能使指令“不同”)?

到底有多少 x86-64 指令?

答案?从 981 到 3683 的任意位置,具体取决于您使用的标准。

但是,为什么可能会有更多(或更多)呢?从根本上说,限制不是技术上的,而是经济上的。没有人非常希望这些额外的指令足以证明添加它们的合理性。

有些可能非常有用,例如 DIVIDE、EXPONENT 或条件运算。

这占了十几个,其中大多数当前的 CPU 已经拥有。数百万或数十亿条指令?没有人想要他们。

仅仅因为您认为指令可能“有用”并不意味着它值得实施。由于几乎所有现代编码都是用高级语言完成的,只要有足够的指令来满足编译器编写者的需求,每个人都会很高兴。任何其他所需的“有用”操作都可以在更高级别的代码中实现。

当然也有例外,这就是为什么现代 CPU 倾向于在其中包含更多指令的原因。但也有一些情况下,指令被删除,因为它们没有被充分利用来证明保留它们的合理性。这样做可能是为了节省芯片、降低复杂性、提高速度,或者只是为了避免不得不支持没人想要的功能。