The historical time of 6:08 on 2002.8.10 ends an era while begins a new one. The day in which we make computer with only foreign CPUs is gone with the wind of the morning of 2002.8.10. With tears and joys, we announce the successful running of LINUX (Kernel 2.4.17) with the Godson-1A CPU. The great ecstasy at this moment makes all of our exhausting efforts of the past year be over paid. Though this is only a little step of a long march, it indicates the glorious future of our own CPU.
譯:「2002年8月10日清晨6時08分,這是一個歷史性的時刻,開啟了一個全新時代。
   這一天,我們結束了只能用洋人的 CPU 來製造計算機的歷史。
   我們悲喜交集地宣布:Godson-1A CPU 已經可以成功地運行 LINUX (Kernel 2.4.17)。
   這一刻的欣喜若狂讓我們之前竭盡心力所付出的一切都有了回報。
   縱然只是長程競賽中的一小步,我們仍可預見這顆 CPU 璀璨的未來!」

以上這兩段話是一個中國工程師胡偉武先生寫的,
當時他才34歲,參與中國自行研發的CPU「龍芯」的計畫。
想知道這段文字到底在說什麼嗎?
你可以拜訪下面幾個網址,也可以看看以下我轉貼的胡先生所寫的文章。

2001年9月,那時godson才剛通過FPGA驗證,離一顆「晶片」還非常遙遠呢!
然而這已經是一大成就了,胡先生興奮之餘寫下了這篇文章:「我們的CPU」。




我參與計算所的CPU開發專案,源於2000年10月一個偶然的機緣。10月中旬,所領導派我到我的母校中國科技大學去進行招生宣傳。這是我1991年畢業後第一次回到母校。我回到了我原來工作過的實驗室,十年前在那裏,我曾經和另外一個同學一起做過一個與8086指令級相容的處理器作為本科畢業設計。這是一個用400多個74LS系列的晶片搭起來的電路,能夠運行8086指令系統中除了十進位和除法指令以外的所有指令。由於沒有製版的費用,所有的連線都是手工焊的。這次回去,我看到了我原來做的機器還靜靜地躺在那裏。面對與十年前一樣淩亂的實驗室和滿桌觸手可及的晶片、電容、電阻、電烙鐵,我有一種重操舊業的衝動,因為十年前那些沒日沒夜地與邏輯門、觸發器、解碼器、選擇器玩命的日子有一種深深的誘惑,至今我還可以如數家珍地說出好多當前我用過的積體電路晶片的引腳定義。(小貓註1)我想到了我們所正在籌備的CPU設計項目,於是我給我的師兄唐志敏打電話,他是計算所系統結構室的室主任,目前正負責計算所CPU設計項目的準備工作。我開玩笑說一、二年之內不把通用作業系統boot起來,提頭來見。於是回計算所後,我就開始考慮CPU的指令系統和流水線(小貓註2)等問題。

小貓註1:LS74?手工焊接?做處理器?Oh my God! 我大三的數位電路實驗用同樣的東西和技術只做了個火車計時器!
小貓註2:流水線=pipeline


2001年8月19日,前蘇聯解體的十周年紀念日,我們設計的Godson CPU成功地把LINUX操作系統boot起來。當login:的提示符出現在螢幕上時,計算所北樓309房間一片歡呼。到9月中旬,一個用我們自己設計的CPU的完整電腦系統已經浮出水面,該系統運行完整的LINUX作業系統, 內核版本為2.4,可以做其他運行LINUX作業系統的電腦所支援的一切事情,包括運行gcc編譯器,X-window視窗系統,WEB伺服器,SPEC CPU2000基準程式等。我們最引以為豪的還是該CPU的系統結構設計。可以說目前世界上最先進CPU的系統結構技術,該有的Godson都有,不少地方還有創新。雖然目前我們只是基於FPGA的設計,主頻也不高(小貓註3),但當我們的CPU運行到12.5MHz時,其性能已經不比50MHz主頻的Intel 486差(當然, 我們的主板比486主板要好),確切地說,浮點性能比486強一點,定點性能比486差。值得一提的是,當我們用一個叫"偏執狂(Paranoia)"的測試程式測試CPU的浮點部件是否符合IEEE 754標準時,奔IV處理器(小貓註4)測出了浮點不嚴格符合IEEE 754標準而我們的CPU完全符合標準。此外,在Godson中還專門針對網路攻擊進行了安全設計,可以有效防止利用緩衝區。應該指出的是,我們只是完成了一個CPU的邏輯設計,目前是用FPGA對這個邏輯設計進行驗證,只是一個階段性成果,還沒有進行投片(小貓註5)。用李所長的話說,"三分之二的工作還在後面"。如果我們對目前的工作沾沾自喜,那是很膚淺的。但即使是這個成果的取得,也來之不易。個中滋味,酸甜苦辣俱全,很難為外人所體會。回顧我們開發Godson處理器的過程,雖然不長,但有教訓,也有經驗,總結一下,對以後的工作是有好處的。

小貓註3:通常FPGA的速度不及真正晶片的十分之一,FPGA能動不代表晶片能動。
小貓註4:奔IV處理器,我猜是指第一代的Pentium(586)。
小貓註5:投片=tape-out。白話一點,就是IC已完成設計,撒錢將設計圖丟給晶圓廠做出成品。

我們做CPU設計緣起於所長李國傑院士的直接推動。李老師是我接觸過的院士中比較欽佩的一個,因為他能夠站在如何發展整個國家的資訊產業的角度來考慮問題,而不是一個局部的角度。現在我慢慢知道,他推動我們所做CPU設計是很不容易的。也許是由於前幾年計算所的反覆折騰給人留下了不好的印象,使得很多人覺得計算所沒有能力做CPU,李老師最後只能把CPU設計作為一個計算所的所內專案先做起來。我在計算所連讀書帶工作十來年,也是第一次體驗到不用立項申請而直接開始做一個課題。CPU設計技術是核心技術,但市場壁壘很高,即使現在已經投片出來很好的CPU,如果沒有人用就會走入以前"鑒定會就是追悼會"的怪圈。但我相信李老師在資訊產業界的經驗和影響力,所以決心做下去。我的師兄唐志敏是系統結構室的室主任,他把握著整項工作的大局,領導整個CPU設計的總體規劃。他的大度和謙和能夠把一批非常能幹的年輕人團結在一起,使大家互相之間從無猜忌。現在在科技界有一種奇怪的現象,就是一個年輕人作出一些成果之後,就喜歡獨立門戶,結果造成了科研力量分散,幹不成大事的局面。大家都在沾沾自喜地幹一些幾十萬或頂多是上百萬的項目,形成不了很大的力量。在我們的項目組中,卻有一批本身也很厲害,能夠獨挑一攤的年輕人緊緊地團結在一起,同心協力幹一件事情,一個重要的原因是唐志敏是一個能夠容人的領導。舉一個簡單的例子,在所裏後來立的一個CPU設計的專案中,我是專案負責人,但包括項目申請書、每月一次的課題進展狀況及支出情況表、以及鑒定會材料等,我一個字也沒有寫過,全是唐志敏代勞,使我有90%以上的時間能夠用在編程和邏輯設計。這只是一件小事,但我在計算所十來年,見了不少下屬幫領導寫報告的事,卻從未見過領導幫下屬寫報告的。唐志敏在全局的把握和總體規劃上也是有獨到的見解,至少是我所不能及的。關於我們未來CPU的用途,我的主張是自己做高性能工作站,但做出來幹什麼以及如何與別人競爭卻難說,唐志敏卻非常有數,他說現在我們所的軟體室正在做電子政務,以後結合在一起做,至少在安全方面是國外產品無法競爭的。我當時覺得這種眼光真是"高瞻遠矚、高屋建瓴"(小貓註6)

小貓註6:哇賽,大陸人連成語都用得很高級...瓴,音同「零」,屋瓦的意思。「高屋建瓴」和「高瞻遠矚」意思差不多。

張志敏老師在我們的CPU設計中負責工程管理,他是李所長請來的客座研究員。根據我們自己的分工,在我們設計CPU的隊伍中,唐志敏是總負責,我負責設計,張老師負責工程管理。張老師是責任心非常強的人,很義氣,工程經驗非常豐富。我最佩服張老師的有兩點,一是他把個人利益看得很輕,他放棄了原來工資更高的工作到我們這裏來做這個事情;二是他做事情很實在、很專一。我有一個觀點,一個人一輩子做好一件事情都不容易,因此比較討厭一些一會兒這邊,一會而那邊,想兩邊都得好處的人。但張老師不是這樣的人,他做事情很實在。在我們基本完成Godson的邏輯設計後,需要一個類比主板的環境,以便在邏輯設計上通過軟體類比啟動LINUX。我覺得這個事情很難,但張老師加班加點一兩個星期就寫出來了。我和張老師配合得非常好,簡直是最佳搭檔。他工程經驗很豐富,我理論上強一點;做事情他比較穩重,我比較偏激。在每週一上午的例會上,我佈置完本周的工作後,總要慷慨激昂地動員一番,張老師總是要擺一些困難潑潑冷水,真是一張一弛。以致於有一次他不潑冷水了,大家都不習慣。雖然我們所籌備CPU設計已經由來以久(從2000年初就開始做預研),討論了許多輪。但我們真正開始動手設計是2000年11月。剛開始是唐志敏和我領著七、八個研究生做系統結構設計,主要是確定指令系統以及流水線結構。在開始設計之初,李所長在全所會議上就定了"高性能、通用、一步到位"的目標。後來,唐志敏和我又確定了相容以及採用RISC結構這兩個具體目標。當時雖然IA-64結構炒得挺熱,但我們還是決定採用RISC結構,現在看來,這是對的。指令系統我開始建議與Alpha相容,但唐志敏定為與MIPS相容。說實在的,從2000年11月到2001年4月這段時間,我對CPU這個項目還不夠重視,因為我原來做機群及共用存儲系統也做得挺有意思。在這段時間裏,我自己還花一部分時間在做機群方面的事情,寫了一些論文,4月底還到美國開了一個並行處理方面的國際會議。5月初從美國回來後開始全力投入做CPU設計。由於時間緊,在確定流水線結構時,沒有看多少論文也沒有做多少實驗,主要是憑感覺和過去的積累,遇到權衡得失確定不了的事情,就與唐志敏討論讓他定奪。不過,現在回過頭去看,由於當時沒有參考別人的方案,也就少一些禁錮。現在有了一點時間開始看別人的做法,發現我們設計的基於操作佇列複用的動態指令流水線還是很先進的,有不少創新點,我自己覺得比MIPS R10000的指令流水線要強。

我們的工作真正全面鋪開是在五一放假上班後。一方面,系統結構已經基本定型,用C語言寫的模擬器已經差不多了,可以運行簡單的指令和短程式了。另一方面,6月份突然接到所裏的通知說今年10月份45周年所慶要展示我所在CPU設計方面的成果。從6月開始,我們開始了夜以繼日的三個月。在此期間,隊伍迅速擴大,現在已經有三、五十人。雖然只是一個邏輯設計,能夠在三個月內從無到有地設計出完整的通用CPU,我自己也覺得吃驚。(小貓註7)現在回想起來,成功的原因有三條,一是技術路線正確,二是有一支高素質而玩命的隊伍,三是計算所良好的環境和雄厚的技術儲備。教訓有兩條,一是工程經驗不足,二是對工具重視不夠。

小貓註7:三個月!我簡直是嚇呆了!

我覺得我們的技術路線在三個方面是很成功的。一是所長關於高性能通用CPU的定位。不少人認為,處理器最大的市場在嵌入式方面,中國的處理器設計應該定位在嵌入式上,沒必要或沒能力做通用處理器設計。誠然,嵌入式處理器的需求量很大,但大市場不一定能賺錢,小市場有時反而能賺大錢,因為後者是核心技術,別人做不了。Intel就是一個典型的例子,Intel處理器數量也只占全球市場的1.5%。其次,中國不是小國,核心技術自己不掌握不行。我倒是覺得象嵌入式處理器這樣的東西可做可不做,因為別人的嵌入式處理器價格很低,且不會卡我們。有的國外公司甚至主動提出,只要我們用他們的生產線,他們可以免費提供嵌入式的IP核。至於有人覺得我們做不了高性能通用處理器,我的回答是用我們自己的處理器做出一台曙光機來再說。雖然我們做高性能通用處理器上還很落後,但我覺得我們現在的條件比當年計算所做757和8920好得多,工具要好得多,工作量要小得多。任何事情,關鍵是要有人靜下心來認真地去做。

我們在技術路線上第二個成功之處是相容。回顧中國電腦發展的歷史,應該說,我們的"祖上"也是挺"闊"的,直到80年代初,我們的處理器設計技術不比人家差多少。落到今天這個地步,很大程度上是吃了不相容的虧。因為現在電腦中絕大部分費用不是花在硬體上,而是花在軟體上。自己設計指令系統,只能圖一時痛快;與其他主流指令系統相容,確實很麻煩,有時為了一條指令就得修改資料通路,增加不少東西,但卻可以一勞永逸。在我們組裏,有一個很精幹的作業系統組,才四個人,在3個月內搞定一切與軟體有關的東西,包括BIOS、LINUX 2.4內核、gcc編譯器、X-window、調試工具、Web Server等等,就是得益於我們的相容設計。當然,這四個人都是絕對的LINUX高手。我們甚至做到與別人的處理器引腳級相容,只要把別人的拔下來,自己的插上去就行。因此,目前主板也是用別人的。當然現在我們也在做主板設計,因為我們以後想做Infinite Band,不掌握主板。

我們在技術路線上第三個成功之處是穩紮穩打的設計方法。即從系統結構設計,到C模擬器設計,到Verilog仿真,到FPGA驗證,到標準單元投片,再到全定制投片的方法。在系統結構方案確定後,我們就設計了一個Cycle-by-cycle的C語言模擬器,該模擬器詳細描述了Godson處理器的系統結構,能夠類比處理器每一拍中每一位元信號的變化。設計模擬器有三個明顯的好處,一是驗證設計的正確性,我們先後在C模擬器上運行了LINUX 2.2、LINUX2.4、gcc等一系列系統軟體,發現了設計過程中的大量錯誤。二是用C語言描述系統結構更加嚴格,沒有二義性,比用文字寫的文檔更加明確。在C語言模擬器驗證正確後,把C語言模擬器的每個模組對應地轉換成 Verilog語言的一個模組花了不到一個月的時間。而且由於設計上的錯誤都在調試模擬器的過程中剔除了,在Verilog描述階段沒有再出現設計上的錯誤。第三個好處是C語言模擬器為軟體發展提供了一個開發平臺,為我們開發諸如BIOS等軟體提供了很大的便利。在把C語言的模擬器轉換成Verilog設計後,我們又在Verilog的運行平臺上成功地運行了LINUX作業系統。然後再綜合並形成FPGA的燒制檔。經過上述反復的驗證,聯調時基本一次成功。如果我們不是穩紮穩打,而是採取跨越式的設計方法,直接進行邏輯設計,恐怕會欲速則不達,因為越上層的設計,調試越容易,而越底層的設計,調試越困難,且剛開始時我們甚至連Verilog語言都不會使用。

在我們實驗室的牆上,有兩句口號,一句是「人生能有幾回搏」,另一句是「求實、求實、求實、創新」。第一句口號是我所研製曙光系列高性能電腦用的口號,我把它借來了。的確,在我們努力攻堅的三個月中,我們課題組的成員付出了難以想像的艱辛,尤其是在幾次調試的階段。好多人都有調試程式的經驗,但很少有人調試過作業系統,而在一個本身就可能出錯的處理器上調試過作業系統的人更少。我們的挑戰就在這裏,當出現一個錯誤時,應用程式、作業系統以及處理器本身都是懷疑的物件,需要多方面的協調及分析。我們曾經在C模擬器、Verilog模擬環境、以及FPGA驗證系統上分別都運行了LINUX作業系統,每次都是連續幾天幾夜的鏖戰。尤其是最後一次最為慘烈,因為即使發現一個很小的錯誤,修改一次設計再形成新的FPGA燒錄檔,需要至少8個小時。只有一天24小時工作,才能保證一天有修改幾次設計的機會。我算是在課題組中睡覺不算少的,但也有一個星期沒有正經睡覺的經歷。

在8月中旬的那個星期,星期一下班前得知第二天有領導要來所裏檢查工作,於是決定冒險把原來定的聯調時間提前一周,希望一次成功。但怕不成功影響士氣,只找了幾個骨幹在星期一晚上開始聯調。我們只有兩次機會,因為修改一次設計就需要8小時。星期二淩晨四點,把檔案燒入FPGA,沒有任何動靜。很快就用邏輯分析儀發現了問題。原來是由於啟動時與主板握手機制有缺陷,導致主板一直沒有撤掉重定信號。趕快修改並在中午12點形成了新的FPGA燒錄檔,寫入後還是沒有任何動靜。下午領導來檢查,開了一下午會,晚上接著調試,發現CPU插卡上有兩個焊點短路,去掉後主板上的液晶顯示器上如約顯示出"GODSON"的字樣,我們一片歡呼。我們決定連續作戰,到星期三晚上11點左右,成功地運行經過改造的主板上的BIOS系統,相當於是一個簡單的作業系統,又是一片歡呼(這時課題組的其他成員才知道我們是在我們自己的CPU上運行程式)。於是12點要求所有人回去睡覺後回家睡覺。晚上雷聲大作,風雨交加,以示慶賀。我興奮得難以入睡,因為此時始覺三個月來一直緊緊壓迫我的壓力稍有緩和。星期四上班後開始試圖啟動LINUX作業系統,但每次都在最後進入用戶態啟動各種應用程式時出錯。懷疑是TLB的問題,因為訪問用戶空間才開始使用TLB。一直跟TLB鬥爭了三天兩夜,中間發現了不少問題,每次充滿期望地改過來卻總是獲得失望,直到星期六吃晚飯前恍然大悟地發現問題,吃完晚飯後趕快修改,8月19日淩晨2點多形成FPGA檔並寫入FPGA,2點42分,螢幕終於上出現了"login"字樣,登錄進去隨便玩,和使用其他機器上的LINUX一樣。我當時用vi編輯了一個文字檔,記錄這一歷史時刻,存檔退出後把它ftp到另一台機器上發給唐志敏和所領導,並興奮得馬上給唐志敏打電話告訴他這個好消息。那時雖然我們都已經極度疲憊,但在場的6個人都興奮得毫無睡意,聊天到天亮。記得那晚也是風雨交加。早上6點大家回家睡覺,不知別人怎麼樣,我連續睡了20多個小時,補上了這一星期的覺。在此之後,我們又跟前述"偏執狂"的浮點測試程式鬥爭了兩個禮拜,不過已經沒有那麼辛苦了。

我有時候覺得自己比周扒皮還狠,但我們課題組的成員確實很玩命。有好幾次,我在早上六、七點鐘打開實驗室的門,發現有些人手裏扶著滑鼠就靠在椅子上睡著了。我是容易受感動的人,看到這樣的場景忍不住想落淚。但我還是叫醒他們問他們昨天晚上的進展並讓他們接著幹。我有一個學生,近兩個月來很少在淩晨4點前睡覺,而常常到八、九點鐘我上班後就會把他叫起來,因為我急於瞭解昨晚的進展。記得有一次我們在深夜趁等電腦的運行結果,大家聊天,說到了生死。他說最不希望老死,看著自己的生命一點點耗盡。我們有一種觀點,我們現在落後這麼多,別人不比我們笨,如果大家都一樣一週五天一天8小時上班,恐怕很難趕上人家,(小貓註8)惟有象當年搞"兩彈一星"一樣拼命,至少得累死一批人。惟有這樣,我們才能不受欺負,我們的子孫才有希望重新做到「犯我大漢者,雖遠必誅之」。我經常說,一盆花用水澆灌固然能夠盛開,但用心血澆灌會更鮮豔。我們的CPU事業就是一朵花,我們在用心血澆灌她。我們給我們設計的處理器取了一個很有傳統特色的小名叫"狗剩",希望名字賤一點容易養大,音譯成英文就是Godson。(小貓註9)

小貓註8:說得實在很對呀....我開始對上述的「三月做CPU」產生無比敬意...
小貓註9:說實在話我不相信。「狗剩」多難聽呀!譯成英文竟然搖身變成godson?son of the god?騙誰呀!:p

至於我們牆上的另外一句口號「求實、求實、求實、創新」是對計算所所訓「求實、創新」的一個注解和發揮。因為我感到現在中國科技界太浮躁,炒作的人多,做事的人少。因此希望我們組的人把工作做扎實,少吹牛多做事。其中第一個求實是關於做學問的目的,要為了做學問而做學問,而不是為了名和利。要真正做到「人不知而不慍」。這一點說起來容易,做起來很難。像我們在計算所工作的人,大概在利上不是非常計較,只要日子過得下去就行了,但在名上就很難看得開,這一點,我自己雖然做不到,但心嚮往之。

第二個求實是關於做學問的態度,就是要把工作做到實處,就是要艱苦奮鬥,就是不要為了發表論文而寫文章。在科研上哪怕是一點點的創新,都需要大量踏實的工作,這是客觀規律,誰也躲不過。我們在科研中經常碰到有些人不願做具體繁瑣的工作,一心想發表論文。這種現象很普遍,我自己也這樣,但以後要力戒之。

第三個求實是關於做學問的方法,要勇於實踐,不要紙上談兵。「學而時習之」就是認識和實踐的不斷循環往復。學問並不僅僅是知識淵博,更多的是體驗和感覺。沒有對所做工作的深刻體驗,就難以發現問題,就難以創新。而這些體驗,沒有經過身體力行的大量實現,在別人的文章裏是看不來的。

很多人認為我國沒有自己的處理器,主要是因為工藝水平上不去,因此,處理器設計不應是計算所的事情,而是做微電子設計的人的工作。誠然,回顧我們國家的處理器設計歷史,在80年代後全面落後的一個重要原因是沒有自己的製造工藝,導致處理器設計隊伍整體上垮掉,人員流失。但現在情況發生了變化,投片已經沒有大問題,主要是沒有設計。而處理器設計決不僅僅是邏輯設計。處理器設計是大系統,惟有對包括作業系統、編譯、體系結構、I/O等在內的整個電腦有全局的把握才能設計出高性能處理器。就好像一個公司,固定資產和資金只提供了必要的條件,關鍵還在於管理。在通用電腦中,操作系統和系統結構設計的的配合尤為重要,有些指令專門是為作業系統設計的,尤其是在系統安全、存儲管理、原子操作、例外處理等方面。我在用我們自己的結構實現MIPS指令系統的過程中,有一個深刻的體會,就是一個指令系統十幾年來一直在發展是有它的道理的(MIPS指令系統經歷了MIPS I、MIPS II、MIPS III、MIPS IV的發展過程)。有時候通過對作業系統的分析瞭解到一些指令的妙用,體會到設計者設置這些指令的初衷,真是讓人拍案叫絕。所以,我一直很慶幸我們採用了相容的做法,如果自己設計指令系統,沒有十幾年的實踐,是不會完善的。

放眼中國,在體系結構、作業系統、編譯方面的綜合力量比計算所強的不多(我比較佩服的其他單位只有一家),因此計算所做CPU設計是很有優勢的。雖然前幾年的折騰使計算所元氣大傷,但底子還在。在開始做CPU設計之初,我對這件事情的複雜性估計不足(這是一個深刻教訓),只是領著八、九個研究生做。後來在專案逐漸展開後,發現現有的人力頂多能做完邏輯設計,要把通用作業系統啟動起來是遠遠不夠的。無奈之下,只好從原來做機群的組和做嵌入式作業系統的組中調了幾個作業系統高手過來,事情馬上有了起色。比如,我們要在C模擬器上運行作業系統,需要對作業系統內核進行裁剪和修改(如去掉一些與主板配置緊密相關的初始化),這種事情沒有對作業系統的深入把握是不會做的。後來,又從其他地方得到一些人員補充(我現在體會到電影上打仗時指揮員為什麼非常重視預備隊)。現在,我們組已經有了三、五十人的規模,兵不在多在於精,這些人全是年輕的槍手,素質很高,又很玩命。

就我目前所做的事情來說,計算所幾乎是要什麼有什麼。計算所的科研環境很好,尤其是體現在後勤服務上。舉幾個小例子。第一個是工作展開後通宵加班多了起來,我們自己因地制宜地在一些桌子上鋪上鋪蓋搭了幾張簡陋的床。當鄧書記知道這種情況後,馬上找人騰出一間小屋子,放了六張床,大大改善了我們加班時的休息環境。書記還讓人每天為加班的人準備餅乾、速食麵等方便食品。第二個例子是,隨著工作的不斷深入,組裏需要不斷添置新的微機,但機器都是隨用隨買(因為以前沒有經驗,不知道要買多少機器)。對此,業務處的同志們總是全力配合,保證組裏及時用上新機器。最快的一次,我在上午11:30向業務處王玉潔老師提出購機申請,下午1:30機器已經送到實驗室。這在一個財務制度健全、審批嚴格的事業單位是很難想像的,更何況是下班時間。第三個例子是有一次我們急需一塊Matrox G200顯卡,但由於是幾年前的產品,跑遍了中關村也沒有買到。萬般無奈,只得通過EMAIL向所內的部分老師緊急求助,熱心的業務處於天波老師馬上在網路上發佈這個消息,不到一個小時,在王貞松老師的幫助下,就找到了這塊顯卡。這至少減掉了我們兩個星期的工作量,因為如果用其他顯卡,我們得自己寫驅動程式。有效的後勤保障使我有時後覺得不把事情做好,對不起這些熱心幫助我們的人。

我們在前一段時間的教訓有兩個。一是工程經驗不足,主要體現在以做研究的方法來做工程,以及對任務的難度估計不足,科研力量配備不夠,導致初期效率不高。幸虧後來工程經驗豐富的張志敏老師的加盟大大扭轉了我們以做研究的方法做工程項目的局面,提出了"後牆不倒"的目標。此外,也幸虧計算所技術儲備雄厚,要什麼人有什麼人,使得我們得以在後期提高效率。不過,我們目前在文檔管理等方面還是很存在問題的。第二個教訓是對工具重視不夠。現在做處理器設計,EDA工具是十分重要的。我們由於不夠重視EDA工具,吃了不少虧。有一次佈線佈不通,只要修改一下設置就行,可惜我們都不會。

下面我可以介紹一下Godson的技術特點。瞭解了這些技術特點,就可以瞭解為什麼Godson工作在12.5MHz時就有50MHz的486的性能。Godson的流水線結構是我自己覺得比較得意的地方。設計的時候沒有參考其他處理器的流水線,完全是憑感覺。Godson流水線包括了若幹目前處理器設計中最先進的技術,如流水線動態調度,Tomasulo演算法,寄存器重命名,猜測執行,精確例外處理,64位的浮點運算部件,CACHE技術等,並且在某些方面有所創新。

流水線設計中比較困難的兩個問題是例外的處理和相關的解決。首先我們把例外處理與流水線緊密地耦合在一起,在資料通路的設計中例外結果和正常結果並行,在執行過程中例外結果和正常結果不加區別,只有在指令結束階段才對例外結果進行特殊處理。此外,我們把轉移指令猜測錯誤作為一種特殊例外,利用例外處理的取消和保持現場精確邏輯。這樣不僅可以簡化設計,而且可以讓轉移指令後面猜測執行的指令盡可能地往下執行。我們的流水線是動態流水線,採用de-coupled結構,控制邏輯分佈在每個模組之中。在流水線的控制中,"讓流水線流起來"是我們設計的理念。在指令流水線中,資料相關和控制相關都會引起流水線等待,如後面指令用到前面指令的結果或後面指令是否執行由前面轉移指令成功與否決定。對於因數據相關引起的等待,我們的原則是儘量推遲到不得不等的時候才等。即對於源資料未準備好的指令,指令解碼和發射時並不停下來等待資料(簡單的靜態流水線通常在解碼時停下來等待未準備好得資料,堵住了後面指令的繼續執行),而是建立資料依賴關係,由功能部件通過偵聽結果匯流排解決相關。這樣資料結果一出來,等待它的指令馬上可以進行運算,不用經過寫回到寄存器再讀出來的過程,而且前面指令的等待不會堵塞後面指令的繼續執行。對於控制相關,我們也是讓轉移分支的指令先猜測地執行起來,到實在不得不停下來時才等待轉移目標的確定。如果轉移猜測成功就立即繼續前進,如果轉移猜測不成功,就利用例外處理的指令撤銷機制恢復正確現場。流水線設計中,"簡潔、流暢"是是我們追求的目標,前者保證流水級間的控制簡單,延遲少,後者保證流水線的高性能。在我們聯調成功後到現在,已經對流水線進行了4次較大調整,每次都更加簡潔、流暢。我想在正式投片前還會有幾次調整。此外,Godson的浮點運算部件流水線設計也有自己的特點。

Godson體系結構的另外一個特點是結構靈活,模組化好,可以根據不同的需求對功能部件進行任意裁剪以滿足不同的應用。由於Godson的流水線採用de-coupled結構,控制邏輯分布在每個模組之中。增加或減少功能模組對其他部分沒什麼影響。如對於某些嵌入式應用,不需浮點部件,只要去掉浮點ALU、浮點乘法、以及浮點寄存器模組,不用對其他模組做任何修改。

系統安全設計也是Godson的一個重要特點。Godson系統除了實現MIPS系統要求的安全機制外,還針對網路攻擊實現了一種新的訪問限制機制。緩衝區溢出是一種非常普遍、非常危險的漏洞,是目前大多數網路攻擊所採取的辦法。在各種作業系統、應用軟體中廣泛存在。利用緩衝區溢出攻擊,可以導致程式運行失敗、系統死機、重新啟動等後果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。Godson通過允許作業系統對堆疊段的取指進行限制,從而有效地防範利用緩衝區溢出進行的攻擊。

當然,Godson在目前設計上還存在一些缺陷,主要是對CACHE重視不夠。目前的設計只有4KB的指令CACHE和4KB的資料CACHE,都是直接相聯(這與FPGA容量有關,目前的設計已經使用了150萬門的FPGA的85%-90%的面積)。在性能測試時發現對訪存要求較高的程式Godson的性能不夠理想。如當Godson運行在12.5MHz時,對於訪存不敏感的程式,100MHZ主頻的IDT 64474CPU(R4000內核)的性能是Godson的3-5倍,但對於訪存敏感的程式,IDT64474 的性能是Godson的6-8倍。IDT 64474有16KB的指令CACHE和16KB的資料CACHE,都是二路組相聯,無論是CACHE容量和組織方式都比Godson強。在投片前一定要對CACHE部分進行改進.

關於Godson的未來發展,我們有一個雄心勃勃的計畫。第一步是在目前設計的基礎上經過優化後進行標準單元的投片,主頻在200-300MHz左右,爭取2002年完成,用於個人工作站/瘦用戶端PC及電子政務等。第二步是設計雙發射64位元的結構(目前為單發射、定點32位元、浮點64位),投片主頻為500MHz左右,爭取2003-2004年完成。用於高性能伺服器,也可以搭成機群做高性能計算。第三步爭取在處理器間並行上有所突破,設計基於Crossbar的大SMP結點,每個SMP結點16-64個CPU,用於高性能計算。在做處理器設計之前,我們做了近十年的共用存儲系統結構研究,但受囿於CPU和作業系統,只能紙上談兵,頂多做做軟體實現。現在自己做CPU,可以為所欲為,好像被束縛的手腳一下子得到了自由。如果能夠把我們在共用存儲並行系統方面十來年的積累做到實用系統中去,簡直是爽呆。如果可能的話,爭取實現串列程式採用多線程技術自動並行化,這需要編譯、作業系統及系統結構的全面突破。

沒做多少事,寫了這麼多,是不是有點過分。寫這種東西其實比寫程序還累。(2001年9月/胡偉武)

小貓最後註:如果胡先生這樣叫做「沒做多少事」,那我的人生真是虛度了... -_-"

arrow
arrow
    全站熱搜

    瘋小貓 發表在 痞客邦 留言(0) 人氣()