2010年7月7日 星期三

RISC 處理器(上):何謂「RISC」?

 
當您在看嵌入式系統的規格時,您也許會看過這一段:「採用 32 bits RISC SoC」。您知道什麼是「RISC」嗎?

「RISC」的全名是「Reduced Instructioin Set Computing」,中文翻譯成「精簡指令集」。它是一種 CPU 的類型,有著「指令集數量精簡」、「指令管線(Pipeline) 步驟眾多」、「擁有大量暫存器」、「採用 Load / Store 機制」等特色。一下子跟大家介紹這麼多名詞,也許大家會頭暈腦脹。不急!我們一個一個慢慢來。




想了解 RISC,我們得從 CPU 是如何執行指令談起。一般而言,程式設計師寫好一段可執行檔,會在使用者下令執行後,從硬碟被搬到主記憶體中放著待命。接下來 CPU 就把該程式中的指令,一道一道地從主記憶體中,抓到 CPU 裡執行。這個動作我們叫「提取(Fetch)」。接著,CPU 會開始嘗試辨認它提取的指令是什麼?是把兩個數字相加嗎?還是做某種條件判斷?這個步驟稱為「解碼(Decode)」。等到 CPU 懂得這個指令後,它就會把該指令實現,這個動作稱為「執行(Execute)」。最後,它會把執行結果寫回記憶體中,保存起來,這個動作稱為「寫入(Write)」。所以,我們的 CPU 一直針對每道程式師的指令,重複做著「提取 --> 解碼 --> 執行 --> 寫入」這樣的動作。

我們假設上述四個步驟,每個步驟都需要「一個時脈(1 clock)」這麼多的時間來完成好了。如果 CPU 執行指令,是將一個指令的「提取 --> 解碼 --> 執行 --> 寫入」四大步驟做完,才做下一個指令的四大步驟,則根據剛剛的假設,每道指令有四個步驟,需要 4 Clocks 才能做完。那麼兩個指令就需要 8 Clocks 才做得完了。

上面描述的情節似乎合情合理。可是電腦工程師就是在看似合理的狀況中,想出一些不合常理的解決方案,讓電腦跑得更快!於是乎,工程師模仿工廠生產線的機制,在 CPU 內部設計了四個獨立單元,分別負責「提取」、「解碼」、「執行」、「寫入」。負責提取的單元,它的生命意義就是「提取!提取!提取!提取!」。當它做完一個指令的提取動作,就可以直接執行下一個指令的提取,不必等到該指令完成後面三個步驟後,才去做下一個指令的提取動作。如此一來,便有如工廠的生產線般,第二個指令的完成時間,只與前一個指令的完成時間,慢了最後「寫入」所需要的時間了。如果再拿「一個步驟一個時脈」的假設來看,執行兩個指令,就只需要 5 Clocks 便可完成。大家有興趣可以試著計算看看。而電腦模仿生產線、以多個獨立單元來執行指令的這種機制,就稱為「指令管線(Instruction Pipeline)」。


但,「代誌不是像恁『憨人』想的那麼簡單!」(配樂:噹噹噹噹噹~)如果每道指令,都能夠像上面講的,運作得如此完美,那這世界早就太平了。讓我們想想生產線作業時,最怕碰到的狀況是什麼?對啦!就是其中一個作業員手腳太慢,慢到不得不把生產線停下來,等他做完才再重新啟動。CPU 實際執行時,也很怕碰到這種情況。讓我們假設,有一道指令的執行週期特別長,需要 3 Clocks。這就好像生產線上某位員工,本來該 1 秒完成任務的,卻花了 3 秒。如此一來,該名員工的上一位與下一位同仁,甚至於整條生產線,就得多等 2 秒,才能繼續完成剩下的任務。

如果該名員工每次都延遲 2 秒,則第二次開始,產出成品的速度,就比原來完成速度延遲 2 秒、 4 秒、6 秒、8 秒...,以至於到最後越來越嚴重。到最後,用生產線機制來產出成品,就不比一個人處理所有步驟的家庭代工快多少了。那又何苦花大筆鈔票建構整條生產線呢?CPU 也一樣。如果某個執行單元,每次都被拖慢 2 clocks,以致於到最後執行指令的速度,跟不使用「指令管線」機制快不了多少,那又何苦大費周章地在 CPU 內部獨立出四個單元呢?

解決此問題的方法,就是保持 CPU 內的指令集「精簡」!也就是說,每個指令能執行任務的複雜度,都差不多。拿生產線的比喻來說,就是別讓某個人的動作,比其他人複雜,而多花許多時間。免得讓工作量都集中在該員工身上,進而造成「管線塞車」。舉個真實案例:如果有個指令叫做「MUL」,它可以將兩個數字相乘,但只要一執行,就得花掉 6 clocks。在 RISC 中,我們就會把 MUL 這種指令拿掉,讓它根本不存在。RISC 會改提供 ADD 指令,可將兩個數字相加,不過只要花掉標準的 4 clocks,便可完成任務。程式師需要乘法時,就改用一連串的加法代替。這樣做雖然會苦了程式設計師,但保證整個「指令管線」暢通,不會有塞車的狀況。

到這裡,讀者們應該能夠理解何謂「RISC」了。明天我將跟大家說明「為什麼嵌入式系統的 SoC,大多使用 RISC 架構」這件事。敬請期待!

RISC 處理器(上):何謂「RISC」?
RISC 處理器(中):為何嵌入式系統多用 RISC 架構?
RISC 處理器(下):RISC 處理器的四大特色

喜歡這篇文章嗎?喜歡的話請幫忙按一個「讚」喔!
歡迎加入「紀老師電腦教學網」的 Facebook 粉絲團,取得更多資訊喔!

關於作者
紀俊男,現任和群資訊總經理。曾任職於筌寶電子、趨勢科技、西基電腦、展望電腦等公司。教書經驗約 20 年。專長是程式設計、系統管理、嵌入式系統等領域。您可以在本篇留言與之聯繫、討論、或邀課。

沒有留言:

張貼留言