2017年12月8日 星期五

淺談古代CPU:CISC廠的RISC(1)

RISC以及隨之而來的CISC這兩個縮寫的爭論與演變,其實是個很有趣的話題,RISC這個縮寫跟觀念出現前,指令集就是指令集,各家做各家的,也沒人計較誰比較複雜或簡單;RISC出現後,倒也沒有聽說哪家故意去違背潮流,推出「全新的CISC指令集」處理器。

不過,對於那些在RISC出現前就做電腦系統的「老」廠商們來說,怎麼面對這個RISC新潮流,是個頗堪玩味的問題,有的是毅然決然完全放棄過去的CISC,擁抱全新的未來;有的則是騎驢找馬,舊的照做,也做個新的試試手氣;至於以下這個廠商,八卦可精彩了....

身為微處理器的開路先鋒和領頭羊,Intel一開始對RISC幾乎是無動於衷,沒有野心?錯了,Intel的野心一點都不小,1974年的8080銷路極佳,讓Intel賺了不少錢,從1975年開始,Intel執行一項非常巨大的計畫,代號是8800,後來改名iAPX 432。

iAPX 432有多巨大?首先,Intel替這計畫訂的目標是「可以滿足未來十年內所有可能的客戶需求」,它的假想敵不是同級的微處理器,而是當時最佳的32位元大型主機,你現在想得到的多處理器、容錯、多工作業系統,物件導向記憶體管理等等等等,都被納入這個計畫的目標,它是Intel第一個32bit處理器,而當時Intel的8008和8080都還只是8位元而已;由於目標非常巨大,開發需要很長的時間和龐大的經費,為了彌補財源,也為了應付一旁虎視眈眈的Motorola、Zolog等微處理機同業,Intel勉強湊出一個團隊,用最快的速度急就章的做了一顆在組合語言階層上可以相容於8080的16位元處理器,當作正餐上桌前的開胃菜,這道開胃菜就是各位所熟知的8086。

8086在1976年問世,1979年,Intel把8086的資料線縮到8bit,推出8088,搶到了IBM PC這塊同樣是急就章的肥肉,展開了PC大航海時代,到了1981年,Intel終於端出第一套iAPX 432系統,結果是...慢,慘絕人寰的慢。

由於當初設定的目標,432的指令集「非常非常CISC」,首先,432的指令長度不固定,可以從6 bits到321 bits,對,你沒看錯,是「bit」,不是「byte」;除了複雜的指令集以外,極端複雜的物件導向記憶體管理(還自備Garbage-collection機制喔),以及容錯導致的匯流排等待時間都是導致速度拖慢的原因,更有甚者,因為結構的複雜,以當時的製程,432必須分成兩顆晶片,晶片間的速度慢以外,上面還沒甚麼空間可以塞cache,結果就是,Intel這顆壓箱寶,比當時同樣是32bit的Motorola 68000慢了5到10倍。

就在432端出來被嘲笑的同時,RISC這個新縮寫也同時浮上檯面;1980年,由加州大學柏克萊分校的David Patterson為首,發表了RISC I(順便也創造了RISC這個縮寫),1981年,由史丹福大學John L. Hennessy 為首設計的MIPS問世;在此同時,Intel還是不死心,1982年,Intel推出第二道墊檔開胃菜80286,同時繼續企圖挽救432。

1984年,德國西門子(Siemens)公司找上了Intel合作,共同出資開設一間新公司,名字叫BiiN, BiiN 的目標是開發一套高效能,具備容錯功能的高可靠度電腦系統,鎖定銀行、軍方或是像核電廠控制電腦這類「關鍵任務」的特定市場,Intel的任務,就是替這套電腦做出一顆處理器。

想當然爾,跟扶不起的432相比,BiiN顯然重要得多,所以原來參與432計畫的大部分人員都被調去做BiiN,其中還包括一個從IBM借來的 Glenford Myers,此君寫過一本有名的電腦科學教科書「軟體測試的藝術」The Art of Software Testing,擁有多項微處理器專利,包括微處理器上的暫存器 Scoreboarding設計;他在1981年初被Intel從IBM那邊找來做一個代號「P4」的計畫,企圖對抗Motorola的68000(以程式設計的角度,68000遠比Intel的x86「優雅」很多),後來IBM PC還是用了8086的變形8088,所以P4無疾而終;但是Myers還是參與多項Intel微處理器設計的重大決策,包括後來的386,上面提到的iAPX432,以後會提到的i860;

有了432這個前車之鑑,BiiN這顆代號P7的處理器當然不會再使用過度複雜的指令集,相反的,BiiN這顆處理器指令集有相當大的一部份參考了柏克萊RISC I的設計:指令固定為32bit長(只有MEM_B型式的指令是32bit再加上一個32bit的位移值),16個32bit的全域暫存器,以及16個區域暫存器,區域暫存器其實有四組,這是RISC I的Register Window設計,另外還有四個80bit長的浮點暫存器;雖然只有4個浮點暫存器,但是實際上BiiN這顆處理器的浮點運算指令可以用到「所有的」暫存器,浮點指令裡面有個欄位,可以分別切換要使用整數或浮點暫存器。


除了load-store相關指令以外,所有運算都在暫存器裡面執行;但是因為需要容錯和記憶體保護等功能,他們把原來i432的物件導向記憶體管理簡化後,移植到這顆處理器;第一顆能動的晶片在1985年年底出廠,剛好跟386差不多時間。

雖然這顆晶片效能還不錯,但是就在這個時候,BiiN 上面兩家母公司開始對這個系統的前景有點擔憂,畢竟,一個系統包括了軟體和硬體,只有晶片完成是不夠的;Myers看到大事不妙,拚了命的遊說Intel高層,希望可以把已經完成的P7晶片拿回Intel,乾脆就取代286和386,成為下一代的汎用處理器,也順便可以讓Intel進軍Unix市場,他同時也把整個BiiN的硬體整理歸納出幾個可拆解的大項;雖然高層沒有同意這麼激進的意見,但是最後這個晶片的基本架構被保留了下來,編號改為i960,目標是放在嵌入式系統市場;不過Glenford Myers自己在1987年時也離開了Intel,跟i960的晶片經理Dave Budde一起開了一家新公司 RadiSys ,而i960由另外一位原本i432的工程師,超純量結構專家 Fred Pollack 接手。

i960有好幾種不同的款式和編號,首先是具備原本BiiN全部功能的i960MX,這顆晶片沒有賣到一般市面上,另外有一顆i960MC,功能上其實一模一樣,但是所有比較先進的功能,文件裡面都省略不提,很多拿到i960MC的客戶會覺得很奇怪,怎麼會有這麼多接腳標明「no connect」....

拿掉複雜的記憶體管理系統後的i960編號80960Kx,編號有兩款,KA和KB,理論上KA沒有浮點運算器,但是其實KA和KB完全一樣,只是改個IC標籤而已,很多雷射印表機用這顆處理器,另外,1993年Sega製造的大型電玩機台的主機板Sega Model 2也是使用i960KB作為主處理器。

80960Cx在1989年七月發表,核心經過重新設計,一個週期可以發送三個指令執行,所以960Cx是Intel第一顆「超純量」(Superscalar)微處理器;事實上,頭三個商用超純量微處理器:1988年Motorola的88100、1989年的i960CA,以及1990年AMD的AM29050,很意外地都是「CISC廠的RISC」。

1990年代,Intel替i960找到一條新的出路:在PC市場當作高效能的I/O處理器;Intel還特別提出一個稱為I2O的開放規格,以i960做為中心,可以用來降低主處理器處理I/O時的負擔,不過因為i960價格實在不便宜,這個規格推了幾年後也無疾而終;另外,因為i960運算速度不算慢,尤其執行像是XOR運算,這對很多硬碟陣列(RAID)來說很好用,所以也有不少硬碟陣列卡採用i960。

雖然在嵌入式市場表現亮眼,但是在1997年,Intel買下了原本DEC的StrongARM後,i960(以及同樣是RISC的i860)就漸漸淡出舞台,事實上,早在1990年左右,主要的i960開發團隊,包括 Fred Pollack在內,就被指派去作為開發i386架構的「次世代」微處理器,後來代號P6的Pentium Pro,也就是現在Intel所有core架構的起點。

i960就這樣結束了?偷偷告訴你,有一家休斯飛機公司把i960(事實上就是BiiN)的整個硬體設計授權買了下來,用在一個稱為ATF(先進戰術戰鬥機)的計畫裡,也就是後來的F-22,換句話說,世界最強的戰鬥機裡面,可能還有幾顆i960正在全力工作。

沒有留言: