張平
國內的處理器開發一直是一個值得討論的話題。近年來,隨著外部環境變化和自身產業發展需求,國內處理器自主研發、自主可控的呼聲越來越高。中科院作為國內水平最高、產業最為齊全的研發機構,在自主處理器尤其是處理器架構方面做出了很多貢獻。2021年,中科院計算所包云崗研究員又發布了全新的、采用RISC-V指令集的“香山”高性能處理器架構。那么,“香山”高性能處理器架構究竟怎么樣?它的性能和設計大概相當于國際什么水平的產品呢?
2021年6月22日,中科院計算所包云崗、唐丹和徐易難三位研究人員公布了有關“香山”高性能架構(下簡稱“香山”)的相關內容。在“香山”公布之后,引發了業內高度關注。從行業角度來看,“香山”是目前國內少有的以RISC-V為主的高性能架構,并且它僅用了1年時間,就完成了整體架構設計。
“香山”高性能處理器架構的一些背景資料
香山的開發從2020年6月11日開始。實際上,在相關工作開始之前,研究人員就在探討為什么CPU產業界沒有出現一個像Linux那樣開放和共享的開源主線,在經過多番討論和深入的思考后,中科院計算所的研究人員選擇了RISC-V作為基礎指令集,并基于它開發全新的開源CPU架構。
有關RISC-V的相關內容,本刊在2018年6月的《處理器領域的“Linux”?一起走進開源免費架構RISC-V》 -文中有過比較詳細的解讀,雖然這篇文章已經是3年之前的了,但是對RISC-V的一些基本概念和知識的解讀到現在也依1日有效。簡單來說,RISC-V是一個標準、免費、開放的指令級架構,RISC-V基金會和企業SiFive對其進行維護,RISC-V研討會用于展示和溝通有關RISC-V的發展和創意。在技術方面,RISC-V定義了一個基本的整數ISA和一系列標準擴展,還對處理器設計的大量內容進行了規范和定義。任何用戶都可以使用RISC-V的相關架構內容,對其進行二次開發或者擴展,從而設計出符合自己需要的CPU架構。在沒有購買私有IP的前提下,也不需要付費給RISC-V的相關組織。由于RISC-V的開放和免費特性,吸引了業內一大批廠商加入,包括英特爾、AMD、英偉達等我們耳熟能詳的企業,自然也吸引了中科院計算所,基于RISC-V的特性開發一款全新的CPU架構產品。
在選擇了RISC-V之后,香山的研發團隊希望自己的架構能夠被工業界廣泛支持,同時也能夠支持學術界實驗創新想法,因此才將整個香山架構開源出來供大家使用。香山研發團隊希望這個架構不斷通過使用、擴展、再使用、再擴展,就像Linux那樣,存活30年以上。
現在,香山整個核心代碼庫均以開源的方式存放在GitHub上,大家可以通過以下網址進行訪問并查看相關資料:https://github.com/OpenXiangShan。另外,包云崗研究員針對香山架構的開發過程進行了詳細解讀。除了采用RISC-V和開源香山架構的內容外,他描述了有關香山架構研發的具體人數和研發的工作量。比如在一年時間內,香山架構的研發吸引了25位中科院計算所的同學和老師加入,發生了821次主分支代碼合并,3296次代碼提交( commit),5萬余行代碼,400多個文檔,所有這些代碼和文檔、流程都公布在前文的GitHub鏈接中。在開源方面,香山架構采用了“木蘭寬松許可”( MulanPSLv2),這是一個國內的開源許可證,整體許可內容和法律內容非常適合香山架構未來發展所需。現在,萬事俱備,香山架構究竟有哪些秘密呢?
“香山”高性能處理器架構的演進和細節
中科院計算所希望香山架構能發展30年,那么就需要對這30年進行一些規劃,并且作為高性能架構產品,香山架構還需要針對高性能架構未來的發展在如今就打好基礎。
香山架構的演進
香山架構目前研發的核心架構被稱為“雁棲湖”,這個架構是2020年6月開始建立,2021年4月RTL完成。目前預估的性能SPEC CPU 2006為每GHz 7分,現在的版本暫時采用臺積電的28nm工藝,1.3GHz頻率制造。
在“雁棲湖”之后,2021年3月香山架構啟動了新一代“南湖”核心架構的研發,計劃在2021年底完成。它的SPEC CPU 2006能夠達到每GHz10分,相比雁棲湖核心架構提升大約43%左右,工藝則改用中芯國際的14nm,目標頻率為2GHz。
接下來,香山架構還將以“X湖”為代號,實現持續的迭代優化,并最終達到ARM Cortex-A76的水平。
雁棲湖微架構解讀
在這部分,本文將對香山高性能處理器架構的首發微架構——雁棲湖微架構進行簡單的解讀,并對比ARM Cortex-A76,具體來看看兩者所存在的差異。
從宏觀角度來看,雁棲湖微架構是一個11級流水線、6發射的微架構。值得注意的是,雁棲湖微架構前端發射部分的寬度非常寬。相比之下,Cortex-A76的前端發射寬度為4,采用了13級流水線設計。雁棲湖架構相比Cortex-A76,在整體設計上存在顯著差異。
繼續來看前端設計,雁棲湖架構前端部分的重點在于分支預測設計。其分支預測部分主要用于和取指單元緊密耦合,并和流水線同步。在設計上,雁棲架構的分支預測部分采用了三級覆蓋預測、分支歷史管理的方法。第一級采用了uBTB方案,第二級采用BTB+BIM方案,第三級則采用了TAGE-SC-L結合RAS和預譯碼的方案。值得一提的是第三級采用的TAGE-SC-L分支預測方案,其中TAGE全稱是TAgged GEometric history length branch predictor,也就是標記幾何歷史長度分支預測期,這個分支預測器在2006的分支預測大賽獲得了冠軍,并且展示出了卓越的面積性能比,堪稱目前最強的分支預測器之一。AMD在Zen 2架構上就引入了TAGE分支預測器,而英特爾可能在更早之前就已經選擇TAGE作為自己的分支預測器的部分了。從已公布的資料來看,雁棲湖架構非常重視分支預測器的設計,三級結構和最先進的TAGE分支預測的配合,能夠基本解決取指令的空泡問題,有效地提升整個CPU架構的效率。根據中科院計算所團隊內部的評估,雁棲湖架構的分支預測器平均MPKI也就是每干條指令集的錯誤預測率相比其他設計降低了大約3%。
在指令緩存的設計上,雁棲湖架構的L1指令緩存采用了128KB,8通路的設計,而ITLB則采用32通路,另外還有專用的指令緩存,規格為16KB、4通路。另外拾取目標隊列為48個隊列深度、指令緩存也是48隊列深度,前端解碼器采用了6寬度的設計。相比之下,Cortex-A76的L1指令緩存容量為64KB,其余的類似設計并未公布詳細參數。
在重命名和指令派遣階段,雁棲湖架構設計了浮點重命名模塊、整數重命名模塊和擁有192個隊列深度的重新排序緩存,浮點物理寄存器文件的隊列深度為160,整數物理寄存器文件的隊列深度也同樣是160。這部分物理寄存器是對應到執行階段單元的。
在執行階段,雁棲湖架構的規模是比較大的。整數部分包括4個ALU、2個DMU和一個MISC,浮點部分則包括4個FMAC和2個FMISC,地址解碼和數據寫回方面設置了2個AGULD和2個AGU ST。雁棲湖架構特別對浮點除法和開方器進行了優化。和Cortex-A76對比來看,Cortex-A76整數部分只有2個ALU和1個ALU/MAC/DIV單元,以及1個獨立的分支單元,浮點部分只有1個可以執行FMUL/FADD/FDIV/IMAC的復雜浮點單元和1個執行FMUL/FADD/ALU的單元。
這樣看來,雁棲湖架構在后端執行方面要比Cortex-A76的規模大一些,并且大量采用簡單功能單元,而Cortex-A76則相對規模較小,但是大量采用復雜功能單元。這顯示了兩者不同的設計取向。相對應的,雁棲湖架構的前端也是為這種較大規模的執行單元設計的,比如發射寬度為6,而Cortex-A76的發射寬度為4。當然,這部分設計并不能說明兩者孰優孰劣,目前來看雁棲湖架構還只是初代版本,在設計經驗和性能方面還有很大的上升空間。相對ARM這種在CPU微架構設計的“千年老妖”來說,雁棲湖架構在現階段最重要的任務是完成架構設計,并通過架構不斷迭代提高性能。
最后再來看—下雁棲湖架構的內存部分。這部分包括1個64隊列深度的讀取排隊單元和同樣為64隊列深度的存儲排隊單元,以及16x64Bit的存儲緩存。雁棲湖架構設計了1個32KB、8通路的數據緩存用于緩沖所有的內存數據,這個緩存到DTLB的速率是2x8Bit每周期、到讀取隊列單元的速度是每周期64Bit,到存儲緩存的速度也是每周期64Bit。相比之下,Cortex-A76的數據緩存容量為64KB,沒有采用存儲緩存設計。雁棲湖架構的L2緩存為1MB、8通路,這個緩存容量在面向高性能設計的架構中并不算大,這可能和整體架構的設計目標有關。
總的來看,整個雁棲湖微架構的設計具有獨特的創意和思想,尤其是前端6發射、改進的分支預測器、后端執行單元的方案選擇等,都讓人看到了國內微架構研發團隊的實力,非常值得期待。
香山架構的雁棲湖微架構性能和對比
前文提到,目前雁棲湖架構的性能大概在SPEC CPU 2006中每GHz達到了7分,未來的南湖架構可以達到10分。相比目前主流的ARM處理器架構,這個成績算是什么水平呢?
在文章中,雁棲湖微架構的研發團隊沒有說明測試的數據是SPEC CPU 2006的整數還是浮點部分,不過業內通常以整數部分的測試來進行對比,這里本文就默認雁棲湖微架構也是運行的SPECint 2006的測試。需要注意的是,這里沒有考慮實現這樣性能的雁棲湖微架構的每瓦特性能、每晶體管性能和最終的每平方毫米性能,而這些具體的參數會影響到整個架構的商業化和實際可達性能,本文在這里僅僅單純對性能,不考慮其他任何變量。
用于對比的數據來自GoldenReviewer,這是一家海外的測試團隊,測試了Cortex-A76、Cortex-A77、Cortex-A78和Cortex-X1等不同架構、不同處理器的SPECint2006性能。從他們的測試數據來看,Cortex-A76架構在SPECint 2006的每GHz性能大約是10分左右,普遍在10.0 2-10.2之間,最低也有8.6分的產品,但那是作為中等核心,可能存在緩存削減的情況。Cortex-A77的成績大約在12.2-11.2之間,Cortex-A78則在1.275-13.15之間,Cortex-X1則能達到13.65-15.13。
目前,雁棲湖微架構在同等條件下分數為7分,相比Cortex-A76差距大約還有43%,下一代南湖微架構基本上就可以趕上Cortex-A76了,都是10分左右。不過,目前ARM Cortex-X1可以達到最高15分,最新的Cortex-X2應該可以提升至17-19分左右,以南湖10分的水平和它們相比,差距還是比較大的。更不要說蘋果的Firestrom微架構整體水平顯然超越了Cortex-X2,因此香山架構還需要加緊努力追趕國際先進水平。香山架構團隊自己也認為,目前的架構性能依舊比不上多年前的Cortex-A73,要知道Cortex-A73只是一個2發射的微架構。因此在整體核心架構設計上,香山架構現有的雁棲湖微架構只是一個開始。
除了性能外,在工藝方面雁棲湖微架構也存在掣肘。目前雁棲湖微架構和后期的南湖微架構能夠獲得的最先進工藝只有SIMC的14nm,這和目前國際主流的5nm乃至3nm差距很大。不過研發團隊解釋道,自己在28nm工藝下只能運行在1.3GHz,并不是由于臺積電的工藝問題,而是和架構設計有關,這個可能和香山架構流水線級數較少、工藝實現上缺乏相對應的高頻率設置有關。
未來可期的香山架構
到這里,本文對香山微架構的粗淺解讀就告一段落。實際上在包云崗研究員的文章中還介紹了大量有關快速開發和測試的內容,由于和本文關心的架構、性能不是很相關,就暫且略去,有興趣的讀者可以去閱讀原文。從本文的介紹以及香山架構、研發團隊現有的表現來看,香山架構整體設計還是頗為獨特的,初次亮相就體現了一個自主研發的高性能微處理器架構所應有的方方面面,并且具有非常強的成長性。可以確定的是,未來隨著香山架構內部設計的不斷演進,其性能還會持續增長,也有可能某天就突然來到我們身邊,成為RISC-V世界的主流高性能架構,被使用在我們的手機、平板、智能電視機中,想想還是頗令人期待的。