【知识点】RISC和在RISC下的会怎样实现

接下来我们用一个例子来看看RISC和CISC的区别。

两个数相乘

如图,是最经典的计算模型。最右边是内存,存储机器指令和数据,最左边是CPU。 CPU内部是寄存器和计算单元ALU。关于CPU的更多信息,请参考《》

内存中的地址A和地址B分别存储两个数字。假设我们要计算这两个数之和,然后将计算结果写回内存地址A。

让我们看看它在 CISC 和 RISC 下是如何实现的。

1,CISC

复杂指令集的主要目的之一是让尽可能少的机器指令完成尽可能多的任务。在这种思路下,CPU需要“完成一系列操作”,这部分操作对外是不可见的。

在这种方法下,CISC中可能有一条叫MULT的机器指令,是乘法的缩写。

CPU执行MULT机器指令时,需要:

从内存中加载地址 A 处的数字并将其存储在寄存器中

地址B处的数字从内存中混合并存储在寄存器中

ALU 根据寄存器中的值进行乘法

将产品写回内存

以上所有操作都可以通过一个命令完成:

MULT A  B

MULT 就是所谓的复杂指令。从这里我们也可以看出,复杂的指令并不是说“MULT A B”这一行指令本身有多复杂,而是它背后的任务的复杂程度。

这条机器指令直接从内存中加载数据。程序员(编写汇编语言或编译器的程序员)根本不会显式地从内存中加载数据。其实这条机器指令和高级语言很相似,我们假设内存地址A的值是变量a,地址B的值是变量b,那么这条机器指令在高层基本上就相当于这句话语言:

a = a * b;

这就是所谓的平滑差异,语义鸿沟8位复杂指令集cpu设计,我们在前面的“”中提到,平滑高级语言和机器指令的差异,让程序员或编译器用最少的量完成任务代码,因为这样会节省程序本身占用的内存空间,要知道在1977年,1MB内存的价格大约是5000美元,省下来就是钱。

因为一条机器指令后面有很多操作,而程序员只是写了一行“MULT A B”,这行指令后面的复杂操作必须由CPU通过硬件直接实现,加重了程序的复杂性CPU硬件本身。度,所需的晶体管数量也更多。

接下来我们看看RISC方法。

2,RISC

相比之下,RISC 更喜欢使用一系列简单的指令来完成一项任务。让我们看看下一条 MULT 指令需要做什么:

从内存中加载地址 A 处的数字并将其存储在寄存器中

地址B处的数字从内存中混合并存储在寄存器中

ALU 根据寄存器中的值进行乘法

将产品写回内存

这些步骤需要 a) 从内存中读取数据; b) 乘法; c) 将数据写入内存,所以RISC下会有相应的LOAD、PROD、STORE指令分别完成这些操作。

Load 指令将数据从内存移动到寄存器; PROD 指令计算两个寄存器中数字的乘积; Store 指令将寄存器中的数据写回内存,因此如果程序员想要执行上述操作,就需要编写这些数据。组装说明:

LOAD RA, ALOAD RB, BPROD RA, RBSTORE A, RA

现在您应该看到,对于相同的任务,在 CISC 下只需要一条机器指令,而在 RISC 下需要四条机器指令。很明显,RISC下的程序本身比CISC占用的空间要大,而这对于直接用汇编语言编写程序的程序员来说是非常不友好的,因为比较麻烦!看看这张图感受一下:

但RISC设计的初衷并不是让程序员直接用汇编语言编写程序,而是把这个任务交给编译器,让编译器生成机器指令。

标准总是一件好事

让我们仔细看看RISC下生成的几条指令:

LOAD RA, ALOAD RB, BPROD RA, RBSTORE A, RA

这些指令非常简单,CPU不需要复杂的硬件逻辑进行解码,因此节省了更多的晶体管,这些节省下来的晶体管可以用于其他功能。

最重要的是,请注意,由于每条指令都很简单,并且执行时间大致相同,因此可以有效地处理机器指令,这是什么技术?

我们在文章中提到“”,这就是著名的流水线技术。

指令管道

流水线是最初精简指令集的杀手。

这里我们还是以汽车(新能源)的生产为例进行介绍。

假设组装汽车需要四个步骤:组装车架、安装发动机、安装电池和检查。

假设每个步骤需要10分钟,如果没有流水线技术,那么生产一辆车的时间是40分钟,而下一辆车只有在第一辆车完全走完后才能进入生产车间这四个步骤。

原来的复杂指令集 CPU 就是这样工作的。

显然这是相当低效的,因为前一辆车在经过最后一步时,前三个步骤:组装车架,安装发动机,安装电池,这三个步骤的工人都处于闲置状态。

CPU 也是如此。效率低的原因是资源没有得到充分利用,这种方法下有些人会偷懒。

但是流水线技术的引入就不同了。当第一辆车还在安装发动机时,下一辆车就可以进入流水线组装车架。采用流水线技术,四个步骤可以同时进行,最大限度地利用资源。

以前生产一辆汽车需要40分钟,但现在有了流水线技术,10分钟就能生产一辆汽车。

请注意,这里的假设是每个步骤需要 10 分钟。如果流水线各个阶段的耗时不同8位复杂指令集cpu设计,会显着影响流水线的处理能力。

如果其中一个步骤,安装电池,需要20分钟,那么在安装电池之前和之后会有10分钟的空闲时间,这显然不能充分利用资源。

精简指令集的设计者当然明白这一点,所以他们尽量让每条指令几乎在同一时间执行,使流水线尽可能高效地处理机器指令,这就是精简指令集的原因。两个内存访问指令Load和Store的原因。

由于复杂指令集指令与指令之间的巨大差异,以及执行时间的不均匀,没有办法以流水线的方式高效处理机器指令(我们稍后会看到复杂指令集会改进这一点)。

第一代RISC处理器是全流水线设计,一般是五级流水线,可以在1到2个时钟周期左右执行一条指令,而这个周期的CISC可以在5到10个时钟周期内执行循环 一条指令,虽然在RISC架构下编译的程序需要更多的指令,但是RISC的流线型设计使得RISC架构下的CPU更紧凑,消耗的晶体管更少(不需要微码),从而带来更高的频率,这使得CPU在 RISC 架构下执行相同任务的速度比 CISC 快。

在流水线技术的加持下,精简指令集设计的CPU开始在性能上横扫复杂指令集的对手。

世界闻名

到 1980 年代中期,精简指令集的商用 CPU 开始出现,到 1980 年代后期,精简指令集设计的 CPU 轻松超越所有传统设计。

到 1987 年,采用 RISC 设计的 MIPS R2000 处理器的性能是采用 CISC 架构 (x86)) 的 Intel i386DX 的两到三倍。

所有其他 CPU 制造商都开始效仿 RISC,积极采用精简指令集设计思想,甚至 MINIX 操作系统(Linus 在大学时使用的同一操作系统)的作者 Andrew Tanenbaum 也早早预测1990 年代:“5 几年内没有人会关心 x86”,x86 基于 CISC。

CISC 迎来了最黑暗的时刻。

CISC下次将如何反击,要知道Inter和AMD(两家x86处理器的知名厂商)的硬件工程师绝非易事。

预知未来会发生什么,请听下一次分解。

总结

CISC中微码设计的复杂性让人们重新思考应该如何设计CPU,RISC的设计理念是基于对执行指令的重新审视而产生的。

在RISC中,每条指令都比较简单,执行时间也比较标准,所以可以高效地使用流水线技术,这些都可以让RISC架构的CPU获得良好的性能。

面对RISC,CISC阵营也开始全面反思如何应对挑战。后续文章会继续这个话题。

希望这篇文章能帮助你理解精简指令集。

关注《码农荒岛求生》

哦,对了,“理解操作系统”已经全面更新了。扫描下方二维码,一键购买全部章节。

之前购买过单章的读者,如果再次购买所有课程,请务必扫描下方二维码添加我的微信账号,我会以现金返还您之前支付总额的两倍.

再次感谢各位读者。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论