源自於日文的「豆知識」是一種生活中少見的知識,一種另類的知識。可有可無,知道就好,不知道也無所謂。
關於RISC (精簡指令集電腦) 和CISC (複雜指令集電腦) 的差異與比較,原本隨著80x86統治大半個資料中心與個人電腦領域而不再被世人所重視 (IBM大型主機:請不要忘了我啊),但又因為ARM的崛起與RISC-V的興起,在近年來再度吹皺了一池春水,彷彿RISC指令集好像是橫空出世的偉大發明。
不過,即使不同的指令集架構都奠基於不同的時空背景,但人類依舊希望一套指令集能夠長期發展並易於實作節能省電的高效能微架構,也因此,近代新型指令集架構,無一不依循RISC的設計概念,像x86這種「毫無道理可尋」的東西,也很難再度出現第二個榜樣。
硬科技:簡報王與他們的產地 NVIDIA RISC-V處理器
是先有RISC還是先有CISC?
RISC一詞是源自於加州大學柏克萊分校的David Patterson教授的著名的論文 "The Case for Reduced Instruction Set Computer" (1980年),所以才「衍生」了CISC這個對照用的名詞。在此之前,大多數的電腦都還是CISC,但RISC的諸多概念,卻也早已出現在1965年的CDC6600與1975年的IBM 801計畫,後者更被公認是RISC的真正起源,只是沒有特別創造這個名詞。
為何早期的電腦會是CISC?難道不一開始就RISC不好嗎?
這讓筆者不得不想起「為何還要無線上綱,難道不能無線上網」的冷笑話。
主要在於商用電腦發展初期 (1950-1970年代),記憶體容量可謂寸土寸金,高階語言編譯器的技術尚未成熟,大多數都是以組合語言撰寫程式,程式設計師希望可以用較少的指令去完成工作,但當時的電子工藝技術卻難以直接用硬體實做這些功能強大的指令。也因此,透過「微碼 (Microcode)」組成微程式 (Microprogram)、CPU再執行這一系列的微指令 (Microinstruction),來實現功能複雜的指令,就成為當時的風潮。
RISC又是怎麼冒出頭的?
在這裡先將技術名詞束之高閣,筆者用另一個角度檢視RISC的誕生:
-
電腦開始有普及化和低價化的需求,勢必要設法降低成本,提高效能 (管線化、快取記憶體等等),並且縮短產品開發的時間。
-
記憶體容量漸漸充裕。
-
高階語言編譯器逐漸成熟,而越來越多人發現其實他們最常用的指令都很簡單。
結論就是:
-
CPU只需要提供高階語言編譯器最常用的簡單指令即可。
-
盡量不使用微碼實作指令。
-
CPU和記憶體的速度差距正在拉大,為了減少影響,RISC使用大量資料暫存器,除了載入 (Load) 回存 (Store) 指令外,其他指令都只能使用暫存器作為運算元。
-
三運算元格式 (C = A + B),提高暫存器的使用效率。過往的雙運算元格式 (A = A + B) 會有破壞一個運算元原本資料的問題,需事先複製到另一個運算元 (如其面的A)。
RISC是否保證一定就是低功耗?
只要微架構複雜到一個程度,功耗自然就很難低下來。就筆者的個人觀點,ACPI的問世就象徵著作業系統對於電源管理的舉足輕重性,要做到極致的省電,最好作業系統和硬體架構都出自於同一間廠商,而我們已經在Apple M1和M2看到類似的成果,但這招其他廠商也學不來。
RISC真正的價值?
就商業角度就是 “Time To Market”,縮短產品開發時程並快速應對市場需求,這也是動不動開發期三年五年的x86陣營所作不到的。
「可同時執行一個以上指令」的商用超純量 (SuperScalar) 處理器,難道是IBM Power (1990年)?
其實不是,Motorola 88100 (1988年)、Intel i960CA (1989年)、AMD AM29050 (1990年) 這三顆更早,更有趣的是,這三間廠商原本都是做CISC處理器起家。
如果我們把眼光放遠,不限於西方世界,1970年代的蘇聯Elbrus-1超級電腦,就同時具備超純量、非循序執行與預測執行等特色,比美國早了十幾年。
近代x86處理器都透過微指令轉譯實作更高效率的微架構,這有解決x86的宿疾嗎?
當然沒有,x86指令集的複雜性還是擺在那邊,況且這種作法的根本目的,也是類似RISC的精神「盡其所能加速最常用到的簡單指令」,各位科科只要長期觀察不同世代x86處理器的指令延遲 (Latency) 與輸出率 (Throughput),大概就知道筆者想表達的意思了。在今天還在用CMOV?還不如對賭越來越準的分支預測還比較實際。科科