复杂指令集和精简指令集

精简指令集
去掉复杂指令代之以一些简单的指令,有了简单指令CPU内部的微代码也不需要了,没有了微代码这层中间抽象,编译器生成的机器指令对CPU的控制力大大增强,有什么问题让写编译器的那帮家伙修复就好了,显然调试编译器这种软件要比调试CPU这种硬件要简单很多。注意,精简指令集思想不是说指令集中指令的数量变少,而是说一条指令背后代表的动作更简单了。
精简指令集的另一个特点就是编译器对CPU的控制力更强。
在复杂指令集下,CPU会对编译器隐藏机器指令的执行细节,就像微代码一样,编译器对此无能为力。
而在精简指令集下CPU内部的操作细节暴露给编译器,编译器可以对其进行控制
流水线技术是初期精简指令集的杀手锏。
精简指令集的设计者们尝试让每条指令执行的时间都差不多一样,尽可能让流水线更高效的处理机器指令,而这也是为什么在精简指令集中存在Load和Store两条访问内存指令的原因。
由于复杂指令集指令与指令之间差异较大,执行时间参差不齐,没办法很好的以流水线的方式高效处理机器指令(后续我们会看到复杂指令集会改善这一点)。
第一代RISC处理器即为全流水线设计,典型的就是五级流水线,大概1到2个时钟周期就能执行一条指令,而这一时期的CISC大概5到10个时钟周期才能执行一条指令,尽管RISC架构下编译出的程序需要更多指令,但RISC精简的设计使得RISC架构下的CPU更紧凑,消耗更少的晶体管(无需微代码),因此带来更高的主频,这使得RISC架构下的CPU完成相同的任务速度优于CISC。

复杂指令集
复杂指令集的一个主要目的就是让尽可能少的机器指令来完成尽可能多的任务,在这种思想下CPU需要在从内存中拿到一条机器指令后“自己去完成一系列的操作”,这部分操作对外不可见。
复杂指令并不是说“MULT A B”这一行指令本身有多复杂,而是其背后所代表的任务复杂。
X86指令集(属于CISC)先解码成类似精简指令集(RISC)的微操作(microoperations),然后采用RISC内核执行。现在的英特尔处理器,相当于用复杂指令集(CISC)这张饺子皮,包着精简指令集(RISC)的馅儿。

参考:[https://zhuanlan.zhihu.com/p/384606064]

posted @   sahara-随笔  阅读(764)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示