1. 程式人生 > 實用技巧 >【Practical】<RISC,CPI>

【Practical】<RISC,CPI>

文章目錄

每條指令時鐘週期數CPI.

  • 幾乎每臺計算機都有一個以固定頻率執行的時鐘,CPU內部有個叫晶體振盪器(Oscillator Crystal)的東西簡稱晶振,可以將晶振理解為那種老式擺鐘,一天下來它要擺好多次,每次擺動之間的間隔稱為時鐘週期時間-Clock Cycle
  • 一個程式的CPU時間可以計算如下(記為①式):
    在這裡插入圖片描述
  • 如果已知程式的CPU時鐘週期數和程式的指令數IC,粗略來看將二者做商,就能夠得到每條指令時鐘週期數CPI(記為②式):
    在這裡插入圖片描述
  • 結合①②兩式,得到CPU時間的另一種表示(記為③式):
    在這裡插入圖片描述
    直觀理解為,一個程式需要的CPU時間是程式中的指令數、每條指令需要的時鐘週期數以及單個時鐘週期的時間這三者之積。

不同指令CPI.

  • ②式中的計算方法實際上攜帶了一種假設,即所有的指令都是等價的,MOVADD以及LOOP等等所有指令都被視為同樣的"1",納入了IC之中,如果考慮不同指令之間的差異,則②式應修改為(記為④式):
    在這裡插入圖片描述
  • 相應修改CPU時間計算式③,得到⑤式:
    在這裡插入圖片描述
  • 最終回到CPI的計算,從⑤式中得到CPI計算公式⑥:
    在這裡插入圖片描述

RISC設計思路.

  • RISC - Reduced Instruction Set Computer是一種CPU的設計模式,其中的指令-Instruction指的是那些能夠被計算機直接識別的指令,與之相對的一個概念是CISC - Reduced Instruction Set Computer.
  • 從最早的程式談起更能說清RISC和CISC出現的原因,那時的程式絕大多數是由機器語言或者組合語言編寫的。而隨著計算機系統的發展,人們要求計算機指令系統能夠使得計算機程式執行得越來越穩定,首先出現的優化方法就是複雜指令集CISC.
  • CISC的思想是讓計算機指令做更多的事,將一些原本由軟體實現的功能也改用硬體實現,以此來提高計算機的執行速度。催生越來越複雜、功能越來越強大的指令出現的原因是多方面的:
  • ①當時情況下的硬體設計效率高於編譯器設計(編譯器技術直至20世紀90年代才逐步成熟);
  • ②記憶體容量小,每一位元組都是珍貴資源,使得指令傾向於高度編碼、不等長、聚合多個操作;
  • ③CPU內部快取過於昂貴,數量稀少。
  • 綜合上面這些因素,CPU設計師選擇讓指令做更多的事,例如一條指令能夠獨自完成取出資料、計算、將計算結果儲存在記憶體中整個過程。
  • 但顯然我們如今使用的計算機指令系統並不是這樣的複雜指令,學習組合語言時,對於上面這樣一個操作,我們並不是一條指令直接完成,而是有著LoadAdd以及Store等等分工完成的指令。這也就意味著,在指令集發展的某個時期,CISC暴露出了其弊端,被某種新的設計思路替換了。
  • 1979年以帕特遜教授為首的一批科學家也開始在美國加州大學伯克利分校開展了針對指令系統合理性的研究,並且提出了"2-8準則",也就是在計算機程式中,各種指令的使用頻率之間存在很大的差值,一個程式中80%的指令,實際上只是一個指令系統中20%的部分,像存、取、加這樣的簡單指令出現頻率相當高。所以複雜指令系統的設計,實際上是在設計一些實際使用中很難用到的指令,導致初衷是為了提高計算機執行速度的CISC,很多情況下缺拖累了計算機執行速度。CISC會降低那些被頻繁呼叫的簡單指令系統的執行速度,基於上面第⑥式的計算公式以及貪心策略,這顯然會導致CPI遠遠不是全域性最優值。
  • 於是在20世紀80年代,RISC優化技術發展起來,其策略是正對CISC做出改進的,一方面在指令系統中只包括那些被頻繁呼叫的簡單指令(例如選取運算指令、載入、儲存指令和轉移指令作主指令集),並且採用統一指令編碼而非不等長指令;另一方面提供一些必要的指令來支援OS和高階語言,使得較為複雜的功能可以通過一段子程式來實現。
  • 基於第⑥式的計算公式,RISC的策略就是降低那些高 P i P_i Pi值的指令的 C P I i CPI_i CPIi值,從而使得CPI能夠接近全域性最優解。

Moreover.

  • RISC的設計思路實際上遠遠不侷限於CPI方面大概率優先的思路,固定長度的編碼帶來了很多方面的優化:
  • ①指令趨於固定的格式,操作碼、運算元都儘量出現在固定的位置上,使得RISC與日漸成熟的編譯器技術能夠較好地契合;
  • ②規格化、簡單化的指令使得RISC能夠採用高效的流水線操作,實現並行操作,提高處理資料和指令的速度,並且簡化了定址方式;
  • ③採用大量的暫存器操作指令,使得控制部件更加簡化,執行速度提高,也得益於VLSI技術在20世紀80年代已經能夠在一個晶片上做出大容量暫存器;採用載入-儲存ISA,除了LoadStore指令能夠訪問記憶體,其餘指令均在暫存器之間處理資料;
  • ④拋棄微程式碼(會增加指令的複雜度、降低執行速度),採用硬佈線的邏輯控制;
  • 更多內容可以查閱wikipedia以及Hennessy先生Patterson先生的《Computer Architecture:A Quantitative Approach》(fifth edition).