文/圖黃博文
計算性能問鼎排行榜榜首的神威·太湖之光超級計算機江南計算所和太湖之光
對于圈内人來說,看到無錫這個地名,首先聯想到的就是1951年成立的江南計算技術研究所(與位居北京、1956年成立的中國科學院計算技術研究所遙相呼應)。中國科技領域的政府最高獎勵——國家最高科學技術獎僅授予過兩位計算機領域的專家,一位是發明激光漢字照排系統的王選院士,另一位就是江南計算所的神威超級計算機系統的總設計師金怡濂院士。
依托江南所研制的神威系列超級計算機系統并不算是石頭縫裡蹦出來的,江南研究所在公衆媒體上一直保持低調,其實力僅為圈内所知。其實在“太湖之光”的超級計算機top500排行榜成績正式公布前至少半年,就已經有很多與江南所有聯系的圈内人士得知“太湖之光”可以超越天河2号,但直到今年6月的國際超級計算大會,這一消息才正式公布。太湖之光在linpack上的持續計算速度達到了93PetaFlops(93千萬億次),遙遙領先國防科大牽頭研制的上一代的天河2号超級計算機近3倍,對比美國目前在役的超級計算機系統“泰坦”和“紅杉”達到5倍以上。同時在關注功耗效率的Green500和關注大規模圖計算的Green500上,太湖之光也擠進了前三甲。令人更加欣喜的是,“太湖之光”不僅自身實力過硬,也同時帶動了國内高性能計算應用的突破性進展。高性能計算應用領域的最高獎戈登貝爾獎自1987年以來沒有純本土的應用入圍,運行在太湖之光上的典型應用首次以純本土開發的高性能計算應用的身份殺入了戈登貝爾獎的提名,而且一次性入圍了三個。這三個應用分别是中科院軟件所與清華大學、北師大合作的“全球大氣非靜力雲分辨模拟”;國家海洋局海洋一所與清華大學合作的“高分辨率海浪數值模拟”;中科院網絡中心的“钛合金微結構演化相場模拟”。在這樣的成績背後,作為基礎支撐的處理器部分卻不再是過往的Intel至強系列處理器或是NVIDIA的加速卡,而是國産的SW26010。這款芯片的正式面世距離美國商務部對超級計算機相關芯片産品,即對中國四家超級計算中心宣告禁運的政策執行才過了一年,這其中的意義不言自明。
當筆者第一次看到SW26010的結構設計框圖時,就為之感到震驚。這是迄今為止筆者所知的任何公開設計都截然不同的結構框架,也很可能是目前所有的處理器微結構裡面最激進的異構衆核設計。這一張框圖所帶來的意義尤為深遠,隻有放在當前的時代背景下才能夠透徹理解。
讓我們首先來看看太湖之光的前輩“天河一号”、其強力競争對手“美洲虎”及後繼升級型号“泰坦”。首度問鼎超級計算機top500榜首的本土超算天河一号采用了CPU+GPGPU的異構計算結構,但和“天河一号”的CPU+GPGPU異構體系結構不同,“美洲虎”使用CrayXT5架構,是一個完全由CPU構成的同構體系結構的超級計算機,被天河一号拉下馬之前,這224162個AMD皓龍處理器核心組成的龐大系統在長達兩年的時間裡守住了超級計算機top500排行榜三甲的位置,但是功耗也逼近七百萬瓦特。作為對比,“天河一号”使用了186368個Xeon至強處理器核心,搭配7168個NVIDIATeslaM2050通用計算GPU,以及2048個國産FeiTeng1000處理器,在Linpack測試中跑出了2.566PFLOPS的平均計算速度,在領先“美洲虎”的同時,功耗隻有四百萬瓦特。NVIDIA宣稱“天河一号”架構中的GPGPU起到了關鍵作用,如果單純使用CPU來達到這種程度的性能,就需要超過30萬個核心,以及兩倍的占地面積和四倍的功耗。這裡的GPGPU和後來的至強融合計算卡,都是使用SIMD并行作為基本設計理念。
神威·太湖之光超級計算機的運算節點闆與機身上的監控面闆
神威·太湖之光采用大規模高流量複合網絡體系結構設計,實現了全系統高帶寬、低延遲通信。
在國際超算大會上,神威·太湖之光奪得第一的獲獎證書。
SW26010框架圖在同一種體系結構下,滿足較強的SIMD并行執行能力+亂序多發射的串行執行能力并不容易,因此使用以寬SIMD并行為主的加速器(如GPGPU)+強亂序多發射為主的CPU成為了高性能計算機體系結構的一個新趨勢。2007年初,整個top500榜單上沒有一台超級計算機使用額外的加速器,但是SIMD與傳統架構融合而成的異構加速模式帶來的好處是如此地顯而易見。到了2011年中,采用混合加速體系結構的top500超級計算機數量就從0開始增長到已經接近60個。在這一形勢下,“美洲虎”就啟動了新一輪升級計劃,改用CPU+GPGPU的異構體系結構,升級成了後來重回榜首的“泰坦”。截止到太湖之光正式面世前的最後一份top500榜單也就是2015年11月的榜單上,前十台超級計算機有四台使用了CPU+GPGPU的異構體系結構,到了2016年6月,基于異構體系結構的超級計算機已經完全把持了前三甲的位置。
但在SW26010面世之前,CPU+GPGPU的異構計算框架存在的問題仍然尤為突出。從這套框架的耦合性上來說,CPU+GPGPU的耦合方式仍然非常松散,CPU和GPGPU之間的數據交互要通過PCIe總線和内存來進行,效率低下。而且CPU和GPGPU并不在一個die上,而是跨越了PCIe總線和内存,加上二者的訪存特征有着本質上的不同,面對的應用場景也截然不同。因此目前還沒有一個完好的硬件一緻性方案來在這兩種截然不同的體系結構之間提供數據一緻性,所以維護一緻性的工作就落在了上層軟件棧的身上。另一方面,從能耗效率的角度上來說,CPU+GPGPU的方案或許能勝過純CPU的組合,但是距離理想的異構計算的完全體還存在着很大的差距。模拟數據顯示,如果将一個雙精度數據從片外搬移進芯片内,那麼執行這個任務的功耗将數十倍乃至數百倍于在芯片内進行一次雙精度數據計算的功耗,因此松散的異構體系結構耦合方式也就導緻更大的功耗浪費在無謂的片外-片内數據搬移上。
TIPS關于SIMD
SIMD是單指令多數據(SingleInstructionMultipleData)的簡稱,是目前的GPGPU和CPU發掘數據級并行度的主要方式。其設計思想也非常簡單,舉例來說,如果有這樣兩個數組,數組a為1,2,3,4,數組b為6,7,8,9,任務是把這兩個數組當中的數字逐個對應相加。在SIMD出現以前,傳統CPU的做法是依次計算1+6,2+7,3+8,4+9,至少需要四條指令,每條指令負責計算一組數據。而SIMD的做法是使用同一條指令去控制多個ALU,但多個ALU分别去操作不同的數據,把多個操作并行起來,從而提高性能。在這個例子裡面,支持SIMD的CPU會将一條加法指令發送給四個ALU,這四個ALU會分别讀取1和6,2和7,3和8,4和9這四組數據,各自同時相加。在上面這個例子裡,以每個整數32-bit計算,四個整數需要占用128-bit的SIMD通道。這樣的SIMD并行場景在許多并行計算任務中反複出現,因此現在的CPU裡面一般都加入了SIMD的設計。CPU的SIMD寬度在過去的設計中保持着提高的趨勢,從SSE的128-bit到AVX的256-bit乃至512-bit,并且GPGPU也使用了這樣的設計,SIMD寬度的增長速度比CPU還要快。
SW26010激進的異構融合
對于上述這兩個關鍵問題,SW26010的結構設計給出了一份令人滿意的答案。SW26010的片上集成了多達260個核心,其中4個核心被稱為MPE,基于申威自主定義的64bitRISC指令集,具備亂序多發射能力,能夠發掘傳統的指令級并行度來提高單線程性能,與此同時它也支持256-bit的向量指令,可運行标準linux内核。從這個角度上來說,單獨的一個MPE類似于現在的PC處理器,同時具備亂序多發射+窄SIMD的能力(但具體設計實現以及最終性能上存在很大區别)。每一個MPE又伴随着64個CPE核心,這64個CPE核心共同組成了一個CPE陣列,申威将這個陣列稱為CPEs或CPE“集群“。這些核心同樣是64-bitRISC,并且核心設計相對簡單,設計重點以支持256-bit的SIMD操作為主,隻能運行輕量級的非标準操作系統,不支持核心态運行、不支持中斷等基本功能,但64個核心一共可以提供16384-bit的寬SIMD并行處理能力。與此同時,CPE陣列裡的核心也并未過度犧牲單線程性能,CPE核心的設計框架為亂序雙發射+靜态分支預測,支持256-bitSIMD指令的亂序執行。
以一個亂序多發射+256-bitSIMD的MPE核心+64個以256-bitSIMD為主的CPE核心為一個基本單元,整個SW26010有四個這樣的基本單元,因此一個SW26010處理器總共有4個亂序多發射的MPE核心和256個CPE核心,總計提供了(4+64×4)×256-bit=66560-bit的恐怖SIMD寬度。截止這裡我們已經可以說,SW26010實現了第一個創舉,集成了MPE傳統亂序多發射和注重SIMD并行能力的CPE兩種核心,把兩種體系結構的核心做到了一個die上。但是光有這個還是不夠的,SW26010的第二個創舉是在這兩種體系結構的核心之間提供了基于硬件的數據一緻性。
這一設計徹底移除了上層軟件維護一緻性的負擔,截止到目前為止Intel和NVIDIA的芯片都尚未做到申威這樣規模的片上異構。而NVIDIA的GPGPU還不提供片上的高速緩存硬件一緻性,因此可以肯定地說這個異構設計既領先Intel當前這一代的CPU和加速卡,又領先NVIDIA的GPGPU方案,真正地做到了國際領先水平,不能不為之拍手叫好。但需要明确的是,SW26010提供的一緻性解決方案是否需要經過片外存儲還尚不清楚,至少在2015年發表的關于SW26010的論文當中,其一緻性仍然需要對外訪問内存才能實現,留下了一個遺憾。如果SW26010能夠做到完全形态的片上高速緩存一緻性,就能削減數據在片内片外搬移的功耗,進一步提高能耗效率也降低了對内存帶寬的需求。
實現兩種體系結構之間的一緻性是需要長期研究和大量實驗支撐的前沿問題。舉例來說,兩年前筆者聽過AMD中研院的一個公開報告,AMD的工程部門力圖在他們的APU上實現亂序多發射核心與集成GPU之間的數據一緻性,結果發現引入CPU和GPU之間的硬件一緻性以後會在高速緩存上造成瓶頸。這是因為CPU和GPU兩者的訪存特征截然不同,GPU上可以同時運行成百上千個線程,這些線程會産生巨量的訪存請求,以每個線程發出一個訪存請求、高速緩存命中能夠過濾其中一半來計算,每個周期滲透到CPU-GPU一緻性層面上的請求達到幾百個并不是難事。作為對比,即便是最激進的亂序多發射CPU每個周期也隻不過産生寥寥數個訪存請求。GPU生成的這些訪存請求(特别是寫請求)就要去詢問負責GPU-CPU數據一緻性的部件(一般是目錄也就是Directory)來更新最新的數據狀态信息以及獲取可能需要的一緻性訪問許可,這就會對負責GPU-CPU數據一緻性的部件造成很大壓力。而得到一緻性訪問許可、更新數據最新狀态信息以前,訪存請求是必須等待、不能繼續處理的。如果一緻性處理的部件應付不過來,就會将CPU的高速緩存和核心内部的訪問隊列以及GPU高速緩存和核心内部的訪問隊列都堵死,一緻性如果實現不好就會導緻CPU性能和GPU性能的雙雙退步。既然實現數據一緻性這麼難,那麼為什麼還要實現這個技術呢?
總共擁有260個核心的SW26010處理器,工作頻率為1.5GHz,超級計算機神威·太湖之光内置了總共40960顆SW26010處理器。數據一緻性的硬件和軟件維護
讓我們還是以數組來舉例,假設現在有一個任務是将一個包含20億個整數的數組{4,6,8,5,2……6,1,3,9,2}進行排序,然後從中挑選前100個素數。允許利用GPGPU來加速的情況下,一個直觀的解法是,将這20億個數字從CPU傳遞給GPGPU,用GPGPU的寬SIMD并行能力進行排序,排序完成後再傳遞回CPU進行挑選素數的處理。在不支持CPU-GPGPU硬件一緻性的體系結構下,程序員需要自行手動、或者提供編譯制導等方式,讓CPU将數據搬移至GPGPU的顯存,GPGPU排序完成後,再通過顯存經PCIe總線搬運回來。而在支持CPU-GPGPU硬件數據一緻性的體系結構上,GPGPU完成排序後,CPU開始做素數篩選時,CPU的高速緩存子系統會發出裝載數據的訪存請求,負責CPU與GPU高速緩存一緻性的部件會接到這個請求,随即指示GPU的高速緩存把排好序的數字直接推送至CPU的高速緩存,這個過程對上層軟件棧透明。
總體來看,SW26010勇敢地邁出了硬件一緻性這一步,但其量産時使用的具體實現方案目前沒有透露。當然,在未來申威處理器的設計團隊或許能公開發表文章講述其内部設計實現的具體細節。
SW260102015年的論文中介紹的CPE與MPE之間的一緻性維護方式,CPE讀取MPE端的最新數據需要通過内存中轉。超前的設計亮點與缺憾
除了硬件一緻性的支持之外,SW26010其餘的設計也可圈可點。整體上來說可以認為SW26010的結構領先目前Intel的加速卡和NVIDIA的GPGPU半代左右的水平。領先特征可以概括為如下兩個方面:
其一是片上網絡。SW26010在CPE核心陣列内使用了mesh結構的片上網絡,多個CPE核心陣列與MPE核心之間更是使用了第二層的片上互聯網絡,使之成為了一個樣式标準的衆核+多級片上網絡結構,片上網絡上還挂載了支持中斷處理和同步處理的mesh控制器。具備一定規模,有一定拓撲性質的片上網絡在目前的處理器/GPGPU中都較少見到,SW26010在這一點上可以毫不愧疚地邁入國際第一梯隊的行列。
其二是CPE陣列内部的寄存器通信。為了盡可能地把數據保持在本地,SW26010在CPE陣列内部也引入了快速寄存器通信機制,支持多播和廣播兩種通信方式。其設計的通信接口和MPI類似,通過專有指令進行,不保證一緻性。這種通信方式可以繞過片上緩存,直接在各個核心的寄存器之間交換數據。目前暫不清楚一個CPE陣列的64個核之間是否支持點對點的低延遲寄存器通信,即便不是最強的點對點通信,在64個核之間直接實現對流水線上資源的注入,其所需要的低延遲核間連線也是一項非常值得深入探究的設計。
另外,SW26010的設計中也有一些令人疑惑的地方。對于片上高速緩存子系統,每個MPE核心具備32KB一級數據緩存和32KB一級指令緩存,以及256KB的二級緩存;而在CPE核心陣列當中,每一個CPE核心有各自獨立的16KB指令緩存,以及一塊由程序員直接控制的64KBSPM(ScratchPadMemory),未提及其他硬件高速緩存,且SPM之間不提供硬件一緻性。SPM和普通的高速緩存的區别在于,普通的高速緩存是由硬件來決定換入換出,也就是說存儲什麼内容是由硬件依據訪問曆史、訪問頻率、步長等信息自主決定的,但SPM則把這一工作交給了上層軟件,這一做法和NVIDIA在GPGPU中提供一級高速緩存+SPM的配置類似,其壞處是加大了上層軟件的調優難度,好處是如果SPM能夠用好,可以收到超過普通高速緩存的效果。筆者猜測SW26010沒有在CPE陣列上配置傳統的硬件高速緩存,可能是因為目前異構衆核高速緩存硬件一緻性的方案太過超前,目前還不完全成熟,亦或是成本原因難以在256核心的片上再配置大容量的硬件高速緩存。
CPE陣列的框架圖左側為需要經過核内甚至核外存儲的傳統核間通訊方式,右側為SW26010的核間快速寄存器通信方式。作者注:本文所有技術框架圖、數據和技術介紹來源于
[1]CooperativeComputingTechniquesforaDeeplyFusedandHeterogeneousManyCoreProcessorArchitecture.計算機科學與技術學報,2015.
[2]TheSunwayTaihuLightsupercomputer:systemandapplications.中國科學·信息科學,2016.
[3]JackDongarra教授對太湖之光系統的公開報告
結語:無懼技術封鎖
SW26010的推出意義深遠,在僅僅一年之後就宣告中國打破了美國的超級計算機相關芯片産品的禁運,問鼎top500的同時又攜帶三個戈登貝爾獎入圍的真實應用,對于中國的超算行業來說可謂一針實打實的強心劑。記得在2015年4月,美國商務部發布公告,決定禁止向中國4家國家超級計算機機構出售“至強”芯片之時,業内人士還曾擔心禁售短期内可能造成“天河二号”升級計劃拖延,但長期來看“這是倒逼中國推進超算國産化戰略的重要機遇”。很多人顯然完全沒想到國産處理器可以發展得這麼快、并且奪得世界冠軍。毫無疑問,美國的芯片禁運反而縮短了中國的研制周期,使我們搞出了完全自主的高性能處理器和完全自主可控的超級計算機,西方的芯片禁運對中國可謂利大于弊。因此僅僅想通過幾款芯片的禁運,就來阻擋中國這樣擁有大量尖端人才的科技大國的發展,顯然太天真了一點。