編者:本文作者為“龍芯2號”主要研發(fā)人員,本文是他在BBS上發(fā)表的一篇文章。
第三個階段為調(diào)整和優(yōu)化階段,這個階段是狗剩2號邏輯設(shè)計的關(guān)鍵階段。與聯(lián)調(diào)階段相 比,優(yōu)化階段發(fā)現(xiàn)的bug較少,但根據(jù)對RTL進行綜合以及用C模擬器進行性能分析的結(jié)果對整個設(shè)計的延遲、面積、性能進行了持續(xù)的優(yōu)化。通過初步的優(yōu)化,狗剩2號的延遲降低了一倍多,面積降低了30%以上,相同頻率的性能提高了30%以上。在這個階段的每一周都充滿了激動人心的改進,深刻體會到精益求精的道理?鬃诱f“食不厭精”,處理器設(shè)計更是如此。用1%的工夫可以完成一個正確的設(shè)計,但需要用99%的工夫來優(yōu)化它。
在狗剩2的RTL優(yōu)化過程中,我們總結(jié)了三條經(jīng)驗。第一條是精益求精的經(jīng)驗。做一個正確的設(shè)計和做一個精品的設(shè)計是有很大區(qū)別的。為了做到精益求精,思想上要永不滿足,執(zhí)著改進。碰到復雜的問題,不能滿足于用復雜的方法來解決,要努力把問題簡單化再用簡單的方法來解決。第二條經(jīng)驗是在執(zhí)著于細節(jié)的理解和把握的同時退后一步進行的全局的觀察和思考是十分必要的。在狗剩2號的優(yōu)化中有很多都是在項目的推進過程中退后一步進行文檔整理、看文章、或封閉自查時得到的啟示。對設(shè)計的微觀了解和宏觀把握是不可偏廢的。如果對設(shè)計的細節(jié)不做一定的了解,則在整理文檔或看文章過程都比較虛,不會有靈感出現(xiàn);反之,如果過于執(zhí)著于細節(jié),則可能只見樹木,不見森林,忽略了一些大的改進。第三條經(jīng)驗是以事實為依據(jù)的經(jīng)驗。對設(shè)計進行持續(xù)的性能分析、物理綜合、以及仿真驗證為狗剩2號的改進和改正提供了大量了事實依據(jù)。在根據(jù)事實進行設(shè)計和改進時,一定要在大量的事實和數(shù)據(jù)的基礎(chǔ)上(小量的、不具有代表性的不行)對事實進行深入的分析,弄清楚隱藏在這些事實后面的、本質(zhì)的東西,這樣做的設(shè)計和改進才是最優(yōu)的。
與RTL設(shè)計和驗證同時進行的是FPGA驗證環(huán)境的建設(shè)。在這個方面我犯了個錯誤。由于覺得有了狗剩1號的FPGA驗證的經(jīng)驗,狗剩2號的FPGA驗證應該沒有問題,因此只讓范寶峽一個人負責FPGA驗證工作。沒想到由于狗剩2號的規(guī)模較大,設(shè)計也更加復雜,導致FPGA驗證困難重重。主要困難是由于在一片F(xiàn)PGA中放不下,需要多片F(xiàn)PGA,而且多片F(xiàn)PGA之間互連信號太多需要在每片F(xiàn)PGA接口處進行倍頻傳輸。此外由多發(fā)射引起的多端口寄存器堆也難以在FPGA中實現(xiàn)。到4月下旬我才意識到FPGA驗證方面投入的力量很不夠并加強了這方面的力量。直到6月下旬狗剩2號的第一個芯片tapeout之前的半個月,才完成FPGA驗證工作并通過FPGA驗證及時地發(fā)現(xiàn)了設(shè)計中的一個錯誤。
在進行處理器結(jié)構(gòu)和邏輯設(shè)計的過程中,其它方面的工作也在同時展開,包括王劍和鄭保建帶領(lǐng)的狗剩1號系統(tǒng)的繼續(xù)開發(fā)以及狗剩2號軟件環(huán)境的開發(fā),鄭為民帶領(lǐng)的狗剩2號主板的開發(fā),許彤、趙繼業(yè)、鐘石強、張珩負責的物理設(shè)計和驗證方法的總結(jié)和研究等等。
就在狗剩2號的RTL設(shè)計過程中,SARS在北京肆虐,并給我們極大的考驗。那時候所里的政策是所里不統(tǒng)一放假,但各個部門可以根據(jù)自己的具體情況放假。我和唐志敏商量后決定我們采取一定的預防措施并適當減輕工作強度。我們要求凡是乘坐公共交通系統(tǒng)上下班的都不來上班,晚上9點前必須下班,每天的中飯和晚飯由室里統(tǒng)一安排在辦公室吃。至于外界的來訪,所里早就不允許進入北樓了。此外,所里和室里都給我們發(fā)放了有關(guān)的預防藥物,我們自己也買了一些。在這段日子里,雖然我們的進度被迫放慢了一些,但依舊不斷地向前推進。我在為全國人民面對災難時眾志成城戰(zhàn)勝非典的精神所鼓舞的同時,也為全組在這么困難的情況下堅守崗位所感動。
2003年3月份我們開始部署狗剩2號中用到的一個9個端口的寄存器堆的全定制設(shè)計。為了保險,我們部署了兩套方案來設(shè)計寄存器堆。首選方案是請一個大公司幫我們做這個寄存器堆,同時作為與中科院微電子中心的合作請微電子中心設(shè)計同樣的寄存器堆作為備選方案。由于首次流片主要是對設(shè)計的正確性和結(jié)構(gòu)性能進行驗證,因此首次流片除了寄存器堆外還是用ASIC的設(shè)計方法,并準備用中科院EDA中心的Synopsys工具進行布局布線以減少購買EDA工具的費用,因此在5月份之前物理設(shè)計組的人員也對Synopsys的工具進行了進一步熟悉。2003年5月份開始狗剩2號的物理設(shè)計正式展開。從5月初到6月中下旬,我們對使用的方法和流程進行了反復的試驗、比較和確定,尤其是關(guān)于是否使用層次化設(shè)計方法、使用何種Wireload Model、以及Floorplan的方案等進行了反復的試驗和嘗試,并最后確定方法和流程。到6月底時確定了布局布線的方案并基本完成了布局布線,與流片廠家TSMC聯(lián)系好準備在7月10日前tapeout。本來一切都在“掌控之中”,但隨后發(fā)生的兩件事情卻大大出乎我們的意料。
第一件事情是在6月底完成FPGA驗證平臺建設(shè)后,在用該平臺運行SPEC CPU2000程序進行性能分析時有一個程序的浮點結(jié)果有時正確有時錯誤。由于其它程序都運行正確,而且操作系統(tǒng)對虛地址CACHE支持部分還有bug,因此剛開始我沒有認為RTL有問題。7月2日下午,張福新在機房中說了一句話:“我覺得還是RTL有問題”,這句話使我心煩意亂,放下正在看的布線工具文檔,決定要把這個事情搞清楚。在隨后的幾十個小時中,我們使用FPGA驗證、C模擬器、以及RTL仿真對這段出錯的程序進行追蹤。終于在7月4日早上找到了一個RTL的bug。好在問題只涉及局部的設(shè)計,我們修改完RTL后通過手工修改網(wǎng)表花了一天就完成了ECO的布局布線。
一波未平、一波又起。剛想歇會兒,負責全定制寄存器堆仿真的王林楠報告說寄存器堆不能正常工作。我剛開始不相信,因為為我們設(shè)計寄存器堆的C公司是業(yè)內(nèi)非常有名的大公司。但不同的仿真結(jié)果都說明寄存器堆有問題。我們花了兩三天才說服C公司的設(shè)計人員認識到設(shè)計錯誤并且改正過來。此后我們又對寄存器堆做了更多的仿真,并跟一個工具的bug斗爭了幾天幾夜。在此期間,微電子中心的黃令儀老師給了我們極大的支持,否則我們不會這么快對寄存器堆的設(shè)計有深入的了解。
由于這兩件事情的發(fā)生,到7月14日我們終于把狗剩2號的第一個設(shè)計tapeout到TSMC時,我們已經(jīng)連續(xù)在機房不分晝夜地干了十幾天。但由于在臨tapeout前曾經(jīng)發(fā)現(xiàn)寄存器堆設(shè)計的問題,因此tapeout之后也不敢松懈,繼續(xù)對寄存器堆進行分析和仿真。由于EDA工具對較大規(guī)模的模擬電路沒有有效的支持,主要依靠設(shè)計者的經(jīng)驗,我們也請一些電路設(shè)計高手幫我們進行分析。經(jīng)過一個多禮拜心驚肉跳的檢查,在排除了一系列可能存在的問題后,最后一個關(guān)于電源地規(guī)劃的問題成為我們關(guān)注的焦點,也成了我在此后的幾十天中的一塊心病。設(shè)計者似乎在這方面有疏忽,在最離譜的地方,幾十毫安的電流只用了0.28微米的地線。我們與C公司的工程師聯(lián)系時,他們覺得沒有問題,反而說過多的電流會通過襯底流掉。這時候我們在很多高手的指點下已經(jīng)對全定制設(shè)計有所了解,覺得這個問題比較嚴重,因此在與C公司反復交涉得不到他們的積極配合后決定起用備份方案,再做一個流片。剛好黃老師她們做的寄存器堆也已經(jīng)完成了。我們把已經(jīng)tapeout的第一個芯片叫做狗剩2號的A方案,把準備做的叫做B方案。
在我跟李老師和唐志敏提出再做一個流片后,他們提出這次可以在SMIC流片,因為剛好Artisan為SMIC做的庫在6月份發(fā)布了。事實上,李老師在去年就提出狗剩2號在SMIC流片,我不干。這次我也是不大愿意,因為我那時對SMIC不了解。李老師說,我們自己希望別人支持民族產(chǎn)業(yè),用我們的芯片;而我們自己不支持大陸廠家,怎么行。我還是不愿意。 后來有一次在所里培訓時碰到李老師又說起了這件事。他說:“不管SMIC的工藝怎么樣, 總得有人去試,大不了不成功,下次再來”。我說:“要的就是您這句話”。因此就定下 來8月份在SMIC流片。
我們在7月30日下午拿到SMIC的庫,那時侯離tapeout只有兩個星期了,而且SMIC的庫還存在不少問題,我們不得不一邊發(fā)現(xiàn)并修改庫的bug一邊把物理設(shè)計向前推進。這真是做得最辛苦的一次物理設(shè)計,連續(xù)的熬夜搞得我們吃飯也沒胃口,每天只在晚飯時吃一頓。室 里的劉鳳芹老師看我們不去食堂吃飯,每天早上都熬一些紫米粥來給我們喝,我愛人有時候晚上也給我們熬些魚湯什么的。8月10日下午布完線后心里塌實了一些,我和鐘石強、 楊旭去四環(huán)志新橋邊上的一個粥鋪吃晚飯,才覺得餓壞了。吃完后數(shù)數(shù)桌上竟有17個空盤子,出來時撐得腰都彎不下來,三人一路走回中關(guān)村。
布完線后我們又根據(jù)分析的結(jié)果做了些手工調(diào)整修復信號完整性問題和進一步降低延遲, 并修復了DRC和天線的問題。到8月12日中午LVS經(jīng)過幾次修改也基本通過,我們覺得差不多了。那天正是農(nóng)歷七月半,因此在加上guard ring后趁計算機做最后的LVS檢查時我和鐘石強、楊旭去天安門廣場瞻仰毛主席去,可惜那天下午紀念堂沒開,我們只好繞紀念堂一圈回來,路上猛然想起今年是毛主席誕辰110周年,于是約定把明天tapeout的這個芯片的起名叫MZD110。
回到所里時沒想到剛才LVS運行的結(jié)果還是有錯。于是趕快對剛加的guard ring進行檢查。guard ring是圍繞芯片最外邊的一圈保護環(huán),奇怪的是加上guard ring后LVS檢查就顯示芯片里邊的邏輯有錯,去掉guard ring后再檢查芯片里邊的邏輯又沒錯。那天晚上一直在找這個問題,黃老師也跑過來幫我們一起找。第二天天亮后就要tapeout了,但一直到后半夜還搞不定。眼看時間一分一秒地過去,真是又困又累又著急,幾乎要放棄?焯炝習r王林楠重做的guard ring做好了,又折騰了幾次LVS檢查終于通過,這時候清晨的陽光已斜斜地照進機房。把文件傳給SMIC后我們又取回來再做一次LVS和DRC。計算機在運行時,我和楊旭斜靠在椅子上等待。楊旭說:“昨天晚上真怕睡著,我有時候靠在椅子上歇一會兒,看見你們躺下了就趕忙起來,怕咱們?nèi)硕妓司筒恢浪绞裁磿r候了”。這句話讓我十分感動,因為昨晚最困的時候我自己也是一直用這個念頭強撐著不敢閉眼。那時候我們已經(jīng)連續(xù)十幾天沒有正常休息而且莫名其妙的問題搞得我心力交瘁,我第一次感到人的體能是有極限的,人的精神是會崩潰的,真想一覺睡過tapeout的時間算了。我仰頭看著天花板,好不讓楊旭看見我的眼淚,很動情地說:“楊旭,你有這樣的責任心,以后在我們這里肯定前途無量”。楊旭是剛從微電子中心畢業(yè)后到我們這里來工作的,他還沒有到所里報到,就先來跟我們一起苦熬。
我經(jīng)常把我們課題組比做一個硬骨頭連隊,把自己比做連長。在狗剩1號流片成功后,我這個連長得到了很多本來應該屬于全連的榮譽,包括獲得“中國青年五四獎?wù)隆辈⑹艿娇倳浀慕右,而每天跟我一起沖鋒陷陣的兄弟們什么也沒有。我真是愧對他們。
去年在狗剩1號tapeout之后,我曾經(jīng)說,我覺得三個都能成,如果兩個成功也可以接受,如果只有一個成功我會覺得比較失敗,如果全部不成功那就沒有天理了。但狗剩2號tapeout之后,我對A方案和B方案都沒有必勝的信心。但不管最后結(jié)果怎么樣,有兩點是肯定的。一是全組已經(jīng)盡了最大努力,Godson-2的設(shè)計比Godson-1辛苦得多,難度大得多。在狗剩1號發(fā)布會后狗剩2號的工作才全面鋪開,10個月后我們就完成了這么復雜的設(shè)計,沒有全組兄弟們玩命的工作是不可能做到的。二是即使流片不成功,我們已經(jīng)有了很好的基礎(chǔ),以前的至少90%的工作沒有白費,即使這次不成以后總會成功的。
9月5日下午我在絲毫沒有準備的情況下收到了狗剩2號的A方案的芯片,當晚我組織了聯(lián)調(diào),雖然在加電后很快就能夠啟動一個簡單的BIOS系統(tǒng),但系統(tǒng)運行得很不穩(wěn)定。在連續(xù)三天的調(diào)試后,我們雖然得到了一些有用的結(jié)論,如驗證了跨時鐘域的信號握手機制,但一直無法讓系統(tǒng)穩(wěn)定運行,因此我決定終止繼續(xù)聯(lián)調(diào)并給李老師和唐志敏發(fā)EMAIL報告了這一情況。
雖然由于寄存器堆的問題我已經(jīng)對A方案的流片不抱太大的希望,但真正面對這個結(jié)果時還是很難受。那陣子我經(jīng)常坐在機房里,癡癡地看著寄存器堆的版圖發(fā)呆;或者獨自呆在辦公室,想想過去一年中我們在實驗室里度過的日日夜夜,狗剩1號發(fā)布后我們立即馬不停蹄地展開狗剩2號的設(shè)計甚至在非典期間也不敢松懈。狗剩2號的設(shè)計比狗剩1號復雜得多,連續(xù)的加班也慘烈得多。在這段日子里,我自己每周的工作時間都在80小時以上,而課題組的不少同學比我還多。多少次為了一個小問題而夜不能寐,多少次為了一個小細節(jié)而殫精竭慮;每一個進步的腳印都充滿了汗水,每一點進展都是心血的凝聚。竟得到這樣一個結(jié)果,心里十分難受。
我和唐志敏十幾年的兄弟,基本上是心意相通的,點滴的想法我都跟他討論,點滴的進展和挫折他也都知道,有些大的決策一起做出。因此,A方案流片的失敗,我跟他還是坦坦然的。雖然李老師見到我象沒事似的(也許他覺得這樣會讓我少些壓力),但這樣讓我更不安,本來我希望他罵我一通或者安慰我一下,可惜沒有。這段日子我覺得最對不住的還是鄧書記。在我們研制狗剩2號的日子里,她給了我們很多的特殊照顧,包括我們的辦公環(huán)境以及我自己和課題組里員工和學生的生活條件,我一直說書記是我們的活菩薩。因此這段日子我自己都覺得不好意思見她,有時候在路上碰到,我就遠遠地繞開走。
由于狗剩2號A方案的流片失敗,我們更加迫切地等待B方案流片的結(jié)果。這種等待有時候讓我坐臥不寧,必須時時刻刻地找事情做心里才好受一些。因此在這個階段我們對狗剩2號B方案的結(jié)構(gòu)和RTL繼續(xù)進行優(yōu)化(真算是化悲痛為力量)。不僅延遲又降低了0.5ns,而且通過對存儲層次的改進,相同主頻下性能也提高了很多。
在SMIC完成流片后,我們得到了封裝廠家的大力支持,以最快的速度完成了封裝。我又派專人去上海立等芯片的封裝結(jié)束并把芯片直接取回來,這種在煎熬中等待的日子我是一刻也不想過了。好在天道酬勤,在拿到芯片的40分中內(nèi)我們就用狗剩2號把操作系統(tǒng)啟動了起來。此后,我們又化了大約三個禮拜針對狗剩2號虛地址CACHE和猜測執(zhí)行的特點把操作系統(tǒng)搞穩(wěn)定。
現(xiàn)在,基于狗剩2號的Linux-PC已經(jīng)穩(wěn)定運行了一個多月。目前的狗剩2號最高頻率為300MHz,功耗1W-2W,成品率約為80%左右。在性能方面,在聯(lián)調(diào)的第一天我們只把狗剩2號的主頻調(diào)到133MHz時已經(jīng)明顯感覺到比266MHz的狗剩1號還要快很多。狗剩1號不能勝任的許多應用,包括流媒體的軟解壓、GNU 2.4的支持、Mozilla瀏覽器、Open Office辦公軟件等重量級的應用,在狗剩2號中都能比較流暢地運行。尤其是流媒體的軟解壓,我曾經(jīng)化了三天三夜進行軟件優(yōu)化來提高狗剩1號軟解壓的效果,但最后還是差一點;把狗剩1號勉強能軟解壓播放的一個mpeg文件在200MHz的狗剩2號上播放,只要23%的CPU。而對于標準的MP3播放,狗剩2號只要不到1%的CPU就應付裕如了。通過使用SPEC CPU2000對狗剩2號的性能分析表明,相同主頻下狗剩2號的性能已經(jīng)明顯超過PII的性能,是狗剩1號的3-5倍。
我曾經(jīng)終日坐在用狗剩2號做的計算機前,玩著各種游戲,使用各種重量級的軟件來感受狗剩2號的性能。雖然對于有些大型的應用軟件還感到有些遲鈍,但我們的狗剩2號已經(jīng)明顯表現(xiàn)出她作為PC機中使用的CPU的資格和風范。每當我在狗剩2號上玩著LINUX PC中的各種游戲,想想一年前玩狗剩1號時覺得性能不理想時的郁悶心情,真是我這一年來最爽的體驗。
狗剩2號的性能提高主要來自先進的結(jié)構(gòu)設(shè)計,包括四發(fā)射和亂序執(zhí)行結(jié)構(gòu)的設(shè)計。而亂序執(zhí)行的關(guān)鍵技術(shù)是狗剩2號結(jié)構(gòu)設(shè)計的重點和難點,四發(fā)射的RISC結(jié)構(gòu)如果沒有亂序執(zhí)行技術(shù)的支持是發(fā)揮不出效率的。例如典型的定點程序中平均每六、七條指令就有一條轉(zhuǎn)移指令,意味著在四發(fā)射結(jié)構(gòu)中每兩拍就有一條轉(zhuǎn)移指令。如果等轉(zhuǎn)移指令的目標地址確定再進行后面的取指,意味著每取兩拍指令就得等五、六拍甚至更多才能繼續(xù)后面的取指。又如,做一個簡單的加法需要兩個操作數(shù),而如果這兩個操作數(shù)都需要從內(nèi)存中(即主板上的內(nèi)存條)取回來,那么在做這個加法之前,需要至少上百拍的時間為這個加法準備數(shù)據(jù)。指令亂序執(zhí)行的核心思想就是減少各種相關(guān)引起的等待,充分發(fā)揮處理器的效率。
主要做法包括:(1)轉(zhuǎn)移猜測,即在轉(zhuǎn)移指令目標尚未確定的時候,根據(jù)過去轉(zhuǎn)移指令執(zhí)行的歷史猜測該轉(zhuǎn)移指令的轉(zhuǎn)移方向和轉(zhuǎn)移目標,并根據(jù)猜測的結(jié)果進行后續(xù)指令的取指,為處理器提供連續(xù)穩(wěn)定的指令流。如果最后發(fā)現(xiàn)猜測錯誤,則取消猜錯的轉(zhuǎn)移指令后面的指令。(2)動態(tài)調(diào)度,即在前面的指令由于操作數(shù)未準備好而等待時,后面的操作數(shù)已經(jīng)準備好的指令可以越過前面的指令先執(zhí)行。(3)寄存器重命名,即指令運算后先寫到一個臨時的寄存器,等確定該指令不會被取消后再寫到真正的目標寄存器中去。這樣做的好處除了便于前面指令發(fā)生例外或轉(zhuǎn)移猜錯時取消外,還避免了由于兩條指令寫同一個寄存器時的等待。
此外,訪存指令的亂序執(zhí)行又有新的特征。除了通過增大CACHE和對CACHE進行有效的組織盡量提高CACHE命中率并降低CACHE訪問的延遲外,還需要對訪存指令進行亂序執(zhí)行以提高效率。訪存指令亂序執(zhí)行的關(guān)鍵技術(shù)包括:(1)Non-blocking技術(shù),即在前面的訪存指令由于CACHE不命中進行長延遲的存儲訪問時,后面的指令可以繼續(xù)訪問CACHE。(2)Memory Disambiguation技術(shù),即在存數(shù)和取數(shù)指令都亂序執(zhí)行的情況下,保證取數(shù)指令都能取回它前面的最近一條對同一地址的存數(shù)指令所存的值。比如如果一條取數(shù)指令在一條存數(shù)指令之后且兩條指令的地址相等,但取數(shù)指令先訪問CACHE,也要保證取數(shù)指令取回該存數(shù)指令的值;又如如果一條取數(shù)指令在一條存數(shù)指令之前且兩條指令的地址相等,但存數(shù)指令先訪問CACHE,也要保證取數(shù)指令取回原來CACHE中的值,而不是存數(shù)指令新存的值。(3)Load Speculation技術(shù),即在取數(shù)指令訪問CACHE后,它前面的存數(shù)指令地址還沒有確定(即取數(shù)指令從CACHE中取回的值有可能是錯誤的),先把取數(shù)指令從CACHE中取回的值送給后續(xù)的指令用,如果后來發(fā)現(xiàn)它前面的存數(shù)指令和該取數(shù)指令訪問的是同一個單元,再取消該取數(shù)指令后面的指令。(4)Write Buffer技術(shù),由于存數(shù)指令也是亂序執(zhí)行的,存數(shù)指令所存的值不能立即寫到CACHE或內(nèi)存,而是要根據(jù)存數(shù)指令在程序中的次序?qū)懙紺ACHE或內(nèi)存。
在亂序執(zhí)行的結(jié)構(gòu)中,雖然指令執(zhí)行是亂序的,但開始和結(jié)束是有序的。指令在譯碼和寄存器重命名后就放在一個有序的隊列中,由該隊列來記錄每一條指令的執(zhí)行階段并有序地結(jié)束指令。即指令在流水線中是有序進入、亂序執(zhí)行、有序結(jié)束。
狗剩2號的主要結(jié)構(gòu)特點包括,64位設(shè)計,7-10級流水線,包括取指、譯碼、重命名、發(fā)射、讀寄存器、執(zhí)行寫回、提交等,其中乘除、浮點操作、以及訪存操作在執(zhí)行寫回階段需要多拍。四發(fā)射結(jié)構(gòu),最多可以有64條指令亂序執(zhí)行。共有5個功能部件,包括定點ALU1(完成定點加減、邏輯、移位、轉(zhuǎn)移),定點ALU2(完成定點加減、邏輯、移位、乘除),浮點ALU1(完成定點加減、轉(zhuǎn)換、轉(zhuǎn)移),浮點ALU2(完成乘除、開方),以及訪存部件(完成訪存、系統(tǒng)管理、數(shù)據(jù)傳送)。通過對浮點指令fmt域的簡單擴充,浮點部件可以執(zhí)行完整的定點指令以及4路SIMD的媒體指令。在亂序執(zhí)行方面,轉(zhuǎn)移猜測使用混合預測+Gshare + BTB + RAS的轉(zhuǎn)移猜測方式;通過物理寄存器到邏輯寄存器映射進行寄存器重命名,定點浮點寄存器堆各為64項;動態(tài)調(diào)度方面定點和浮點保留站各16項,Reorder Buffer為64項。
在存儲管理方面,TLB為64項全相聯(lián),每項兩頁,頁大小在4KB-4MB之間可變。此外,有一個獨立的8項的指令TLB是數(shù)據(jù)TLB的子集。與狗剩1號一樣,在TLB中增加可執(zhí)行位,防止緩沖區(qū)溢出攻擊。數(shù)據(jù)CACHE和指令CACHE各為32KB,二路組相聯(lián)。最多允許32個訪存操作的Non-blocking訪問,訪存相關(guān)在訪存隊列中通過全相聯(lián)的查找解決,避免了象Alpha21264或MIPS R10000中碰到訪存相關(guān)時需要重新發(fā)射。實現(xiàn)load-speculation,允許前面的store操作未確定的情況下執(zhí)行l(wèi)oad操作并返回結(jié)果。Cache失效時實現(xiàn)關(guān)鍵字優(yōu)先訪問,以減少訪存等待,Uncached操作實現(xiàn)uncached accelerate算法加速I/O訪問。
目前的狗剩2號只是我們所承擔的項目的階段性成果。它的作用主要體現(xiàn)在四個方面。一是對目前的處理器核設(shè)計進行驗證;二是用于進行性能分析以及對性能分析方法的改進;三是驗證新的物理設(shè)計方法和生產(chǎn)廠家;四是提前提供軟件開發(fā)平臺,為LINUX PC的正式推出做好準備,F(xiàn)在看來,這幾個目的都達到了。
我們的下一步目標是在目前狗剩2號的基礎(chǔ)上把性能再提高到現(xiàn)在的3-5倍,并利用明年完成的狗剩2號做一臺每秒運算一千億次的計算機。我還是博士生時唐志敏曾經(jīng)帶我到中科院網(wǎng)絡(luò)中心去算題,有一次他隔著玻璃指著一臺計算機對我說,這臺就是從日本引進的計算機,現(xiàn)在系統(tǒng)管理的權(quán)限還在日本人手里,增加一個用戶都要它們批準,什么時候我們自己做一臺比它還快的計算機,就放在這臺計算機邊上,告訴它們這臺機器就是用來做核模擬的。所以做一臺自己的高性能機是我學生時期的夢想,雖然現(xiàn)在國內(nèi)最快的高性能機已經(jīng)達到每秒幾萬億次,但我一定要圓這個夢。
計算所的一位研究員曾經(jīng)說過,創(chuàng)新工作一個重要特征就是這個工作讓人感到“狠”。我覺得,狗剩1號“狠”的地方就是進度快,從零開始,用了不到一年半的時間完成一個通用處理器的設(shè)計;而目前的狗剩2號“狠”的地方就是在結(jié)構(gòu)上對性能的大幅提高。我相信,更“狠”的還在后頭。
2003年11月30日于中國科大(完)