精简指令集计算机

精简指令集计算机（，缩写：RISC）或简译为精简指令集，是计算机中央處理器的一种设计模式。这种设计思路可以想像成是一家模組化的組裝工廠，对指令数目和寻址方式都做了精简，使其实现更容易，指令并行执行程度更好，编译器的效率更高。目前常見的精簡指令集微處理器包括DEC Alpha、ARC、ARM、AVR、MIPS、PA-RISC、Power ISA（包括PowerPC、PowerXCell）、RISC-V和SPARC等。

历史
精簡指令集的名稱最早來自1980年大衛·帕特森在加州大學柏克萊分校主持的計划。但在他之前，已經有人提出類似的設計理念。由約翰·科克主持，在1975年開始，1980年完成的IBM 801计划，可能是第一個使用精簡指令集理念來設計的系統。

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

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

实际上在后来的发展中，RISC与CISC（複雜指令集）在競爭的过程中相互学习，现在的RISC指令集也达到数百条，运行周期也不再固定。虽然如此，RISC设计的根本原则——针对流水线化的处理器优化——没有改变，而且還在遵循這種原則的基礎上發展出RISC的一個並行化變種VLIW（包括Intel EPIC），就是將簡短而長度統一的精簡指令組合出超長指令，每次執行一條超長指令，等於並行執行多條短指令。

另一方面，目前最常见的複雜指令集x86 CPU，虽然指令集是CISC的，但因對常用的簡單指令會以硬體線路控制盡全力加速，不常用的複雜指令則交由微碼循序器「慢慢解碼、慢慢跑」，因而有「RISCy x86」之稱。

 精简指令集之前的設計原理 
在早期的计算机业界，編譯器技術並不發達，程式多半以機器語言或汇编語言完成。為了便於編寫程式，電腦架構師设计出越來越複雜的指令，可以直接对应高级程式語言的高级功能。當時的看法是硬件比編譯器更容易设计，所以结构的复杂性在硬件这端。

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

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

微處理器只有少量寄存器的兩個原因是：
 寄存器每一个比特位都比外部内存贵。以當時的積體電路技術水準，大量寄存器對晶片或電路板而言是难以承受的。
 一旦具有大數量的寄存器，相关的指令字（opcode）將会需要更多的比特位（使用宝贵的RAM）来定位寄存器。

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

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

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

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

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

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

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

 提升中央處理器性能的方法 
 增加寄存器的大小
 增進內部的平行性
 增加高速缓存大小
 增加核心時脈的速度，但是此舉便會導致IC從電晶體取電的功率增加，因此要遵照IC的狀況予以增加核心時脈才行，此動作類似於超頻。
 加入其它功能，如I/O和計時器
 加入向量處理器（SIMD），如VISAltiVec、SSE（Streaming SIMD Extensions）
 避免附加。使朝向省電化（battery-constrained）或小型化的應用
 集成多个核心
 硬件多线程技术

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

 参考 
 复杂指令集
 顯式並行指令運算

Category:電腦架構
Category:IEEE里程碑
*