计算机组成结构—CISC和RISC
计算机组成结构—CISC和RISC
计算机的指令集架构(ISA)主要分为CISC(复杂指令集计算机)和RISC(精简指令集计算机)两大类。CISC通过设置更多、更复杂的指令来实现更多功能,而RISC则通过减少指令种类、简化指令功能来提升运行速度。本文将详细介绍这两种架构的特点、优缺点及其比较。
最早的 CPU 出现在 20 世纪 70 年代,当时的集成电路技术制约了一块芯片上能实现什么,所以它们的指令集都非常有限;以 8 位 CPU 为主,Intel 8080、MOS 6502、MC 6800 就是其中的代表。之后随着超大规模集成电路技术的发展,微处理器发展得非常迅速,指令集也越来越复杂;并且出现了将处理器、RAM、ROM 和 I/O接口等计算机基本部件集成到一个芯片上的微控制器(MCU),这就是单片机,Intel 的 MCS-51 系列就是其中的代表。
现代计算机按照处理器的指令集架构(Instruction Set Architecture,ISA)主要可以分为两种:
- CISC(Complex Instruction Set Computer,复杂指令集计算机)
- RISC(Reduced Instruction Set Computer,精简指令集计算机)
面对越来越多的需求,计算机需要完成的任务越来越重,对计算机性能的要求也越来越高。关于如何提升计算机性能,两种指令集架构代表了不同的思路。
一、CISC
CISC通过设置更多、更复杂的指令来实现更多的功能,这样就可以减少运行程序所需的指令数,依靠硬件提升运行速度。
这种架构的代表公司就是 Intel,它在 1978 年推出了著名的 16 位微处理器 8086,此后又推出了 80286 和 32 位的 80386、80486 以及 奔腾(Pentium)处理器,因而这一系列的处理器都被称为 “x86 架构”。如今已经进入 64 位时代,这一家族采用的指令集架构称为 “ x86-64 ” 或简称 “ x64 ”,代表就是酷睿(Core)处理器。AMD 公司生产的 CPU 主要也是 x86/64 架构。
CISC 的主要特点如下:
- 指令数目庞大且复杂。Intel 描述全套指令的文档有 1200 多页;
- 指令字长是可变的。x86-64 的指令长度可以是 1 ~ 15 个字节;
- 每个指令可以执行若干简单操作,例如存储器读取、存储、计算操作等,因此很多指令都能进行访存操作,可以对内存中的操作数直接进行算术和逻辑运算;
- 寻址方式丰富。内存中操作数的指示符可以有各种组合,包括偏移量、基址和变址寄存器以及伸缩因子;
- 逻辑控制电路复杂,寄存器较少,使用主存中的软堆栈来实现堆栈寻址;
- 对机器级程序来说,实现细节是不可见的,全部由硬件完成。
因此,CISC 有着非常明显的优缺点。
优点:
运行程序所需的指令数少,有效提升性能;
更加依赖硬件实现功能,编写软件代码较为简单。
缺点:
指令执行时间差异很大,复杂的指令需要若干时钟周期才可以实现;
指令的使用频率差异很大,很多复杂指令的使用率并不高;
有些指令非常复杂,以至于无法通过组合逻辑电路直接完成,所以需要采用微程序控制;
编译器能做的优化有限。
二、RISC
庞大的指令系统设计起来非常复杂,研制周期变得很长,成本耗费巨大。而且对传统 CISC 的测试发现,典型程序中 80% 的语句只用到了系统中 20% 的指令,这被称为 2-8 规律。
于是人们开始了对指令系统合理性的研究,试图通过 “做减法” 来从另一个角度提升效率,这样就产生了 RISC。
RISC 的主要思路是减少指令种类、简化指令功能,通过降低单个指令的执行周期数(CPI)来提高 MIPS,从而提升运行速度。
由于简化了指令集,CPU 芯片就不需要太大的空间来制作逻辑控制电路,而可以加入更多的寄存器,这样就可以让数据运算更快。基于这样的想法,IBM 公司开发出了第一代 RISC 架构计算机;与此同时,斯坦福大学的 RISC 研究课题 MIPS,考虑到了对处理器流水线的优化,研究结果转化成了后来 MIPS 公司的 R 系列产品。
1985 年,Acom 公司设计出了基于 RISC 指令集的 32 位计算机,简称 ARM(Acorn RISC Machine)。1990 年,Acom 改组为 ARM 公司,专门研发芯片架构、出售芯片技术授权,它的指令集架构就被称为 “ARM 架构”。由于 ARM 架构低功耗、低成本的特点,在嵌入式处理器中得到了非常广泛的应用:智能手机、智能汽车、智能家居等各种领域都可以看到 ARM 架构处理器的身影。
如今 RISC 架构已经发展到第五代,称为RISC-V,这是一个完全开源的指令集架构,采用宽松的 BSD 协议,企业可以完全自由免费使用,同时也容许企业添加自有指令集进行拓展。
RISC 的主要特点有:
指令数量比 CISC 要少得多;只使用频度较高的简单指令,通过简单指令的组合实现复杂指令功能。早期的 RISC 指令通常少于 100 个;
指令字长是固定的。早期的 RISC 通常将所有的指令都编码为 4 个字节;
允许访存的指令只有 load 和 store,这被称为load / store 体系结构。因此只能对寄存器中的操作数进行算术和逻辑运算,不能直接对内存中的操作数进行运算;
寻址方式简单,一般所有的 load / store 都通过寄存器中的内容和指令字段中的偏移量来实现;
逻辑控制电路比较简单,有大量的通用寄存器,可以使用硬堆栈来实现堆栈寻址。
对机器级程序来说,实现细节是可见的。因此编译器需要在一些约束条件下进行性能优化;
因此,RISC 的优缺点和 CISC 相比也是非常明显的。优点:
CPI 大大降低,并且通过大量寄存器减少了访存次数,有效提升性能;
采用流水线技术,大部分指令在一个时钟周期完成;采用超标量和超流水线技术,可以使每条指令的平均执行时间小于一个时钟周期;
控制器便于设计和实现,采用组合逻辑控制(硬布线),不用微程序控制;
可以利用编译器对程序性能进行优化。
低功耗、低成本
缺点:
指令的种类和寻址方式都比较少,编写软件比较麻烦;有些早期的 RISC 机器甚至没有乘法指令,需要用一系列加法来实现;
对编译器的要求比较高,编译器采用不同的优化策略可以显著改变运行性能;
不同指令系统间兼容性差。
三、CISC和RISC的比较
下表中详细列出了 CISC 和 RISC 的特点对比:
对比项目 | CISC | RISC |
---|---|---|
指令数量 | 多 | 较少 |
指令字长 | 不固定 | 固定 |
可访存指令 | 无限制 | Load / Store |
各种指令使用频率 | 相差很大 | 相差不大 |
各种指令执行时间 | 相差较大 | 绝大多数在一个时钟周期内完成 |
寻址方式 | 多 | 少 |
通用寄存器数量 | 较少 | 多 |
堆栈寻址 | 软堆栈 | 硬堆栈 |
控制方式 | 微程序控制 | 组合逻辑控制(硬布线) |
机器级程序实现细节 | 不可见 | 可见 |
编译器 | 难以优化 | 需要优化 |
指令流水线 | 可以通过一定的方式实现 | 必须实现 |
功耗 | 较高 | 较低 |
兼容性 | 较好 | 较差 |
主要应用领域 | PC 和服务器 | 嵌入式设备 |
如今,RISC 机器在发展进化的过程中,逐渐引入了更多的指令;而 CISC 机器也会充分利用高性能的流水线结构。商品化的计算机一般都会将 RISC 和 CISC 结合起来,取长补短。