Hruska|都2021年了,还把x86和ARM归为CISC和RISC?( 五 )



Hruska|都2021年了,还把x86和ARM归为CISC和RISC?
文章图片

AMD K5 框架图如下图所示:

Hruska|都2021年了,还把x86和ARM归为CISC和RISC?
文章图片

如果你曾经研究过微处理器原理图 , 你可能会发现 K5 和微处理器有许多相似之处 , 但奔腾却相反 。 AMD 在 Nx586 上市后收购了 NexGen 。 K5 是 AMD 自主设计的 , 而 K6 最初是 NexGen 的产品 。 也是从那时开始 , CPU 变得像今天我们熟悉的样子 。 设计这些芯片的工程师曾表示:这些相似之处不仅仅是表面上的 。
早在 1996 年 , AMD 的 David Christie 就在 IEEE Micro 上发表了一篇关于 K5 的文章 , 阐述了 K5 是如何将 RISC 和 CISC 结合在一起的 , 这里引用一段该文章的内容:

我们开发了一个松散地基于 29000 指令集的微型 ISA 。 一些额外的控制字段将微指令的大小扩展到 59 位 。 其中一些简化并加速了超标量控制逻辑 , 其他的用于提供特定于 x86 的功能 , 这些功能对于性能非常重要 , 因此不能用微指令序列来合成 。 但是这些微指令仍然遵循基本的 RISC 原则:简单的寄存器到寄存器操作 , 对寄存器指定符和其他字段进行固定位置编码 , 并且每个操作不多于一个内存引用 。 因此我们称它们为 RISC 操作 , 或简称为 ROPs 。 这种简单、通用的特性为实现更复杂的 x86 操作提供了灵活性 , 从而有利于保持执行逻辑相对简单 。
RISC 微架构最关键的一点是 x86 指令集的复杂性止于解码器 , 并且在很大程度上对乱序执行内核是透明的 。 这种方法只需要很少的额外控制复杂度 , 而不需要乱序的 RISC 执行来实现乱序的 x86 执行 。 任务切换的 ROP 序列看起来并不比简单指令串的 ROP 序列复杂 。 执行内核的复杂性被有效地从架构的复杂性中分离出来 , 而不是复合起来的 。
Christie 并没有混淆 ISA 与 CPU 物理实现细节之间的区别 。 他认为物理实现本身在一些重要的方面是 RISC 式的 。 K5 重用了 AMD 为其 Am29000 系列 RISC CPU 开发的执行后端部分 , 它实现了一个比原生 x86 ISA 更类似于 RISC 的内部指令集 。 在此期间 , NexGen 和 AMD 引用的 RISC 式技术参考了数据缓存、pipeline 和超标量架构等参考概念 。
这些想法都不是严格的 RISC , 但它们都是首先在 RISC CPU 中首次亮相的 , 将这些功能作为「类 RISC」进行营销是有道理的 。
这些功能与 RISC 的相关程度以及 x86 CPU 是否解码 RISC 样式指令 , 取决于选择的框架标准 。 这一争论比奔腾 Pro 还大 , 即使 P6 是与乱序执行引擎等技术发展最相关的微架构 。 不同公司的工程师都有自己的看法 。
现代 x86 CPU 的压力

推荐阅读