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


RISC 和 CISC 的开发融合了吗?
以实现为中心的观点认为 , CISC 和 RISC CPU 已经交互发展了几十年 , 从 1990 年代中期为 x86 CPU 采用「类 RISC」解码方法开始 。
常见的解释是这样的:在 1990 年代初期 , 英特尔和其他 x86 CPU 制造商意识到未来提高 CPU 性能需要的不仅仅是更大的缓存和更快的时钟 。 多家公司决定投资 x86 CPU 微架构 , 以动态重排序他们自己的指令流来提高性能 。 在该过程中 , 原生 x86 指令被送入 x86 解码器 , 并在执行前转换为「类 RISC」微操作 。
二十多年来业界的观点一直是如此 , 但最近这种观点遭到了挑战 。 2020 年 Erik Engheim 写道:「x86 芯片中根本没有 RISC 的内部结构 , 这只是一种营销策略 。 」他还提到了 DeMone 的故事和 P6 微架构背后的首席架构师 Bob Colwell 的一句话 。
P6 微架构是第一个实现乱序执行和原生 x86 到微操作解码引擎的英特尔微架构 。 P6 随奔腾 Pro 发布 , 后来又演变出奔腾 II、奔腾 3 及更高版本 。 它是现代 x86 CPU 的鼻祖 。 因此 , P6 微架构的首席架构师 Bob Colwell 有资格解释上文所述的挑战 , 他说:

英特尔的 x86 在「引擎的外表」下并没有 RISC 引擎 。 它们通过依赖于将 x86 指令映射到机器操作或复杂指令的机器操作序列的解码 / 执行的方案来实现 x86 指令集架构 , 然后这些操作通过微架构找到自己的方式 , 遵守有关数据依赖的各种规则 , 最终确定时序 。
完成这个过程的「微操作」有 100 多比特 , 携带各种复杂特异的信息 , 不能由编译器直接生成 , 且不一定是单周期 。 但最重要的是 , 它们只是一种微架构技巧 , 而 RISC/CISC 是关于指令集架构的 。 微操作的想法不是受 RISC 启发的、「类 RISC」的 , 或者说与 RISC 完全无关 。 而是我们的设计团队找到了一种方法 , 打破了非常复杂的指令集的复杂性 , 也摆脱了竞争型微处理器中存在的限制 。
英特尔并不是首个将 x86 前端解码器与所谓的 RISC 风格后端结合起来的 x86 CPU 制造商 , 被 AMD 收购的 NexGen 同样如此 。 NexGen 5×86 CPU 于 1994 年 3 月首次亮相 , 而奔腾 Pro 直到 1995 年 11 月才推出 。 以下是 NexGen 对其 CPU 的描述:Nx586 处理器是 NexGen 创新以及 RISC86 微架构专利的首次实现 。 后来该公司给出了更多实现细节:RISC86 方法动态地将 x86 指令转化为 RISC86 指令 。 如下图所示 , Nx586 利用了 RISC 性能原理的优势 。 出于 RISC86 环境的限制 , 每个执行单元都要更小更紧凑 。
也许人们依然觉得这只是市场营销的说辞 , 那么让我们再来看下 1996 年的 AMD K5 。 K5 通常被描述为与 AMD 从其 32 位 RISC 微控制器 Am29000 借来的执行后端结和的 x86 前端 。 在查看它的具体框架图之前 , 我们首先把它与最初的英特尔奔腾比较一下 。 奔腾可以说是 CISC x86 进化的顶峰 , 因为它在 x86 CPU 中同时实现了 pipeline 和超标量设计(superscaling) , 但没有将 x86 指令转换为微操作 , 也缺乏乱序执行引擎 。

推荐阅读