复杂指令集和精简指令集

本文探讨了CISC(复杂指令集)和RISC(精简指令集)在计算机架构中的区别,强调了RISC通过减少CPI来提升性能,以及微指令架构如何通过L0Cache优化指令译码,减少功耗。
摘要由CSDN通过智能技术生成

前言

大家好,我是jiantaoyab,这是我作为学习笔记的第14篇,今天我们来研究一下复杂指令集和精简指令集之间的对比、差异。

CISC VS RISC

image-20240314110915360

  • RISC 的指令是固定长度的,CISC 的指令是可变长度的。
  • RISC 的指令集里的指令数少,而且单个指令只完成简单的功能,所以被称为“精简”。
  • CISC 里的指令数多,为了节约内存,直接在硬件层面能够完成复杂的功能,所以被称为“复杂”。
  • RISC 的通过减少 CPI 来提升性能,而 CISC 通过减少需要的指令数来提升性能。

介绍

在早期的计算机中,所有的 CPU 其实都是 CISC,对于存储空间小,运行慢的计算机来说,每一个字节乃至每一个比特都特别重要,因为想要用尽可能少的内存空间,存储尽量多的指令。

所以,CPU 指令集的设计,需要仔细考虑硬件限制。为了性能考虑,很多功能都直接通过硬件电路来完成。为了少用内存,指令的长度也是可变的。就像算法和数据结构里的赫夫曼编码一样,常用的指令要短一些,不常用的指令可以长一些。

随着发展,人们发现,实际在 CPU 运行的程序里,80% 的时间都是在使用 20% 的简单指令,基于这个想法的RISC 类型的 CPU 开始快速蓬勃发展。

在 RISC 架构里面,CPU 选择把指令“精简”到 20% 的简单指令。而原先的复杂指令,则通过用简单指令组合起来来实现,让软件来实现硬件的功能。

RISC 的 CPU 里完成指令的电路变得简单了,于是也就腾出了更多的空间。这个空间,常常被拿来放通用寄存器。因为 RISC 完成同样的功能,执行的指令数量要比 CISC 多,所以,如果需要反复从内存里面读取指令或者数据到寄存器里来,那么很多时间就会花在访问内存上。于是,RISC 架构的 CPU 往往就有更多的通用寄存器。

除了寄存器这样的存储空间,RISC 的 CPU 也可以把更多的晶体管,用来实现更好的分支预测等相关功能,进一步去提升 CPU 实际的执行效率。

CISC 的架构,其实就是通过优化指令数,来减少 CPU 的执行时间。

而 RISC 的架构,其实是在优化 CPI。因为指令比较简单,需要的时钟周期就比较少。

微指令结构

image-20240314111200543

微指令架构的 CPU 里面,编译器编译出来的机器码和汇编代码并没有发生什么变化,但在指令译码的阶段,指令译码器“翻译”出来的,不再是某一条 CPU 指令。

译码器会把一条机器码,“翻译”成好几条“微指令”。这里的一条条微指令,就不再是 CISC 风格的了,而是变成了固定长度的 RISC 风格的了,这些 RISC 风格的微指令,会被放到一个微指令缓冲区里面,然后再从缓冲区里面,分发给到后面的超标量,并且是乱序执行的流水线架构里面。

不过这个流水线架构里面接受的,就不是复杂的指令,而是精简的指令了。在这个架构里,我们的指令译码器相当于变成了设计模式里的一个“适配器”(Adaptor)。这个适配器,填平了 CISC 和 RISC 之间的指令差异。

怎么解决浪费在指令译码器上的时间呢?

加一层 L0 Cache。这个 Cache 保存的就是指令译码器把 CISC 的指令“翻译”成 RISC 的微指令的结果。

于是,在大部分情况下,CPU 都可以从 Cache 里面拿到译码结果,而不需要让译码器去进行实际的译码操作。这样不仅优化了性能,因为译码器的晶体管开关动作变少了,还减少了功耗。

不需要让译码器去进行实际的译码操作。这样不仅优化了性能,因为译码器的晶体管开关动作变少了,还减少了功耗。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值