精简指令集

维基百科,自由的百科全书

跳转到: 导航, 搜索

精简指令集,是计算机中央處理器的一种设计模式,也被称为RISC(Reduced Instruction Set Computing 的缩写)。这种设计思路对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。目前常見的精簡指令集微處理器包括DEC AlphaARCARMAVRMIPSPA-RISCPower Architecture(包括PowerPC)和SPARC等。

这种设计思路最早的产生缘自于有人发现,尽管传统处理器设计了许多特性让代码编写更加便捷,但这些复杂特性需要几个指令周期才能实现,并且常常不被运行程序所采用。此外,处理器和主内存之间运行速度的差别也变得越来越大。在这些因素促使下,出现了一系列新技术,使处理器的指令得以流水执行,同时降低处理器访问内存的次数。

早期,这种指令集的特点是指令数目少,每条指令都采用标准字长、执行时间短、中央處理器的实现细节对于机器级程序是可见的等等。

实际上在后来的发展中,RISC与CISC在競爭的过程中相互学习,现在的RISC指令集也达到数百条,运行周期也不再固定。虽然如此,RISC设计的根本原则--针对流水线化的处理器优化--没有改变。实际上,目前最常见的x86指令集的CPU,虽然指令集是CISC的x86,但是较新的处理器都已经是以RISC核心为基础,只是再在外面辅以硬件解码器,将CISC指令转成RISC指令;这个过程对程序员透明。

目录

[编辑] RISC之前的設計原理

在早期的计算机业界,編譯器技術尚未出現。程式是以機器語言汇编語言完成的。為了便於編寫程式,電腦架構師设计出越來越複雜的指令,可以直接对应高级程式語言的高级功能。當時的看法是硬件比編譯器更容易设计,所以结构的复杂性在硬件这端。

加速这种複雜化的另一因素是缺乏大容量的内存。在内存容量受限的应用中,具有極高訊息密度的程式更加实用。當时内存中的每一字节都很宝貴,例如只有幾千个字节来儲存某個完整系統。它使產業界倾向于高度編碼的指令、長度不等的指令、多操作数的指令,以及把数据的搬移與計算合并在一起的指令。在當時看来,相对于使指令更容易解码,指令的编码打包問題遠为重要。

还有一个因素是当时的内存不仅容量少,而且速度很慢,使用的都是磁性技術。凭借高密度打包的指令,存取慢速資源的頻率可以降低。

微處理器只有少量寄存器的兩個原因是︰

  • 寄存器每一个比特位都比外部内存贵。以當時的積體電路技術水準,大量寄存器對晶片或電路板而言是难以承受的。
  • 一旦具有大數量的寄存器,相关的指令字(opcode)將会需要更多的比特位(使用宝贵的RAM)来定位寄存器。

基於上述原因,微處理器設計師尽可能使指令做更多的工作。這導致单個指令做全部的工作: 讀入兩個加数,相加,並将计算结果直接写入内存;另一个例子是從内存讀取兩個數据,但計算結果儲存在寄存器内;第三个例子是將從内存和寄存器各讀取一個數据,其结果再次写入内存;以此類推。這种微處理器設計原理,在精简指令集(RISC)的思路出现后,最終被人称为複雜指令集(CISC)。

當時设计的一个通常目標是为每个指令都提供所有的尋址模式,稱為「正交性」。這给微處理器增加了一些複雜性,但理論上每個可能的命令均可單獨调整。相对于使用更简单的指令,這樣做能够使设计速度更快。

這類設計最終可以由功率譜的兩端來表述,6502在一端,VAX在功率譜的另一端。單價25美元的1MHz 6502晶片只有一个通用暫存器,但它非常精簡的單週期内存访问接口允许一個字节宽度的操作,其效率和使用更高时钟频率的設計一致,例如主频4MHz的Zilog Z80使用相同慢速的記憶晶片(大約近似 300ns)。另一方面,VAX则是一种小型机,它的每个CPU至少需要三个机架来放置。其显著特点是,它支持的内存存取模式数目多得惊人,并且每条指令都可以使用任一种模式。

[编辑] RISC設計原理

70年代后期,IBM(以及其它類似企业组织)的研究人員顯示,大多数正交尋址模式基本上已被程式員所忽略。這是編譯器的使用逐渐增多而汇编語言的使用相对减少所导致的。值得注意的是,由于编写编译器的难度很大,当时编译器并不能充分利用CISC处理器所提供的各种特性。尽管如此,广泛应用编译器的趋势已然很明显,从而使得正交寻址模式变得更加无用。

这些复杂操作很少被使用。事实上,相比用更精简的一系列指令来完成同一个任务,用单一复杂指令甚至会更慢。这看上去有些自相矛盾,却源自于微处理器设计者所花的时间和精力:设计者一般没有时间去调整每一条可能被用到的指令,通常他们只优化那些常用的指令。一个恶名昭著的例子是VAX的INDEX指令,执行它比执行一个循环还慢。

几乎就在同时,微处理器开始比内存运行得更快。即便是在七十年代末,人们也已经认识到这种不一致性至少会在下一个十年继续增加,到时微处理器将会比内存的速度快上百倍。很明显,需要有更多寄存器(以及后来的缓存)来支持更高频率的操作。为此,必须降低微处理器原本的复杂度,以节省出空间给新增的寄存器和缓存。

不過RISC也有它的缺點。當需要一系列指令用來完成非常簡單的程式時,從記憶體讀入的指令總數會变多,因此也需要更多时间。在当时的工业和设计领域,對RISC的性能優劣有大量持续不断的爭論。

[编辑] 提升中央處理器性能的方法

  • 增加寄存器的大小
  • 增進內部的平行性
  • 增加高速缓存大小
  • 加入其它功能,如I/O和計時器
  • 加入向量處理器(SIMD),如VISAltiVecSSE(Streaming SIMD Extensions)
  • 避免附加。使朝向省電化(battery-constrained)或小型化的應用
  • 集成多个核心
  • 硬件多线程技术

RISC設計中常見的特徵︰

  • 統一指令編碼(例如,所有指令中的op-code永遠位於同樣的位元位置、等長指令),可快速解譯︰
  • 泛用的寄存器,所有寄存器可用於所有內容,以及編譯器設計的單純化(不過寄存器中區分了整數浮點數);
  • 單純的尋址模式(複雜尋址模式以簡單計算指令序列取代);
  • 硬體中支援少數資料型別(例如,一些CISC電腦中存有處理位元組字串的指令。這在RISC電腦中不太可能出現)。

[编辑] 参考

例如:Intel奔腾系列中央處理器属于复杂指令集結構,而IBM的PowerPC 970(用于苹果机Power Mac G5)中央處理器属于精简指令集結構。
个人工具