1. 程式人生 > >精簡指令集-RISC

精簡指令集-RISC

精簡指令集,計算機CPU的一種設計模式,也被稱為RISC(Reduced Instruction Set Computing 的縮寫)。常見的精簡指令集微處理器包括AVR、PIC、ARM、DEC Alpha、PA-RISC、SPARC、MIPS、Power架構等。

  早期,這種CPU指令集的特點是指令數目少,每條指令都採用標準字長、執行時間短、CPU的實現細節對於機器級程式是可見的等等。

  實際上在後來的發展中,RISC與CISC在爭吵的過程中相互學習,現在的RISC指令集也達到數百條,執行週期也不再固定……雖然如此,RISC設計的根本原則--針對流水線化的處理器優化--沒有改變。

  RISC之前的設計原理

  在早期的計算機業中,編譯器技術尚未出現。程式是以機器語言或組合語言完成的。為了便於編寫程式,計算機架構師造出越來越複雜的指令,可以高階程式語言直接陳述高階功能。當時的看法是硬體比編譯器更易設計,所以複雜的東西就加進硬體了。

  加速複雜化的其它因素是缺乏大記憶體。記憶體小的環境中,具有極高訊息密度的程式較有利。當記憶體中的每一位元組如此珍貴,例如儲存某個完整系統只需幾千位元組,它使產業移向高度編碼的指令、長度不等的指令、執行多個操作的指令,和執行資料傳輸與計算的指令。當時指令封包問題遠比易解的指令重要。

  記憶體不僅小,而且很慢,打從當時使用磁性技術。這是維持極高訊息密度的其它原因。藉著具有極高訊息密度封包,當必須存取慢速資源時可以降低頻率。

  CPU只有少數快取器的兩個原因︰

  CPU內部快取器遠貴於外部記憶體。以當時的積體電路技術水準,大快取器集對晶片或電路板區域只是多餘的浪費。

  具有大數量的快取器將需要大數量的指令位(使用珍貴的RAM)以做為快取器指定器。

  基於上述原因,CPU設計師試著令指令儘可能做更多的工作。這導致一個指令將做全部的工作︰讀入兩個數字,相加,並且直接在記憶體儲存計算結果。其它版本將從記憶體讀取兩個數字,但計算結果儲存在快取器。另一個版本將從記憶體和快取器各讀一個數字,並再次存入記憶體。以此類推。這種處理器設計原理最終成為複雜指令集(CISC)。

  當時的目標是給所有的指令提供所有的定址模式,此稱為「正交性」。這在 CPU 上導致了一些複雜性,但就理論上每個可能的命令都可以單獨的除錯(呼叫,be tuned),這樣使得程式設計師能夠比用簡單的命令來得更快速。

  這類的設計最終可以由光譜的兩端來表達, 6502 在光譜的一端,而 VAX 在光譜的另一端。單價25美元的 1MHz 6502 晶片只有單一的通用快取器, 但它的極精簡的單週期記憶體介面(single-cycle memory interface)讓一個位的操作效能和更高頻率設計幾乎相同,例如 4MHz Zilog Z80 在使用相同慢速的記憶晶片下(大約近似 300ns)。The VAX was a minicomputer whose initial implementation required 3 racks of equipment for a single cpu, and was notable for the amazing variety of memory access styles it supported, and the fact that every one of them was available for every instruction. The VAX was a minicomputer whose initial implementation required 3 racks of equipment for a single cpu, and was notable for the amazing variety of memory access styles it supported, and the fact that every one of them was available for every instruction.

  RISC設計中常見的特徵︰

  統一指令編碼(例如,所有指令中的op-code永遠位於同樣的位位置、等長指令),可快速解譯︰

  泛用的快取器,所有快取器可用於所有內容,以及編譯器設計的單純化(不過快取器中區分了整數和浮點數);

  單純的定址模式(複雜定址模式以簡單計算指令序列取代);

  硬體中支援少數資料型別(例如,一些CISC計算機中存有處理位元組字串的指令。這在RISC計算機中不太可能出現)。

  RISC設計上同時也有哈佛記憶體模組特色,凡指令流和資料流在概念上分開;這意味著更改程式碼存在的記憶體地址對處理器執行過的指令沒有影響(因為CPU有著獨立的指令和資料快取),至少在特殊的同步指令發出前。在另一面,這允許指令快取和資料快取同時被訪問,通常能改進執行效率。

  許多早期的RISC設計同樣共享著不好的副作用——轉移延時槽,轉移延時槽是指一個跳轉或轉移指令之後的指令空間。無論轉移是否發生,空間中的指令將被執行(或者說是轉移效果被延遲)。這些指令讓CPU的算術和邏輯單元(ALU)繁忙比通常執行轉移所需更多的時間。現在轉移延時槽被認為是實現特定RISC設計的副作用,現代的RISC設計通常避免了這個問題(如PowerPC,最近的SPARC版本,MIPS)。

  參考

  複雜指令集(CISC)

  例如:Intel的奔騰系列CPU屬於複雜指令集CPU,IBM 的PowerPC 970(用於蘋果機MAC G5)CPU屬於精簡指令集CPU。