一文搞懂精简指令集与复杂指令集

时钟周期 机器周期 指令周期

时钟周期:时钟是CPU的动力源,CPU之所以能够快速工作就是由时钟驱动,时钟不停的振荡,CPU就不停的工作。时钟周期是CPU内部衡量时长的最基本单位。

机器周期:也叫CPU周期,规定为CPU访问一次内存所需要的最短时间。这就是说,一条指令的取值阶段(从内存读取)就需要一个机器周期。一个机器周期可能由若干个时钟周期组成。

指令周期:一条指令完成所需要的时间,可能由若干个机器周期组成。

因此,从时间长度来说,指令周期 > 机器周期 > 时钟周期

指令周期 > 机器周期 > 时钟周期

精简指令集与复杂指令集

精简指令集(RISC)与复杂指令集(CISC)是相对于指令执行时长来说的,而不是指令本身的复杂度。精简指令集追求的是在单个机器周期里面完成指令。

举个例子,如果对于"启动汽车"这个功能,复杂指令集可能直接就是一条指令,告诉处理器"启动汽车",那么处理器内部会完成整个启动过程,发出这条复杂指令的人不用关心处理器的内部实现。如果使用精简指令集,就得告诉处理器3条指令:

1 插入钥匙指令
2 点火指令
3 踩油门指令

可以看到,完成同一件事,复杂指令集使用了一条指令,而精简指令集需要3条指令来完成一个复杂动作。

接下来看一个实际的编程例子,对于乘法操作来说,复杂指令集使用一条简单指令MUL来完成:

mul A, B

当处理器看到这样一条指令,内部会做如下操作:

1. 从内存中加载地址A上的数,存放在寄存器中
2. 从内存中夹杂地址B上的数,存放在寄存器中
3. ALU根据寄存器中的值进行乘积
4. 将乘积写回内存

接下来看使用精简指令集如何完成这项工作:

LOAD RA, A ; 从内存读取数据A
LOAD RB, B ; 从内存读取数据B
PROD RA, RB ; 计算两者乘积
STORE A, RA ; 将寄存器中的结果写回内存

虽然从代码量来看,完成同一件事精简指令集占用的空间更多,但是这些指令都很简单,不需要复杂的硬件逻辑来进行解码,可以节约晶体管的数量,处理器就可以更小。

同时,从编译器的角度看,复杂指令集CPU对编译器隐藏了实现细节,编译器能够优化代码的可能性很小,而精简指令集CPU的执行过程都暴露出来,更有利于编译器进行代码优化。

指令集与处理器架构

目前流行的两种指令集:精简指令集与复杂指令集都有与之对应的处理器架构。所谓处理器架构,可以看成是使用一堆硬件电路来完成指令集中的指令,使用相同指令集的处理器,可能会有不同的架构设计。使用精简指令集的架构有:PowerPC架构、ARM架构、MIPS架构;使用复杂指令集的架构有x86架构。


参考链接:
不懂精简指令集还敢说自己是程序员?
https://mp.weixin.qq.com/s/VMDpW67zhJka0DKL8TQHrA


本文转自:白羊哈哈,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。