設萬維讀者為首頁 廣告服務 聯繫我們 關於萬維
簡體 繁體 手機版
分類廣告
版主:彎刀
萬維讀者網 > 競技沙龍 > 帖子
ZT:龍芯II
送交者: fifa 2003年12月22日19:43:00 於 [競技沙龍] 發送悄悄話

2003-12-20 09:38  作者: 胡偉武(“龍芯2號”主要研發人員,本文是他在BBS上發表的一篇文章。)

  2003年10月16日深夜,喧囂了一天的計算所北樓終於沉寂了下來,我獨自坐在北樓105房間忐忑不安地等待着。剛才還有鄭為民和一個學生跟我在一起,幾分鐘前我派他們到後面的芯片小樓取邏輯分析儀去了。與北樓隔着一個籃球場的芯片小樓里還有10來個課題組的弟兄,他們都象我一樣忐忑不安地等待着。  17日凌晨0點30分,樓道里傳來了有節奏的腳步聲,在空曠而寂靜的樓道里顯得特別有力。腳步聲越來越近,我的心一下子提了起來,咚咚的腳步聲象敲在我的心上,因為我知道,我們的狗剩2號回來了。  105房間的門被推開,張珩風風火火地闖了進來,手裡抱着一個方盒子。他是我專門派到上海去封裝廠家取狗剩2號芯片回來測試的。我們小心翼翼地打開盒子,幾十片狗剩2號芯片象等待檢閱的士兵一樣整齊地排列在專用的包裝盒裡。一個電話撥到芯片小樓,不到兩分鐘,105房間就聚集了六、七個人,他們都是下午剛剛成立的聯調組的成員。  我挑了幾個芯片,在用萬用表對芯片進行一些簡單的靜態測試後,從中選了一個芯片放到子卡的插槽中蓋好,並把子卡插到主板上。小心地按了一下電源開關,顯示屏上沒有動靜,心裡一陣緊張。試了幾次後,換一個子卡,放上芯片後插到主板上,一按電源開關,顯示屏一陣跳動,串串字符如約而至。我們一陣歡呼,剛才提到嗓子眼的心放回到心窩裡先。  在啟動了一個簡單的BIOS系統以後,開始啟動LINUX操作系統,一切都很順利。1點10分,屏幕上出現了LINUX操作系統的登錄提示符“login:”。在拿到芯片的40分鐘後,剛才等待時的緊張心情一掃而光。我們趕快打電話到芯片小樓告訴在那裡等候的其他同學。鍾石強還給我的妻子發了個短信,今晚她也在等待我們的消息。幾分鐘後狗剩2號收到了出世後的第一個祝福。  4點30分,狗剩2號通過了其他的測試。我們用裝有狗剩2號的計算機在我們CPU組的內部BBS上灌了狗剩2號出世後的第一瓢水,並發了幾封EMAIL。我決定狗剩2號的第一次聯調先告一段落,拿出放了很久的硅谷的一個朋友送的一瓶XO在芯片小樓的會議室里每人半紙杯慶祝了一下。喝完酒後大家興致不減,根據事先的約定又打車到天安門廣場看升國旗並去毛主席紀念堂向毛主席報告。今年是毛主席誕辰110周年,我們這款芯片的名字就叫MZD110。  6點25分,我們又一次站在天安門前的國旗杆下,看着紅彤彤的國旗在國歌聲中冉冉升起。去年在接受《東方之子》節目採訪時,他們曾問我在狗剩1號研製成功後看升國旗時心裡想什麼,我那時真忘了想什麼了。這次我試圖去想一些有意義的事情,比如什麼豪言壯語之類的。可是面對國旗,腦袋裡一片空白,只是在國旗猛地串上杆頂的那一剎那,24小時前楊利偉走出神舟5號艙門沖大家揮手的畫面突然出現在我腦海中,以至於在去前門吃早飯的路上這個畫面還久久浮現在面前,揮之不去。  在2002年9月28日龍芯1號的發布會上,李國傑所長曾經引用《易經》中的話說:“萬物生於有,有生於無”。如果說狗剩1號解決的是從0到1的問題的話,那麼狗剩2號要解決的是從1到10的問題,即狗剩2號的性能至少是狗剩1號的10倍以上。事實上這也是我們在申請 中科院知識創新工程重大項目和863計算機軟硬件主題重點項目時唐志敏提的指標。在這 兩個項目厚厚的申請書和合同書中,我只記住了兩個數字,一個是主頻500MHz以上,一個 是SPEC CPU2000的值達到300分以上。從承擔項目之日起,這兩個數字就象兩個緊箍咒一 樣緊緊地箍在我的頭上(我一直認為這個項目是863項目中立得最成功的項目之一,只用 兩個數字就把要做的事情表達得足夠清楚了)。  從現在看來,主頻500MHz以上還好辦一些,下死工夫總是可以做到的,用0.13微米的工藝 更是容易做到。難的是SPEC CPU2000的分值達到300分以上。所謂SPEC CPU2000,就是一 組國際公認的標準測試程序,用這組程序在目標機器上運行,根據實際運行時間算出該計 算機的運行速度指標。這種標準測試程序從SPEC CPU89、SPEC CPU92、SPEC CPU95、到 SPEC CPU2000已經發展了好幾期。其中SPEC CPU2000覆蓋的應用面最廣,包括文件壓縮、 FPGA布局布線、編譯器、組合優化、國際象棋、文字處理、計算機視覺、編程語言、解釋 器、數據庫、布局布線模擬器、量子動力學、淺水模型、三維勢場求解、偏微分方程、三維圖形庫、計算流體動力學、圖象識別/神經網絡、地震波傳播模擬、計算化學、數論/素數測試等等,光源代碼就有上百萬行。打分的標準是把這組程序在Sun公司一台300MHz的四發射Untra Sparc II 上運行的時間做為標準運行時間,其分值為100分,其它機器運行時間跟標準時間相比算出相應的分值。一般來說,現在較流行的四發射的主流RISC處理器象Alpha 21264、MIPS R12000、IBM Power III等在400MHz到500MHz的情況下SPEC CPU2000的分值可以達到300分左右,而Pentium III在800MHz時SPEC CPU2000的浮點分值 才200多分。狗剩2號要達到300分,至少要與1GHz以上的PIII或PIV的性能相當。因此,雖然做500MHz雖然也不容易,但更難的是SPEC CPU2000的分值達到300分以上。  提高處理器的性能,提高主頻和優化軟硬件結構不可偏廢,光強調主頻和光強調結構都是不行的。就象要把100根木頭從A地扛到B地,甲每10分鐘一個來回,每次扛1根木頭;乙每20分鐘一個來回,每次扛4根木頭;丙60分鐘一個來回,每次扛6根木頭。我們不能根據甲跑得快(主頻高)就說甲的性能最高,也不能根據丙每次扛得最多(每拍執行的指令多)就說丙的性能最高,性能是一個綜合的東西。當然,還有其它要考慮的因素,如甲乙丙三人每小時的報酬(處理器的功耗、面積)等。雖然狗剩1號的成功對我們來說是一個巨大的進步,但有一件事我一直深引以為恨,那就是狗剩1號的性能沒有達到預想的目標。  雖然主頻不低,但跑起程序來比起類似結構的RISC處理器以及相同主頻的PII還有一些差距。SPEC CPU2000的分值也不高。我曾經整日整夜地泡在機房運行各種測試程序,並試圖通過軟件優化的方法提高性能。雖然取得了一些效果,但不理想。後來的性能分析表明,有些狗剩1號性能瓶頸其實完全是可以通過簡單的優化克服的,可惜當時項目推進得太快,沒有時間做充分的性能分析和優化。這件事使我極其鬱悶,因此把性能分析不夠作為狗剩1號設計過程的一個重要教訓,並發誓在狗剩2號的設計中要一血前恥。知恥近乎勇,後來狗剩2號步步為營的性能分析果真為狗剩2號提高性能發揮了巨大作用。在中科院領導對我們承擔的龍芯2號重大項目進行立項審查的會上,李老師、唐志敏和我在向院黨組匯報後準備離開時,江院長追出來跟李老師說:“李院士,我就把寶壓在你身上了”。在863計算機軟硬件主題專家對我們承擔的龍芯2號項目進行立項審查的會上,我做完報告後,專家組組長懷進鵬老師曾聲色俱厲地說:“胡偉武,這個項目是863計算機軟硬件主題最大的項目,完不成任務提頭來見!”這兩件事給我很大的觸動,讓我想起上甘嶺戰役前夕彭德懷曾對秦基偉說:“我們要對朝鮮的歷史負責”。  狗剩2號的設計在狗剩1號tapeout前就開始籌劃,主要是唐志敏和我圍繞我們申請的中科院和863的項目進行調研並確立在2004年項目結束時SPEC CPU2000的分值達到300分的目標 ,並在此基礎上確定64位結構和4發射的目標。根據項目目標及狗剩1號研製的經驗和教訓 ,我們確定了狗剩2號研製的如下三條設計原則。  一是充分發揮結構設計優勢和軟硬件協同的設計原則。即通過處理器中各個層次的並行性開發來提高性能。這些並行性包括指令級並行、數據級並行以及線程級並行。其中指令級並行主要是四發射結構的實現,即在指令流水線的任何一個階段每拍都執行四條以上的指令。為了有效發揮多發射通路的效率,必須實現充分的亂序執行技術,減少指令間的互相 等待。數據級並行性的開發主要是通過SIMD的技術實現向量指令。線程級並行性包括單處理器的多線程技術以及多處理器的多線程技術。狗剩2號在並行性開發上主要開發指令級並行技術,並通過把浮點部件與媒體處理共用的方法實現數據級並行的SIMD技術。軟硬件協同主要指通過編譯優化及硬件對編譯器的支持提高性能,既不片面追求複雜的硬件大包大攬,也不把沉重的優化負擔完全壓在編譯器身上。編譯器對提高性能十分重要,我們曾有這樣的體會:在同一台機器上,用不同編譯器編譯出來的同一個程序,運行時間竟相差75%。  二是以物理設計指導結構設計的原則 首先,流水線的最大邏輯路徑不是由體繫結構設計的需要來確定,而是由物理設計的要求來確定。即先確定每一級流水線的最大延遲並在此約束下進行結構設計。其次,在做結構設計時,心中要有物理設計的概念,即要明白相應的邏輯在物理上是什麼樣的。在狗剩2號設計過程中,結構設計人員至少做到網表級。三是設計和實現方法上穩紮穩打的原則 首先,重視Cycle-by-Cycle的C模擬器的設計並把C模擬器作為詳細結構設計的文檔是我們在狗剩1號開發過程中形成的一條最重要的經驗,即“可執行的結構設計”的概念。在設計初期就通過充分的仿真與驗證不僅不會影響進度,而且會加快進度。此外,狗剩2號的功能設計和物理設計也分成幾步。第一步,還是採用標準單元設計,只在很有限的局部做全定製(如寄存器堆),主頻200-300MHz以上,功能上不實現二級CACHE,爭取儘快完成流片。第二步,功能上增加二級CACHE接口或/及DDR接口等,物理設計上使用更多的宏單元,但設計方法還是基於標準單元的方法,主頻在300-400MHz以上。第三步,功能上增加對多處理器系統的支持,在更多的地方使用全定製單元或使用全定製流程,主頻爭取在400-500MHz以上。狗剩2號最後的流片將以全定製為主。  狗剩2號的設計包括結構設計、邏輯設計以及物理設計三個階段,這三個階段互相重疊,其中結構設計階段和狗剩1號的設計也有所重疊。狗剩2號的結構設計斷斷續續地進行了好幾個月。剛開始是在2002年四、五月份在進行狗剩1號物理設計的同時對狗剩2號的系統結構進行了初步的考慮。在對市場上的主流處理器如Alpha 21264、MIPS R10000、Ultra Sparc III、Power III、HP PA8700、PIV、IA64等及學術界的主要工作進行調研的基礎上基本確定了狗剩2號的寄存器重命名、動態調度以及運算部件的架構。到六、七月份隨着狗剩1號物理設計和系統開發工作的展開,狗剩2號的結構設計幾乎停了下來。那時候我們組一共只有二、三十號人,很多人員的工作都是重疊的,根本沒有力量同時做兩件事情。  在2002年7月中旬狗剩1號tapeout之後,利用等待芯片回來的時間把狗剩2號的結構設計再次提上日程。7月15日研究生部的靳曉明老師打電話叫我到在四川廣元召開的研究生學術研討會上做個特邀報告,本來應該是徐志偉老師做的報告,徐老師臨時有事去不了因此派我救場。唐志敏已經告訴靳老師我剛tapeout一個芯片,應該有空,所以推也推不掉。開完會後還要去九寨溝,需要三、四天才能回來。我走之前臨時決定把狗剩2號的部分設計人員帶到廣元,準備在路上對狗剩2號的結構進行討論。我和中科院研究生院的兩位老師一起坐火車頭天走,安虹老師、張福新和范東睿坐飛機第二天走,幾乎同時到的廣元。那時候我女兒正在放暑假,我愛人在狗剩1號tapeout之後剛到一個公司上班,因此我把6歲的女兒也一起帶上了。  後來的事實證明我臨走前做的決定是十分正確的,在廣元和九寨溝的幾天效率極高,基本確定了狗剩2號的結構框架。那幾天我們白天根據會務組的安排活動,晚上討論狗剩2號的結構,並且根據討論結果形成狗剩2號結構設計的初步文檔,每天都到凌晨一、二點。由於處理器的寄存器重命名以及動態調度結構已經基本確定,因此討論的重點是取指和訪存部件的結構。  在從廣元去九寨溝的路上我和范東睿坐在汽車的最後一排討論狗剩2號的取指和譯碼部分 的結構,汽車在路上顛簸了一整天,我們也討論了一整天。取指與譯碼部分的設計空間很大,包括採用何種轉移猜測算法、多發射情況下如何消除轉移指令後面的延遲槽、取指及轉移猜測是以指令為單位還是以發射塊(四條指令)為單位、轉移猜測是在取指還是在譯碼階段進行、修正BHT和BTB的時機、如何提高指令CACHE的性能、以及指令TLB和數據TLB 的關係等。其中如何消除轉移指令後面的延遲槽討論的時間最長,主要是對傳統的BTB方法和Alpha 21264中採用的line prediction方法進行反覆的比較和分析。我從小就喜歡坐比較顛簸的汽車,汽車越顛精神越好,范東睿精神也不錯,因此一路上效率極高。晚上8點汽車到達九寨溝時,狗剩2號的取指部分架構已基本確定。  訪存部分的結構比取指部分複雜。一方面,它是與操作系統關係最密切的部分,其功能是否完善是支持通用操作系統的關鍵因素;另一方面,它是提高處理器性能的核心部件之一。如果CACHE訪問效率不高,流水線的其它部分設計得再好也沒有用。這一點在狗剩1號中我們已經有所體會。學術界與企業界都對如何提高訪存性能作了大量研究,設計空間很大,核心問題包括如何降低流水線延遲、如何提高CACHE命中率和降低由於CACHE不命中引起的等待延遲、以及如何解決訪存的RAW、WAR、和WAW相關等等。在隨後的幾天中,我們對這些方面進行了反覆的權衡和討論。直到在回北京的火車上才有比較粗的思路。  有意思的是,一路下來,我女兒看我們的工作,耳濡目染,對CPU設計也有了自己的心得 。直到今天我問她什麼是CPU,她還說“CPU就是在一張紙上畫些方框,然後用線和箭頭把這些方塊連起來,再塗上點顏色,寫上一些字,最後一燒,燒出一個亮晶晶的小方塊”。  最近我女兒經常在用狗剩2號做的Linux PC上玩遊戲。我告訴她這就是我們在九寨溝畫的 方框“燒”出來的,她感到很詫異。在2002年8月10日狗剩1號首片調試成功之後,狗剩2號的設計工作又慢了下來,全組的主要力量放在了狗剩1號的系統開發上面。雖然由於狗剩1號的系統開發和性能分析耽誤了一些時間,但我自己在狗剩1號上玩了近一個月後有很大的收穫。尤其是對性能和主頻的關係有了更深入的認識。比如,對於有一些訪存密集的應用,主板頻率83MHz而CPU頻率250MHz時的性能還不如主板頻率100MHz而CPU頻率200MHz的性能。現在想起來,一個處理器的性能就象一個城市的交通系統的吞吐率,可能由於某幾處的堵塞而影響整個城市的吞吐率,只要把這幾處疏通了,雖然花的力氣不大,但吞吐率會極大地提高。2002年9月28日狗剩1號發布會後,狗剩2號的設計工作全面展開。10月2日,我帶着張福新和李祖松到母校中國科大利用十一長假進行狗剩2號的C模擬器封閉開發,順便向母校報告一下我們的工作。在科大借了半間原來的庫房呆了一個多星期,基本完成了C模擬器的代碼編寫。在對結構進行細化的過程中發現了好多原來沒有考慮到的問題。對於這些問題我們有時候爭辯得很激烈。例如在轉移猜錯取消時需要判斷正在執行的指令中哪些是該轉移指令前面的,哪些是該轉移指令後面的,張福新和李祖松的觀點是參照MIPS R10000使用的方法,而我覺得那個方法太麻煩,希望有更簡潔的方法。我們一直爭論了兩天,在爭論的過程中互相啟發,終於找到了一種簡潔而高效的方法。  2002年10月8日回北京時狗剩2號的C模擬器已經基本成型。我們繼續在我的辦公室進行半封閉式的開發,主要是繼續完善C模擬器並開始調試。那段時間我們每周只有二、四、六晚上休息,其它時間都在調試。調試過程中也調動組裡的其它人寫了不少測試向量。11月中旬在C模擬器中成功啟動LINUX操作系統,開始對C模擬器進行性能優化以加快模擬速度並用C模擬器對狗剩2號的結構進行性能分析。  在此期間以及以後的幾個月內,我們在C模擬器上運行了完整的SPEC CPU2000的幾乎所有程序以及八十年代比較流行的性能測試程序dhrystone和whetdstone等,對狗剩2號的性能進行初步的分析。在運行上述程序過程中還發現了不少設計上的bug和考慮不周的地方。印象比較深刻的是由於訪存操作的亂序執行導致兩個或多個訪存操作之間互相替換CACHE 塊並引起死鎖。另外一件印象比較深刻的是MIPS指令系統規定轉移指令的延遲槽指令不能是轉移指令,否則處理器的行為不確定,但我們在C模擬器中發現在我們的設計中如果轉移指令的延遲槽指令也是轉移指令時也會導致處理器死鎖。雖然這是由錯誤的程序引起的,但也是結構設計考慮不周的地方,對於錯誤的程序我們可以給出錯誤的結果,但不能把機器搞死。  由於張福新和李祖松的加入,狗剩2號的C模擬器比狗剩1號完善很多,包括checkpoint在內的很多功能都加到模擬器中,此外,C模擬器的運算速度也大大提高了。張福新還順手開發了不少小工具。  2002年11月底,我覺得C模擬器已經基本穩定,就召開了狗剩1號總結以及狗剩2號部署的會議,全面部署狗剩2號的RTL設計工作。  2002年12月初我們組建了RTL設計的隊伍,由於我們人手有限,RTL編寫的人員都是從各組抽調的,我自己也負責寄存器重命名和幾個隊列模塊。狗剩2號的RTL設計大致可以分為三個階段。  第一階段為設計階段。從12月初開始大家花了約半個月的時間了解狗剩2號的結構,同時我開始進行頂層模塊的設計,主要是每個模塊的互連關係、接口總線及觸發器的定義。12月28日完成頂層模塊的設計並啟動各模塊RTL的編寫。由於有Cycle-by-Cycle的C模擬器作為參照,2003年1月14日就完成所有模塊RTL的編寫並編譯通過,1月21日成功運行第一條指令。在此基礎上,經過三天三夜的努力,到1月25日成功運行狗剩1號中使用的包括所有MIPS指令的一段功能測試程序。由於2002年春節沒有放假,因此1月25日後全組放假。  

0%(0)
標 題 (必選項):
內 容 (選填項):
實用資訊
回國機票$360起 | 商務艙省$200 | 全球最佳航空公司出爐:海航獲五星
海外華人福利!在線看陳建斌《三叉戟》熱血歸回 豪情築夢 高清免費看 無地區限制
一周點擊熱帖 更多>>
一周回復熱帖
歷史上的今天:回復熱帖
2002: 孫雯的故事
2001: 徐根寶的革命早節是什麼?
2001: 米盧到底神奇嗎?