張平
2020年6月,TOP500超算排名更新了最新的一期榜單。在這期榜單中,排名第一的不再是IBM的Summit超算,而是來自日本神戶市的SupercomputerFugaku,其最大計算能力高達415530TFLOPS,峰值計算能力高達513845.7TFLOPS,遠遠超過第二名Summit最大148600TFLOPS和峰值200794.9TFLOPS的能力。值得注意的是,這款超算采用的處理器核心數量高達7299072個,也遠遠多過Summit和第三名Sierra,后兩者的處理器核心數量僅為2414592和1572480。換句話來說,Fugaku采用的處理器核心數量幾乎是Summit和Sierra之和的兩倍,和排名第四的中國超算神威太湖之光的處理器核心數量10649600相差不遠。出現這樣巨大差距的原因是Fugaku超算和神威太湖之光并沒有采用加速計算卡,全部數據計算能力都依靠CPU來完成。相比之下,Summit和Sierra都用了英偉達的GV100加速卡輔助加速。這樣一來,Fugaku的處理器就頗令人關注了,而這款帶領Fugaku超算登頂的處理器,就是日本富士通公司推出的A64FX處理器。
富士通:低調的日本處理器巨頭
說起富士通,大家可能對這家日本企業沒那么熟悉。富士通實際上是全球領先的信息通信技術企業,成立于1935年。目前富士通是日本排名第一的IT廠商,全球第四大IT服務公司以及第五大服務器/PC生產商,也是財富500強。在半導體產業方面,富士通擁有相對獨立和完善的產品研發體系,在商用設備尤其是大型機、服務器等領域有著深厚積累
富士通比較廣為人知的兩條產品線分別是SPARC64處理器產線和GS21服務器產品線。其中前者采用的是SUN之前推出的SPARC架構,目前富士通和SUN聯合研發推出了包括SPARC64V、SPARC64V+、SPARC64VI、SPARC64VII、SPARC64X、SPARC64X+以及SPARC64XII等處理器,搭配富士通提供的相關軟件解決方案。其中最新的M12-2S服務器可以搭載32顆SPARC64XII處理器,提供32TB的內存,主要應用在企業級關鍵計算或者云計算場合,可使用Solaris11或者UNIX操作系統,能夠為企業級客戶提供大量的管理功能以及高可靠性、兼容性的解決方案。另外,GS21系列產品也是富士通的主打設備,屬于面向企業的“事務處理器”范疇,能夠帶來企業級別的事務處理、安全性和穩定性應用等。
從市場來看,由于英特爾、ARM等廠商在兼容性和市場拓展方面越來越強大,類似富士通這種采用比較小眾架構的產品在終端市場的“蛋糕”有做小的趨勢,尤其是SPARC架構,富士通自己也承認這款架構在未來發展可能存在一些問題。不過,考慮到之前的客戶替換和升級需要,短期內富士通堅守的商業和企業級市場還是存在一些穩定客戶的。但古話說“人無遠慮,必有近憂”,富士通不得不將眼光放長遠一些,選擇市場上比較通用的架構開發處理器產品,希望能夠在更廣闊的市場中占據一席之地。
在思慮再三之后(其實很大程度上也是沒得選),富士通將目光轉向了ARM架構,推出了ARM架構的全新系列產品A64FX。根據富士通的規劃,未來富士通的MF、UNIX以及HPC架構的產品都將全面轉向ARM架構的A64FX。2018年富士通在Hotchip上發布了相關內容,實際產品在2020年才正式推出。
富士通A64FX處理器的設計理念是面向HPC和AI市場,前者是富士通一貫的優勢領域,之前日本最快的超算“京”就采用了富士通SPARC架構的處理器產品。不僅如此,這類面向超算的處理器最終都可以進一步優化后用在企業級服務器產品中,也算是“一魚多吃”的方法。在AI市場方面,富士通加強了新處理器在AI計算方面的能力。A64FX是一個高吞吐量的處理器,具有四大特點:首先是高性能,支持各類HPC和AI計算,支持FP64/FP32/FP16以及INT64/INT32/INT16/INT8等主流的數據格式。其次是高吞吐量,富士通為新處理器加入了512bitSIMD單元并且每個核心擁有2個管線,可以實現極高的數據吞吐量,外部緩存方面使用了HBM2,可伸縮性能方面最大可布置48核心,采用Tofu互聯總線。第三則是高能效比,富士通給出了一些參數,諸如(D|S|H)GEMM>90%、StreamTriad>80%,其每瓦特性能要高于目前的主流通用處理器。第四則是標準化,富士通A64FX采用的是ARMv8.2A架構搭配SVE和3級SBSA的設計,其在兼容性方面做得比較好。
A64FX:ARM架構的高性能產品
接下來本文將正式開始介紹A64FX處理器。這部分將根據富士通在之前會議上公布的處理器相關設計內容,從宏觀、架構設計、緩存、內存、電源設計等方面進行解讀。
宏觀:7nm、87億晶體管
先來看一些宏觀方面內容,A64FX采用的是臺積電的7nm工藝,整個處理器包含87.86億晶體管,引腳部分擁有594個信號腳。整個處理器在指令集方面使用了ARMv8.2A架構,支持SVE512-bitSIMD,單處理器最多可容納48核心搭配4個協處理器,支持最多32GBHBM2緩存,采用的總線被稱為Tofu總線,采用了6DMesh設計,支持28Gbps、2個通道、10個端口的設計,另外還有PCIe控制器,支持最多16條通道設計。
性能方面,A64FX單處理器的計算性能不低于2.7TFLOPS,內存帶寬可達1024GB/s。富士通還給出了A64FX與上一代處理器,也就是采用SPRARC架構的SPARC64XIFX處理器的性能對比,上代處理器的最大計算能力僅為1.1TFLOPS,數據帶寬也只有240GB/s。相比之下,A64FX的確帶來了性能和規模上的巨大飛躍。
另外,富士通還特別介紹了A64FX在性能方面的內容,尤其是在SIMD這種單指令多數據流計算上的支持,A64FX支持512bit的SIMD計算,相比之下,業內目前主流的處理器包括英特爾的AVX512、AMD的Zen架構等,都通過增加或者優化對512bit寬度的SIMD進行支持,富士通的做法大幅度提高了處理器在計算這類數據時的性能。目前A64FX帶來了包括Four-operandFMA(也就是FMA4)、Gather/Scatter、PredicatedOperations、Math.Acceleration等功能的支持,改善了前代產品對這些AI加速相關計算不支持的情況,提高了AI計算的效率。
A64FX的架構設計改進
富士通給出了A64FX的架構設計簡圖。根據其介紹,A64FX雖然是ARM架構的產品,但是也繼承并增強了之前SPARC64上的一些特征,包括超標量、亂序執行以及分支預測部分等。同時對SIMD和predicateoperations操作進行了加強。其中主要的加強就來自于2個512bit的SIMDFMA管道,predicateoperations處理單元以及4個ALU,另外數據存儲方面還增加了針對2個管道的512bitSIMD數據的存儲和讀取設計。富士通給出了一個架構簡圖用于說明哪些部分做出了改進。其中包括L1緩存、RSA、RSE部分,A64FX相對上代處理器的改進比較少,二包括指令排序部分、Reg-Read部分以及執行部分的PRX、FLA、FLB、緩存部分等改進較多,另外數據Tofu數據總線、L2緩存以及HBM2存儲等也都做出了比較明顯的改善。
富士通將重點放在了對FouroperandFMA的改進上。Four-operandFMA也就是常見的FMA4操作實際上是AMD發明的,在之前英特爾使用的普遍是FMA3。所謂FMA指令實際上是AVX指令的一個分支,用于加強處理器在SIMD乘加方面的能力。FMA3的特點在于能夠實現3個操作數的一次性處理,AMD隨后發揚光大的FMA4則增加到一次性可以處理4個操作數。從實際應用的角度來看,相對來說FMA4整體設計更為優越、計算靈活性要更高一些。不過富士通也提出一些自己的優化意見,比如FMA中將FMA3換轉為FMA4執行的“MOVPRFX”指令,可能會帶來性能的負面影響,但是富士通通過將“MOVPRFX”指令和接下來即將執行的指令打包在一起,在主線程上隱蔽了這個過程,從而帶來了性能提升。
富士通還展示了在引入更寬的SIMD執行通道后性能的變化情況。在執行雙精度的64bit數據時,A64FX的性能大約在2.7的水平,遠高于上代產品SPARC64XIFX的1.1,也遠高于早期SPRAC64VIIIFX的0.128,畢竟后兩者一個采用的是256bit的SIMD單元,另一個僅有128bit。在單精度的32bit數據處理上也呈現了類似的趨勢,三者的性能對比分別是5.4、2.2和0.128,差距頗大。當然在面對INT16、INT8這種前代處理器不能支持的計算時,A64FX自然就體現出巨大的優勢了。
內存和緩存設計
A64FX的L1緩存設計主要是針對512bit的SIMD進行了優化,能夠持續吞吐512bit-SIMD數據并將其送入執行引擎架構。另外,A64FX的緩存還能夠針對那些沒有對齊的SIMD負載進行操作,使其輸出的數據可以直接被一次性處理而不用再度對齊,這樣的操作提高了效率并節省了時間。
另外L1緩存的優化在于使用了名為“CombinedGather”的機制,這可以大幅度增加數據吞吐量,這種機制主要對HPC非常重要。簡單來說,“CombinedGather”可以將散落在內存各個地方的不同但是又相關的數據流收集在一起,并整理到寄存器中,方便處理器在下一步操作時直接使用,而不需要不斷地查找等待數據。根據富士通提供的數據,使用了“CombinedGather”的系統相比沒有這個技術的系統,其每個核心的吞吐能力提高了1倍。
另外一個重點在于超多核心處理器的內存實現方面。在A64FX上,有關這部分的核心設計被稱為CMG,也就是核心內存組。一個CMG包含了13個處理器核心,其中12個會用做計算核心,另外一個則專門用于為12個核心進行相關進程守護、IO調配、內存數據處理等操作。所有13個核心的數據都通過一個被稱為X-Bar的中轉站連接至8MB16way的L2緩存上,然后再通過每個CMG的HMB2內存控制器連接到一個獨立的HBM2內存顆粒上。整個A64FX處理器的內部有4個CMG,也就對應了4個HBM2內存和相關的內存控制器。這4個CMG之間的通訊采用了環形總線的設計,包括4個CMG、Tofu控制器、PCIe控制器以及其他部件等都通過環形總線交換數據。
從產品設計的角度來看,A64FX的這種環形總線設計方案和英特爾目前在處理器上使用的環形總線設計方案有一定的相似性,所有內核數據交換都是通過環形總線來完成的,這是一種簡潔實現多核心之間數據互通的結構。但是有所不同的是,英特爾在環形總線上直接掛接的是CPU、GPU等核心,但A64FX則掛接的是CMG處理器簇,這意味著兩個不同的處理器簇之間的通訊在最惡劣的情況下將帶來巨大的延遲。比如恰好在環形總線相對方向的2個CMG簇需要通訊的話,數據不得不穿透每一個GCM的X-Bar、L2、環形總線控制器/數據接口以及忍受環形總線上數據等待和傳遞的時間。另外,由于不同的HBM2內存塊掛接在不同的GCM上,這意味著整個處理器實際上被分成了4各部分。每個CMG有自己的內存空間和內存控制器,不同CGM之間的內存數據互通又需要通過環形總線和內存控制器才能共享,這同樣帶來了巨大的延遲,這點非??简灨皇客ㄔ谔幚砥鲀炔客ㄓ嵎矫娴脑O計。富士通在內部架構設計中比較出色(且奢侈)的做法是,為每個CMG單獨使用了一個處理器核心來協調數據通訊的問題,但是這樣做的效能和延遲表現究竟如何,現在還沒有更多的數據可以供參考??偟膩砜?,A64FX的設計可以說是比較取巧的,避免了很多復雜的設計問題,比如緩存一致性、內存一致性等,代價就是延遲或者損失了一個處理器的核心。最終效能如何,還有待觀察。
再來看看有關HBM2內存的設計。富士通公布了每個CMG和HBM2之間的帶寬情況,每個CMG內部層級最高的是核心,接下來是L1緩存。L1緩存寫入核心的帶寬為230GB/s,核心寫入L1緩存的帶寬為115GB/s。相應的,L2緩存寫入L1緩存的帶寬是115GB/s,L1緩存寫入L2緩存的帶寬則降低至57GB/s。最后一個層級是8GB的HBM2,這個層級和8MBL2寫入讀取的帶寬都是256GB/s。可以看出,除了L2和HBM2內存外,L1和核心、L2和L1之間的數據帶寬都是非對稱的。另外,富士通還特別指出,包括內核、緩存、內存控制器中都引入了亂序執行機制,最大化了每一個數據層級的讀寫能力。一般來說,亂序執行能力能夠根據現行任務的緊急程度排序情況來提供數據,而不是再是根據時間進行排序,這在很大程度上帶來了數據效率的提升。A64FX在這里使用了亂序執行的方法還是值得肯定的。