精簡指令集計算機

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
(重新導向自精简指令集
一顆主要用於路由器Conexant ARM處理器
DEC Alpha AXP 21064 處理器在Windows NT 4.0 SP6之前微軟都還支援
IBM PowerPC 601處理器用於PowerMac

精簡指令集計算機(英語:Reduced Instruction Set Computer縮寫RISC)或簡譯為精簡指令集,是計算機中央處理器的一種設計模式。這種設計思路可以想像成是一家模組化的組裝工廠,對指令數目和尋址方式都做了精簡,使其實現更容易,指令並行執行程度更好,編譯器的效率更高。目前常見的精簡指令集微處理器包括DEC AlphaARC英語ARC (processor)ARMAVRMIPSPA-RISCPower ISA(包括PowerPCPowerXCell)、RISC-VSPARC等。

歷史[編輯]

精簡指令集的名稱最早來自1980年大衛·帕特森加州大學柏克萊分校主持的Berkeley RISC英語Berkeley RISC計劃。但在他之前,已經有人提出類似的設計理念。由約翰·科克主持,在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的性能優劣有大量持續不斷的爭論。

提升中央處理器性能的方法[編輯]

精簡指令集設計中常見的特徵:

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

參考[編輯]