轉載一篇關於 cisc 和 risc 的文章
cisc (complex instruction set computer)用於 x86 cpu
risc (reduce instruction set computer)用於現時apple powermac cpu
-----------------------------------------------------------------------------
首先我先引一段話,
說這句話的人是David Ditzel,他是Sun's SPARC family and CEO of Transmeta的架構總工程師.
"今日的設計RISC晶片需要龐大的team,和很長的設計時間.採用RISC架構的高效能也不再那麼明顯了. Die size不再小了,也不再那麼有意義了(意指RISC的精神-->較小的晶圓面積).Superscalar和OOO大量的增加了晶圓面積,但是卻大幅提升了CPU的性能.MIPS R10K和HP PA-8000(RISC家族)看起來遠遠比目前標準的CISC架構來的複雜很多(指PII),所以,當晶片不再那麼簡單的時候,RISC的優勢在那?"
我們要知道當初Patterson先生(有人稱他做Mr. RISC)做出第一顆RISC晶片的背景是,"因為一顆晶片無法容納太多電晶體"以及"記憶體很貴"(1977年時,1MB DRAM高達5000美金)因此RISC只採用"固定格式","簡單"卻"最基本"(當然得包括store/load)的指令,來完成一顆CPU.
當時最著名的CISC CPU "VAX",因為無法用一顆晶片容下大量的電晶體,變通方法是-->用多顆晶片來完成一顆CPU,這樣有什麼壞處呢?如此一來,由於Data Power的penalty影響到了資料傳送,使VAX的效能被限制住了.所以單一晶片的設計是應該的,在當時卻無法達成,大家都想,卻不知怎麼做.
CISC的流行,以及RISC的後來居上
-------------------------------
但是當時(1960,1970)高階語言開始流行了起來,在當時缺乏強而有力的compiler之下,CISC無疑是一個很好的方法,因為一道指令可以做很大的事,幫撰寫compiler的人省下了不少的功夫,也幫公司省下了不少開發compiler的錢!(當時背景是,硬體越來越便宜,但是軟體開發卻越來越貴! 所以大家可以想像,把軟體的錢省下來交給硬體看來比較划算.)
1980年代,Patterson進行了第一顆RISC的研發.Patterson有這麼一句名言"讓常用的東西快速"(這也是V兄所強調的)他的意義如同v兄所講的,
1.我們只把常用的指令(90%以上)做在晶片中,把不常用的指令踢出晶片外,
2.也就是把原本cpu在做的複雜工作轉交給軟體的compiler來做
(也就是把非常用的指令由compiler來合成,甚至有些compiler明知該CPU有CISC指令可用,但就是不用!)
3.以及,RISC的精神是要把指令都在CPU裡的Register內完成(除了store/load可以直接提取MainMemory),
因為這樣減少了線路的難度(還要做通往memory的線路),也增快了速度,這也是為何RISC需要那麼多Register的主因! 同樣的,要如何讓指令在雖多仍有限的Register好好工作,這也是Compiler的一大任務.
相對之下,CISC卻有著大量直接存取MainMemory的指令, 我們知道,從MainMemory提取指令速度遠慢於CPU旁邊的Register,這樣的指令,慢,複雜.最後隨著軟體科技的進步,以及開發費用越來越便宜(如compiler),RISC開始逐漸證明了他比起CISC有很多重要的優點.
Pipeline的興起,和後續的先進架構
-------------------------------
的確,指令是變的簡單,格式固定,不再那麼複雜了,但是,有些指令仍需要多個cycle才能完成,這不免有背於RISC的一大特色,要指令在一個cycle內完成,於是Pipeline開始興起,因為使用Pipeline,的確可以讓指令仍然看起來是在一個cycle內完成(為何?請看小弟之前的拙作)但是由於Pipeline必然面對的一些Hazard,如果沒有做一些補償,有時甚至會比起沒有Pipeline的CPU來的慢.
這也是後來我常提到的那些"先進架構"勢必要加在CPU裡面.
這些架構(Branch Prediction,RegisterRenaming,OOO,等動態執行功能)大大的提升了Pipelining的效能, 卻也同時把RISC弄的很複雜.這也是目前的一大爭議, 因為大家印象中的RISC應該很精簡,現在卻弄的比CISC還難懂. 但無疑的是,這些架構就是大大的提升了性能.
後話
----
當然,再講一次,現在的RISC,CISC都根本違背他們名字該具有的意義.
x86目前幾乎都有兩個stage拿來把x86轉成RISC指令,
這兩個stage因為Pipeline的關係而不影響效能.
RISC也採用了大量的指令來達成多功能,這,也一樣不同於以前的觀念.