什么是精简指令集
精简指令集,是计算机中央处理器的一种设计模式,也被称为RISC(Reduced Instruction Set Computer的缩写)。这种设计思路对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。常用的精简指令集微处理器包括DECAlpha、ARC、ARM、AVR、MIPS、PA-RISC、PowerArchitecture(包括PowerPC)和SPARC等。这种设计思路最早的产生缘自于有人发现,尽管传统处理器设计了许多特性让代码编写更加便捷,但这些复杂特性需要几个指令周期才能实现,并且常常不被运行程序所采用。此外,处理器和主内存之间运行速度的差别也变得越来越大。在这些因素促使下,出现了一系列新技术,使处理器的指令得以流水执行,同时降低处理器访问内存的次数。早期,这种指令集的特点是指令数目少,每条指令都采用标准字长、执行时间短、中央处理器的实现细节对于机器级程序是可见的。
精简指令集发展背景
在早期的计算机业中,编译器技术尚未出现。程序是以机器语言或汇编语言完成的。为了便于编写程序,计算机架构师造出越来越复杂的指令,可以高阶程序语言直接陈述高阶功能。当时的看法是硬件比编译器更易设计,所以复杂的东西就加进硬件了。
加速复杂化的其它因素是缺乏大内存。内存小的环境中,具有极高讯息密度的程序较有利。当内存中的每一字节如此珍贵,例如储存某个完整系统只需几千字节,它使产业移向高度编码的指令、长度不等的指令、执行多个操作的指令,和执行数据传输与计算的指令。当时指令封包问题远比易解的指令重要。
那时使用磁性技术,内存不仅小,而且很慢。这是维持极高讯息密度的其它原因。借着具有极高讯息密度封包,当必须存取慢速资源时可以降低频率。
CPU只有少数缓存器的两个原因︰
CPU内部缓存器远贵于外部内存。以当时的集成电路技术水准,大缓存器集对芯片或电路板区域只是多余的浪费。
具有大数量的缓存器将需要大数量的指令位(使用珍贵的RAM)以做为缓存器指定器。
基于上述原因,CPU设计师试着令指令尽可能做更多的工作。这导致一个指令将做全部的工作︰读入两个数字,相加,并且直接在内存储存计算结果。其它版本将从内存读取两个数字,但计算结果储存在缓存器。另一个版本将从内存和缓存器各读一个数字,并再次存入内存。以此类推。这种处理器设计原理最终成为复杂指令集(CISC)。
当时的目标是给所有的指令提供所有的寻址模式,此称为「正交性」。这在 CPU 上导致了一些复杂性,但就理论上每个可能的命令都可以单独的调试(调用,be tuned),这样使得程序员能够比用简单的命令来得更快速。
这类的设计最终可以由光谱的两端来表达, 6502 在光谱的一端,而 VAX 在光谱的另一端。单价25美元的 1MHz 6502 芯片只有单一的通用缓存器, 但它的极精简的单周期内存界面(single-cycle memory interface)让一个位的操作效能和更高频率设计几乎相同,例如 4MHz Zilog Z80 在使用相同慢速的记忆芯片下(大约近似 300ns)。
发展分歧
计算机指令系统的优化发展过程中,出现过两个截然不同的优化方向:CISC技术和RISC技术。CISC是指复杂指令系统计算机(Complex Instruction Set Computer);RISC是指精减指令系统计算机(Reduced Instruction Set Computer)。这里的计算机指令系统指的是计算机的最低层的机器指令,也就是CPU能够直接识别的指令。随着计算机系统的复杂,要求计算机指令系统的构造能使计算机的整体性能更快更稳定。最初,人们采用的优化方法是通过设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的指令系统实现,以此来提高计算机的执行速度,这种计算机系统就被称为复杂指令系统计算机,即Complex Instruction Set Computer,简称CISC。另一种优化方法是在20世纪80年代才发展起来的,其基本思想是尽量简化计算机指令功能,只保留那些功能简单、能在一个节拍内执行完成的指令,而把较复杂的功能用一段子程序来实现,这种计算机系统就被称为精简指令系统计算机.即Reduced Instruction Set Computer,简称RISC。RISC技术的精华就是通过简化计算机指令功能,使指令的平均执行周期减少,从而提高计算机的工作主频,同时大量使用通用寄存器来提高子程序执行的速度
提出原由
IBM公司设在纽约Yorktown的JhomasI.Wason研究中心于1975年组织力量研究指令系统的合理性问题.因为当时已感到,日趋庞杂的指令系统不但不易实现.而且还可能降低系统性能.1979年以帕特逊教授为首的一批科学家也开始在美国加州大学伯克莱分校开展这一研究.结果表明,CISC存在许多缺点.首先.在这种计算机中.各种指令的使用率相差悬殊:一个典型程序的运算过程所使用的80%指令.只占一个处理器指令系统的20%.事实上最频繁使用的指令是取、存和加这些最简单的指令.这样-来,长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器.同时.复杂的指令系统必然带来结构的复杂性.这不但增加了设计的时间与成本还容易造成设计失误.此外.尽管VLSI技术现在已达到很高的水平,但也很难把CISC的全部硬件做在一个芯片上,这也妨碍单片计算机的发展.在CISC中,许多复杂指令需要极复杂的操作,这类指令多数是某种高级语言的直接翻版,因而通用性差.由于采用二级的微码执行方式,它也降低那些被频繁调用的简单指令系统的运行速度.因而.针对CISC的这些弊病.帕特逊等人提出了精简指令的设想即指令系统应当只包含那些使用频率很高的少量指令.并提供一些必要的指令以支持操作系统和高级语言.按照这个原则发展而成的计算机被称为精简指令集计算机(ReducedInstructionSetComputer-RISC)结构.简称RISC.
精简指令集优势
RISC和CISC是设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同,因此,在很多方面差异很大,它们主要有:
(1)指令系统:RISC设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效。对不常用的功能,常通过组合指令来完成。因此,在RISC机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而CISC计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。
(2)存储器操作:RISC对存储器操作有限制,使控制简单化;而CISC机器的存储器操作指令多,操作直接。
(3)程序:RISC汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计;而CISC汇编语言程序编程相对简单,科学计算及复杂操作的程序设计相对容易,效率较高。
(4)中断:RISC机器在一条指令执行的适当地方可以响应中断,但是相比CISC指令执行的时间短,所以中断响应及时;而CISC机器是在一条指令执行结束后响应中断。
(5)CPU:RISC CPU包含有较少的单元电路,因而面积小、功耗低;而CISCCPU包含有丰富的电路单元,因而功能强、面积大、功耗大。
(6)设计周期:RISC微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术;CISC微处理器结构复杂,设计周期长。
(7)用户使用:RISC微处理器结构简单,指令规整,性能容易把握,易学易用;CISC微处理器结构复杂,功能强大,实现特殊功能容易。
(8)应用范围:由于RISC指令系统的确定与特定的应用领域有关,故RISC机器更适合于专用机;而CISC机器则更适合于通用机。
精简指令集特征
统一指令编码(例如,所有指令中的op-code永远位于同样的位位置、等长指令),可快速解译︰
泛用的缓存器,所有缓存器可用于所有内容,以及编译器设计的单纯化(不过缓存器中区分了整数和浮点数);
单纯的寻址模式(复杂寻址模式以简单计算指令序列取代);
硬件中支持少数数据型别(例如,一些CISC计算机中存有处理字节字符串的指令。这在RISC计算机中不太可能出现)。
RISC设计上同时也有哈佛内存模块特色,凡指令流和数据流在概念上分开;这意味着更改代码存在的内存地址对处理器执行过的指令没有影响(因为CPU有着独立的指令和数据缓存),至少在特殊的同步指令发出前。在另一面,这允许指令缓存和数据缓存同时被访问,通常能改进运行效率。
许多早期的RISC设计同样共享着不好的副作用——转移延时槽,转移延时槽是指一个跳转或转移指令之后的指令空间。无论转移是否发生,空间中的指令将被执行(或者说是转移效果被延迟)。这些指令让CPU的算术和逻辑单元(ALU)繁忙比通常执行转移所需更多的时间。现在转移延时槽被认为是实现特定RISC设计的副作用,现代的RISC设计通常避免了这个问题(如PowerPC,最近的SPARC版本,MIPS)。
精简指令集结构特点
RISC是简化指令集计算机的简略缩写,其风格是强调计算机结构的简单性和高效性。RISC设计是从足够的不可缺少的指令集开始的。它的速度比那些具有传统复杂指令组计算机结构的机器快得多,而且RISC机由于其较简洁的设计,较易使用,故具有更短的研制开发周期。RISC结构一般具有如下的一些特点:
①单周期的执行:它统一用单周期指令。从根本上克服了CISC指令周期数有长有短,造成运行中偶发性不确定,致使运行失常的问题。
②采用高效的流水线操作:使指令在流水线中并行地操作,从而提高处理数据和指令的速度。
③无微代码的硬连线控制:微代码的使用会增加复杂性和每条指令的执行周期。
④指令格式的规格化和简单化:为与流水线结构相适应且提高流水线的效率,指令的格式必须趋于简单和固定的规式。比如指令采用16位或32位的固定的长度,并且指令中的操作码字段、操作数字段都尽可能具有统一的格式。此外,尽量减少寻址方式,从而使硬件逻辑部件简化且缩短译码时间,同时也提高了机器执行效率和可靠性。
⑤采用面向寄存器堆的指令:RISC结构采用大量的寄存器——寄存器操作指令,使指令系统更为精简。控制部件更为简化,指令执行速度大大提高。由于VLSI技术的迅速发展,使得在一个芯片上做大量的寄存器成为可能。这也促成了RISC结构的实现。
⑥采用装入/存储指令结构:在CISC结构中。大量设置存储器——存储器操作指令,频繁地访问内存,将会使执行速度降低。RISC结构的指令系统中,只有装入/存储指令可以访问内存,而其它指令均在寄存器之间对数据进行处理。用装入指令从内存中将数据取出,送到寄存器;在寄存器之间对数据进行快速处理,并将它暂存在那里,以便再有需要时。不必再次访问内存。在适当的时候,使用一条存储指令再将这个数据送回内存。采用这种方法可以提高指令执行的速度。
⑦注重编译的优化,力求有效地支撑高级语言程序。
通常使用的单片机中,MCS一51系列的单片机属于CISC的体系结构;AVR系列的单片机则属于RISC的体系结构。
精简指令集发展前景
鉴于RISC的设计特点以及其无可比拟的优点,RISC体系结构处理器的发展方向:
一是增加处理器的并行性;
二是扩展支持可伸缩并行计算机系统的功能;
三是提高工艺水平。最终RISC与DSP在嵌入式应用中完美融合,密不可分。
RISC微处理器不仅精简了指令系统,采用超标量和超流水线结构;它们的指令数目只有几十条,却大大增强了并行处理能力。如:1987年SunMicrosystem公司推出的SPARC芯片就是一种超标量结构的RISC处理器。而SGI公司推出的MIPS处理器则采用超流水线结构,这些RISC处理器在构建并行精简指令系统多处理机中起着核心的作用。RISC处理器是当今UNIX领域64位多处理机的主流芯片。
性能特点
性能特点一:由于指令集简化后,流水线以及常用指令均可用硬件执行;
性能特点二:采用大量的寄存器,使大部分指令操作都在寄存器之间进行,提高了处理速度;
性能特点三:采用缓存—主机—外存三级存储结构,使取数与存数指令分开执行,使处理器可以完成尽可能多的工作,且不因从存储器存取信息而放慢处理速度。
应用特点
由于RISC处理器指令简单、采用硬布线控制逻辑、处理能力强、速度快,世界上绝大部分UNIX工作站和服务器厂商均采用RISC芯片作CPU用。如原DEC的Alpha21364、IBM的PowerPCG4、HP的PA—8900、SGI的R12000A和SUNMicrosystem公司的UltraSPARC║。
运行特点
RISC芯片的工作频率一般在400MHZ数量级。时钟频率低,功率消耗少,温升也少,机器不易发生故障和老化,提高了系统的可靠性。单一指令周期容纳多部并行操作。在RISC微处理器发展过程中。曾产生了超长指令字(VLIW)微处理器,它使用非常长的指令组合,把许多条指令连在一起,以能并行执行。VLIW处理器的基本模型是标量代码的执行模型,使每个机器周期内有多个操作。有些RISC处理器中也采用少数VLIW指令来提高处理速度。