1. 程式人生 > >關於CISC和RISC的一些總結

關於CISC和RISC的一些總結

  • CISC和RISC

首先先來介紹一下兩個名詞,畢竟我第一次看到這個題目,也有一點點懵,所以,先來講述一下各自的含義。

  1. CISC (Complex Instruction Set Computer)

    複雜指令計算機

CISC是臺式計算機系統的基本處理部件,CISC是一種執行整套計算機指令的微處理器,每個微處理器的核心是執行指令的電路。指令由完成任務的多個步驟所組成,把數值傳送進暫存器或進行相加運算。

   CISC早期的計算機部件比較昂貴,主頻低,運算速度慢。為了提高運算速度,人們不得不將越來越多的複雜指令加入到指令系統中,以提高計算機的處理效率,這就逐步形成複雜指令集計算機體系。

CISC特點:

  1. 指令系統龐大,指令功能複雜,指令格式、定址方式多;
  2. 絕大多數指令需多個機器週期完成;
  3. 各種指令都可訪問儲存器;
  4. 採用微程式控制;
  5. 有專用暫存器,少量;
  6. 難以用優化編譯技術生成高效的目的碼程式;

在CISC指令集的各種指令中,大約有20%的指令會被反覆使用,佔整個程式程式碼的80%。而餘下的80%的指令卻不經常使用,在程式設計中只佔20%。

  1. RISC(Reduced Instruction Set Computer)

    精簡指令集

精簡指令集是計算機中央處理器的一種設計模式,這種設計思路對指令數目和定址方式都做了精簡,使其實現更容易,指令並行執行程度更好,編譯器的效率更高。

    這種設計思路最早的產生緣自於有人發現:儘管傳統處理器設計了許多特性讓程式碼編寫更加便捷,但這些複雜特性需要幾個指令週期才能實現,並且常常不被執行程式所採用。此外,處理器和主記憶體之間執行速度的差別也變得越來越大。

    在這些因素促使下,出現了一系列新技術,使處理器的指令得以流水執行,同時降低處理器訪問記憶體的次數。早期,這種指令集的特點是指令數目少,每條指令都採用標準字長、執行時間短、中央處理器的實現細節對於機器級程式是可見的。

RISC特點:

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

 

  • 二者誰更優秀

    看了一篇文章覺得裡面的解釋非常通俗易懂:

    他說這兩類指令集實際上沒有孰優孰劣的分別。他打了個比方,他把指令集比作給一個人吃飯所要下達的指令,吃飯有一些詳細的步驟,比如1.拿起筷子 2.伸進碗裡 3.夾起米飯 4.送進嘴裡 5.咀嚼米飯

——那麼對於RISC(精簡指令集)而言,就是分別把這五條指令一一放在指令集裡面,當一個人需要吃飯的時候,就下達這五條指令以讓物件執行。

——CISC(複雜指令集)則是把這五條指令融合為一條,這樣只需要下達一條“吃飯”的指令,就可以完成所有五個動作。

CISC認為,這樣訓練複雜的技能後,那麼吃飯就不成問題了,而不需要一條條下達指令。而RISC則認為,這樣下達指令具有很大靈活性,況且下達比較簡單的數條指令對參與的人而言只需要很少的技能就可以完成吃飯動作,如果下一回需要他去吃菜,那CISC還要重新訓練此人吃菜的技能。

如果舉辦一個吃飯大賽,那麼CISC肯定獲勝,因為他只需要不停下達“吃飯吃飯吃飯”指令就足以完成比賽且獲勝。而RISC每次都需要下達五條指令。——但是,如果只需要這個人拿起筷子,對CISC來說就存在一些問題了。

 

CISC到RISC的演變過程

  1. 發展分歧

計算機指令系統指的是計算機的最低層的機器指令,也就是CPU能夠直接識別的指令。

隨著計算機系統的複雜,要求計算機指令系統的構造能使計算機的整體效能更快更穩定。最初,人們採用的優化方法是通過設定一些功能複雜的指令,把一些原來由軟體實現的、常用的功能改用硬體的指令系統實現,以此來提高計算機的執行速度,這種計算機系統就被稱為複雜指令系統計算機(CISC)。

另一種優化方法是在20世紀80年代才發展起來的,其基本思想是儘量簡化計算機指令功能,只保留那些功能簡單、能在一個節拍內執行完成的指令,而把較複雜的功能用一段子程式來實現,這種計算機系統就被稱為精簡指令系統計算機(RISC)。

RISC技術的精華就是通過簡化計算機指令功能,使指令的平均執行週期減少,從而提高計算機的工作主頻,同時大量使用通用暫存器來提高子程式執行的速度。

  1. 提出緣由

日趨龐雜的指令系統不但不易實現。而且還可能降低系統性能。CISC存在許多缺點:

首先,在這種計算機中,各種指令的使用率相差懸殊:一個典型程式的運算過程所使用的80%指令,只佔一個處理器指令系統的20%。事實上最頻繁使用的指令是取、存和加這些最簡單的指令。這樣一來,長期致力於複雜指令系統的設計,實際上是在設計一種難得在實踐中用得上的指令系統的處理器。

同時,複雜的指令系統必然帶來結構的複雜性。這不但增加了設計的時間與成本還容易造成設計失誤,很難把CISC的全部硬體做在一個晶片上,這也妨礙單片計算機的發展。

因而。針對CISC的這些弊病。帕特遜等人提出了精簡指令的設想即指令系統應當只包含那些使用頻率很高的少量指令。並提供一些必要的指令以支援作業系統和高階語言。按照這個原則發展而成的計算機被稱為精簡指令集計算機(ReducedInstructionSetComputer-RISC)結構。簡稱RISC。

 

理論上,兩者確實有區別。

但是以現在的工業水平,兩者的區別實際上不存在。現在的 x86 體系根本不是cisc,他表面上接受cisc指令,實際上通過譯碼器轉化成risc,然後底層執行的都是risc指令,換句話說,在通用cpu領域已經完全是risc的天下,因為x86的譯碼器已經非常成熟,譯碼是並行進行,等效於沒有譯碼開銷,x86跟risc沒有效率上的差異。所以說,二者也可以說是優勢互補。

 

  • 放眼未來

    通用處理器架構經歷了 CISC,RISC之後, 其架構的發展基本已經停滯了。以x86指令集為代表的CISC架構 為了相容性,堅守自己的地盤,畫地為牢.除了幾家公司外,已經沒人去發展它了,它自身的結構發展也非常緩慢.,當前已經沒有新公司會開發一種純粹的CISC架構的晶片了。

RISC架構也面臨很大的窘境.其理論基礎建立在 "一個典型程式的運算過程所使用的80%指令,只佔一個處理器指令系統的20%。"的統計結果上的. 但是它並沒有"處理器指令系統中不常使用的80%的指令應該怎麼處理?"的解決方案,只有具體到晶片設計時,才根據具體情況進行取捨.

隨著 晶圓工藝的快速提升,在某個方面基本等效於芯片面積增大, 處理器包含的功能已經不像原來那樣錙銖必較。顯然,原始的RISC思想已經不再合適了,但是我覺得基於RISC架構基礎上發展而來的多條指令重疊執行的流水線技術肯定是需要保留的一個處理器核不夠用,可能就在一顆晶片上放置多個處理器核。

雖然很多人說通用處理器架構已經非常成熟,可是晶圓工藝的發展,GPU的快速發展,

在並行運算上遠遠將通用處理器甩在後面,所以我們應該保持一顆敬畏之心,期待之後的發展。

 

參考文獻:

  1.  RISC vs. CISC - Stanford Computer Science
  2. Blem, Emily, Jaikrishnan Menon, and Karthikeyan Sankaralingam. "Power struggles: Revisiting the RISC vs. CISC debate on contemporary ARM and x86 architectures." High Performance Computer Architecture (HPCA2013), 2013 IEEE 19th International Symposium on. IEEE, 2013.
  3. 竹林:通用處理器的發展