设计指令集架构的因素

Factors in designing Instruction set Arcitecture

设计指令集架构时要考虑的两个主要因素是什么?

我知道 ISA 是什么。但是需要考虑哪些因素呢?我已经查看了维基百科,但没有太大帮助。

我发现这是 ISA 的设计问题。

但这两个因素我有点困惑!请帮助任何人!准备计算机组织与体系结构考试

您可以阅读来自 here 的全文 指令集设计的重要性

在本章中,我们将探索 CPU 设计中最有趣和最重要的方面之一:CPU 指令集的设计。指令集架构(或 ISA)是 CPU 设计师必须从一开始就解决的最重要的设计问题之一。缓存、流水线、超标量实现等特性都可以在原始设计过时很久之后移植到 CPU 设计中。但是,一旦 CPU 投入生产并且人们正在编写使用这些指令的软件,就很难更改 CPU 执行的指令。因此,必须慎重选择 CPU.

的说明

您可能想采用 "kitchen sink" 指令集设计方法1,并在指令集中包含尽可能多的指令。这种方法失败的原因有多种,我们将在以下段落中讨论。指令集设计是妥协管理的缩影。好的 CPU 设计是选择丢弃什么而不是保留什么的过程。说起来很容易 "let's include everything." 困难的部分是一旦你意识到你不能放芯片上的一切。

恶劣的现实#1:硅房地产。 "putting it all on the chip" 的第一个问题是 CPU 上的每个功能都需要一定数量的晶体管'硅芯片。 CPU 设计师使用 "silicon budget" 并被赋予有限数量的晶体管。这意味着没有足够的晶体管来支持 CPU 上的 "putting all the features"。例如,最初的 8086 处理器的晶体管预算不到 30,000 个晶体管。奔腾 III 处理器的预算超过 800 万个晶体管。这两个预算反映了1978年和1998年半导体技术的差异。

令人讨厌的现实#2:成本。虽然今天可以在 CPU 上使用数百万个晶体管,但使用的晶体管越多,CPU。例如,奔腾 IV 处理器的价格为数百美元(大约 2002 年)。一个只有 30,000 个晶体管的 CPU(也是大约 2002 年)只需几美元。对于低成本系统,削减一些功能并使用更少的晶体管可能更为重要,从而降低 CPU 的成本。

令人讨厌的现实 #3:可扩展性。 "kitchen sink" 方法的一个问题是很难预测人们想要的所有功能。例如,增加了英特尔的 MMX 和 SIMD 指令增强功能,使多媒体编程在奔腾处理器上更加实用。早在 1978 年,很少有人可能预料到需要这些说明。

令人讨厌的现实#4:遗留支持。这几乎与可扩展性相反。通常情况下,CPU 设计人员认为重要的指令结果不如预期有用。例如,80x86 CPU 上的 LOOP 指令在现代高性能程序中很少用到。 80x86 ENTER 指令是另一个很好的例子。使用 "kitchen sink" 方法设计 CPU 时,通常会发现程序几乎从不使用某些可用指令。不幸的是,您不能轻易删除处理器更高版本中的指令,因为这会破坏一些使用这些指令的现有程序。一般来说,一旦你添加了一条指令,你就必须在指令集中永远支持它。除非很少有程序使用该指令(并且您愿意让它们中断)或者您可以在软件中自动模拟该指令,否则删除指令是一件非常困难的事情。

令人讨厌的现实 #4:复杂性。 新处理器的受欢迎程度很容易通过人们为该处理器编写的软件数量来衡量。大多数 CPU 设计很快就死了,因为没有人编写专门针对该 CPU 的软件。因此,CPU 设计人员必须考虑在推出时将使用该芯片的汇编程序员和编译器编写人员。虽然 "kitchen sink" 方法似乎对此类程序员很有吸引力,但事实是没有人愿意学习过于复杂的系统。如果您的 CPU 在阳光下无所不能,这可能会吸引已经熟悉 CPU 的人。不过可惜了不懂芯片的穷鬼,一下子就学会了。

"kitchen sink"方法的这些问题都有一个共同的解决方案:设计一个简单的指令集开始,并为以后的扩展留出空间。这是 80x86 被证明如此流行和长寿的主要原因之一。英特尔从一个相对简单的 CPU 开始,并想出了如何在多年来扩展指令集以适应新功能。