張平
RISC-V近年來的發(fā)展勢(shì)頭不錯(cuò),其開放、免費(fèi)的特性吸引了大批企業(yè)、研究人員的關(guān)注,采用RISC-V架構(gòu)的產(chǎn)品也逐漸向各個(gè)方面延伸。2020年底,一家名為Esperanto的公司公布了一款采用RISC-V架構(gòu)的超大規(guī)模高性能Al芯片,由于其獨(dú)特的設(shè)計(jì)和理念,在發(fā)布后就引發(fā)了業(yè)內(nèi)關(guān)注。不過當(dāng)時(shí)并未公布太多信息,直到近期,Esperanto才披露了這款產(chǎn)品在架構(gòu)、設(shè)計(jì)以及運(yùn)行方面的詳細(xì)信息,值得一看。
目前AI芯片是業(yè)內(nèi)熱門的發(fā)展方向,考慮到未來AI計(jì)算廣闊的市場前進(jìn),大量企業(yè)都希望參與其中。目前設(shè)計(jì)AI芯片的方法多種多樣,比如采用x86架構(gòu)、ARM架構(gòu)組建CPU來實(shí)現(xiàn),或者采用自有指令集設(shè)計(jì),這些不同的方法擁有各自的優(yōu)勢(shì)和不足。Esperanto作為一家初創(chuàng)公司,選擇了RISC-V指令集來制造一款全新的AI芯片。不僅如此,這款產(chǎn)品還包含了高達(dá)238億晶體管,以及超過1000個(gè)核心,規(guī)模之大令人咋舌。ET-SOC-1處理器總覽
Esperanto推出的首款處理器全稱是“Esperanto Technologies Supercomputer-on-Chip 1”,縮寫為“ET-SoC-l”。它定位一款推理加速器,而不是常見的訓(xùn)練加速器。一般來說,神經(jīng)網(wǎng)絡(luò)需要在訓(xùn)練完成建立模型后,才交由推理加速器進(jìn)行推理。在訓(xùn)練階段需要大量的原始數(shù)據(jù)、極高的計(jì)算能力和較長的訓(xùn)練時(shí)間。推理時(shí)間則相對(duì)短一些,它使用訓(xùn)練模型來完成,因此對(duì)計(jì)算能力要求不高,但是對(duì)延遲很敏感。因此在設(shè)計(jì)方面,ET-SoC-1需要進(jìn)行針對(duì)性優(yōu)化。
ET-SoC-1包含了2個(gè)類型的核心,一個(gè)被稱為ET-Minion,是一種順序執(zhí)行的小核心,用于處理矩陣乘法、自定義張量計(jì)算等。另一個(gè)被稱為ET-Maxion,是一個(gè)較復(fù)雜的大內(nèi)核,能夠運(yùn)行Linux操作系統(tǒng)。在ET-SoC-1中,ET-Maxion被用作控制CPU,ET-Minion則被用作并行數(shù)據(jù)處理使用。
ET-SoC-1設(shè)計(jì)了一個(gè)6×6網(wǎng)格,一共36個(gè)區(qū)塊,其中2個(gè)被用作控制處理器集群和PCle控制器,其余34個(gè)全部布局了被稱作Minion Shires的ET-Minion處理器集群。1個(gè)Minion Shires中包含了總計(jì)32個(gè),分為4組的ET-Minion核心,這樣它一共擁有1088個(gè)(34×32) ET-Minion核心,以及這些核心所擁有的總計(jì)136MB L2緩存。實(shí)際上ET-SoC-1中還有1個(gè)額外的ET-Minion核心用作服務(wù)處理器。在控制中心方面,4個(gè)ET-Maxion和4MB L2被集成在一個(gè)區(qū)塊上,用于運(yùn)行操作系統(tǒng)等。此外,ET-SoC-1面向超大規(guī)模的數(shù)據(jù)中心市場,這意味著它也可以和高性能獨(dú)立處理器一起工作。對(duì)一些邊緣應(yīng)用而言,ET-SoC-1配合高性能獨(dú)立處理器可以發(fā)揮更大的作用。加總起來,ET-SoC-1擁有1093個(gè)核心。
ET-SoC-1采用了臺(tái)積電7nm工藝,擁有238億晶體管。雖無芯片面積和封裝尺寸的信息,但根據(jù)同類產(chǎn)品進(jìn)行估計(jì),ET-SoC-1的封裝面積可能在350mm2以上,算得上中大型處理器。單個(gè)ET-Minion可以在1GHz頻率下實(shí)現(xiàn)INT8精度的1280PS/周期或者128GOPS算力。用此數(shù)據(jù)計(jì)算的話,在1GHz頻率下,所有1088個(gè)ET-Minion核心可以輸出最多139.3 TOPS算力(INT8)。隨著頻率提升,ET-SoC-1的算力也會(huì)增長,比如在1.5GHz下,ET-SoC-1的算力會(huì)提升至208.9TOPS (INT8)。ET-SoC-1支持FP16(半精度)或者FP32的計(jì)算,但算力相比INT8低不少。在1GHz時(shí),ET-SoC-1的FP16算力為35TFLOPS,在1.5GHz時(shí)會(huì)提升至52TFLOPS。
ET-SoC-1使用低功耗的LPDDR4接口進(jìn)行數(shù)據(jù)通信和供電,最多支持32GB容量的DRAM,最大帶寬可達(dá)137GB/s。ET-SoC-1還可以通過PCIe 4.0x8接口和外界連接。ET-SoC-1的典型工作功耗大約在20W,也可以低于它。這么低的功耗是由于芯片的運(yùn)行頻率非常低,只有1GHz~1.5GHz,且整體規(guī)模不大,這使得ET-SoC-1符合OCPM.2加速器模塊的規(guī)格。不過未來ET-SoC-1還可能會(huì)衍生出支持PCIe接口,具備更高規(guī)格和功耗的產(chǎn)品。深入ET-SoC-1核心架構(gòu)
接下來讓我們深入ET-SoC-1內(nèi)部,去看看這款RISC-V架構(gòu)的處理器到底有哪些獨(dú)特之處。首先是負(fù)責(zé)控制的ET-Maxion核心的架構(gòu)設(shè)計(jì)。
ET-Maxion:性能堪比Cortex-A72的控制核心
ET-Maxion是一個(gè)典型的高性能大核心。和之前提到ET-Minion運(yùn)行在大約1GHz~1.5GHz不同的是,ET-Maxion運(yùn)行的頻率要高一些,超過了2GHz。從設(shè)計(jì)上來看,ET-Maxion實(shí)際上是UC Berkeley Out-of-Order Machine (BOOM)v2 CPU(簡寫為RISC-V BOOM)的一個(gè)分支。它是采用Chisel硬件構(gòu)建語言編寫的一個(gè)可合成和可參數(shù)化的開源RV64GC RISC-V核心。由于它是開源的,所以廠商可以在開源許可文件的約束下自由使用它,一般人們會(huì)利用RSIC-V BOOM構(gòu)建高性能處理器。Esperanto正是利用RISC-V BOOM構(gòu)建了ET-Maxion的基本架構(gòu)。
相比RISC-V BOOM,ET-Maxion在各方面都進(jìn)行了大刀闊斧的改進(jìn),比如ET-Maxion更寬、更長、規(guī)模也更大,前端經(jīng)過了重新設(shè)計(jì),執(zhí)行單元也進(jìn)行了重制,并加入了分支預(yù)測(cè)器和預(yù)取器,還帶來了新的底層緩存和支持ECC的TLB。由于ET-Maxion要面向商業(yè)用戶,因此還增加了商業(yè)級(jí)別芯片的調(diào)試和性能監(jiān)控等功能。
在SPEC2006的ISO頻率上ET-Maxion的性能略遜于Cortex-A72,但高于Cortex-A57。僅從性能來看,ET-Maxion在RISC-V架構(gòu)下排名靠前,僅弱于SiFive的P550內(nèi)核,后者的IPC顯著高于ET-Maxion以及Cortex-A72,SPEC2006測(cè)試成績大約有8.65/GHz。
ET-Maxion是典型的10級(jí)流水線的亂序執(zhí)行架構(gòu)。它的前端是一個(gè)4發(fā)射結(jié)構(gòu),每周期能夠獲取16B的數(shù)據(jù),解碼后以每周期4條指令的速度將其分派到后端執(zhí)行部分。整個(gè)架構(gòu)也可以從具有奇偶校驗(yàn)和ECC功能的32KB分塊指令緩存中獲取指令。Esperanto花了相當(dāng)大的精力為它設(shè)計(jì)了先進(jìn)的條件預(yù)測(cè)器和擁有2K條目深度,支持BTB、基于路徑的間接預(yù)測(cè)器。最終,ET-Maxion的分支預(yù)測(cè)器實(shí)現(xiàn)了2級(jí)預(yù)測(cè):高速度且單周期運(yùn)行、基于BTB的預(yù)測(cè)執(zhí)行得到結(jié)果后,輸入第二級(jí)多周期、高精度分支預(yù)測(cè)器中進(jìn)一步處理,后者的結(jié)果可能會(huì)覆蓋前者,也可能不會(huì)。
ET-Maxion的前端每周期最多可以向調(diào)度部分發(fā)送4個(gè)指令。ET-Maxion使用的是分布式調(diào)度器,總?cè)萘繛?4個(gè)條目。ET-Maxion的重命名/分配/提交重排序緩沖區(qū)的深度為128條目。前端解碼后的微指令在這里暫存并進(jìn)行排序、重命名或者分配處理,等待進(jìn)入后續(xù)的執(zhí)行單元。
執(zhí)行單元的分派部分設(shè)計(jì)非常獨(dú)特,由1個(gè)128條目的整數(shù)通用寄存器文件和1個(gè)64條目的浮點(diǎn)寄存器實(shí)現(xiàn),整個(gè)分派部分每次可以輸出5條指令。這5條指令指向后部的4個(gè)調(diào)度隊(duì)列,每個(gè)調(diào)度隊(duì)列都是16深度的。其中,F(xiàn)PU執(zhí)行單元擁有1個(gè)調(diào)度隊(duì)列,剩余整數(shù)部分的復(fù)雜ALU、2個(gè)簡單ALU和AGU各擁有1個(gè)調(diào)度隊(duì)列。值得注意的是,2個(gè)簡單ALU共享一個(gè)調(diào)度器,另外,復(fù)雜ALU還加入了分支預(yù)測(cè)單元,能夠處理部分分支預(yù)測(cè)操作。所有4個(gè)調(diào)度隊(duì)列每周期可以處理5個(gè)微指令輸出的操作。浮點(diǎn)單元設(shè)計(jì)為64bit寬度,能夠支持RISC-V 32和雙精度的RISC-V 64浮點(diǎn)擴(kuò)展。
Esperanto本來計(jì)劃選擇自定義指令集,但是考慮到通用性、簡單性和市場接受度等因素最終選擇了RISC-V。Esperanto希望將更多精力花在性能和架構(gòu)方面的優(yōu)化上,而不是去解決ISA的問題。Esperanto展示了ET-Maxion的平面圖,其中幾乎1/3的面積用在緩存和分支預(yù)測(cè)上。另外占據(jù)較大面積的部件包括硬件預(yù)取器HPF、FPU浮點(diǎn)單元、LSU、000亂序引擎等。ET-Maxion的硬件預(yù)取器選用了更慢但是更準(zhǔn)確的版本,反而可以提高性能,將其放置在芯片的頂部以及關(guān)鍵路徑的外部,可以簡化接線。
ET-Minion:專精于大規(guī)模計(jì)算的小核心
Esperanto設(shè)計(jì)了用于大規(guī)模并行計(jì)算的專用小核心ET-Minion。它和ET-Maxion存在巨大差異,雖然也是一個(gè)64位的RISC-V核心,但采用的是順序執(zhí)行架構(gòu)。ET-Minion由于面向吞吐量,因此也采用了多線程的方案,它具有2個(gè)可以在停頓時(shí)交換的線程。ET-Minion采用標(biāo)量流水線設(shè)計(jì),每個(gè)周期獲取、解碼和發(fā)出一條指令,然后進(jìn)行處理并輸出結(jié)果。
ET-Minion的主要目的是加速推理計(jì)算,針對(duì)這個(gè)類型的計(jì)算,Esperanto為其設(shè)計(jì)了全新的執(zhí)行引擎。ET-Minion的后端為矢量密集型,為了節(jié)約資源給矢量計(jì)算,ET-Minion只設(shè)計(jì)了一個(gè)執(zhí)行單元來執(zhí)行RISC-V架構(gòu)所需的所有必要操作。其余部分包括2個(gè)執(zhí)行管道,1個(gè)256bit的浮點(diǎn)矢量單元和1個(gè)512bit的整數(shù)矢量單元。伴隨著這些矢量單元的是2個(gè)寄存器,1個(gè)32條目的256bit浮點(diǎn)寄存器和1個(gè)32條目、256bit的整數(shù)寄存器。寄存器對(duì)每個(gè)線程來說都是重復(fù)的,這意味著總計(jì)有2個(gè)“整數(shù)寄存器+浮點(diǎn)寄存器”組,每一組分別服務(wù)于一個(gè)線程。浮點(diǎn)矢量單元又可以細(xì)分為8×32的FMA,每周期可以提供單精度16FLOPs的性能,或者每周期半精度32FLOPs的性能。整數(shù)矢量單元的寬度是浮點(diǎn)單元的2倍,又被細(xì)分為16×32 TIMA,每周期能夠執(zhí)行128個(gè)INT8操作。在工作模式上,F(xiàn)P矢量單元從FP矢量寄存器中讀入數(shù)據(jù),但是整數(shù)矢量單元需要從FP矢量寄存器文件中獲得一半的矢量信息(256bit),再和私有整數(shù)矢量寄存器中獲得的信息組合起來,才能實(shí)現(xiàn)整個(gè)512bit寬度的寄存器文件。
從整個(gè)架構(gòu)設(shè)計(jì)來看,Esperanto在ET-Minion中加入了如此強(qiáng)大的浮點(diǎn)計(jì)算能力,這還是非常少見的。因?yàn)榻^大部分類似的產(chǎn)品都只提供INT8操作的能力。雖然對(duì)現(xiàn)有的計(jì)算來說,INT8其實(shí)很多場合下已經(jīng)足夠使用了,但是對(duì)那些需要FP16或者FP32的工作負(fù)載來說,ET-Minion的確更具優(yōu)勢(shì)。
ET-Minion包含一個(gè)矢量超越單元。這個(gè)單元可以執(zhí)行超越函數(shù),比如各類三角函數(shù)、指數(shù)、對(duì)數(shù)的計(jì)算,以加速諸如激活函數(shù)等操作。這個(gè)超越單元的設(shè)計(jì)非常有趣,它基于ROM進(jìn)行,這有助于降低功耗。
除了矢量單元外,ET-Minion還集成了一個(gè)矢量超越單元,可以執(zhí)行超越函數(shù),如各種三角函數(shù)、指數(shù)和對(duì)數(shù),以加快激活函數(shù)等。另外,Esperanto在矢量單元的設(shè)計(jì)上還做了一些獨(dú)特的操作,除了標(biāo)準(zhǔn)的RISC-V的矢量指令外,Esperanto還加入了2條獨(dú)特的矢量擴(kuò)展指令,一個(gè)是多周期張量指令,另一個(gè)是伴隨前者的矢量超越指令。實(shí)際上,這兩條指令對(duì)AI相關(guān)的計(jì)算是非常重要的,RISC-V和其他指令一樣,都對(duì)AI計(jì)算這種新生事物缺乏支持,原始的指令集也沒有集成相關(guān)加速的指令,因此廠商在這里添加了自有的指令集,這也是可以理解的。實(shí)際上,RISC-C基金會(huì)也—直在做類似的操作,比如將自定義擴(kuò)展植入規(guī)范中,以便更多的用戶使用。不過這里存在一個(gè)知識(shí)產(chǎn)權(quán)的問題,Esperanto可以宣稱這個(gè)指令集是自己的知識(shí)產(chǎn)權(quán)以阻止第三方使用,但是現(xiàn)在Esperanto沒有這樣做,目前尚不清楚Esperanto對(duì)這些私有的指令集的處理方法,如果能夠開放給業(yè)界使用的話,肯定能在很大程度上推進(jìn)整個(gè)產(chǎn)業(yè)的發(fā)展。
具體到這兩個(gè)指令集來看的話,多周期張量指令集的特點(diǎn)是允許內(nèi)核讀取一條指令,通過引入張量定序器狀態(tài)機(jī)(Tensor Sequencer),可以在100多個(gè)甚至1000多個(gè)周期內(nèi)重復(fù)操作。和大多數(shù)定序器一樣,ET-Minion為整個(gè)前端和其他每一個(gè)在張量操作發(fā)布和執(zhí)行時(shí)沒有被利用的單元設(shè)計(jì)了門控操作。這使得內(nèi)核能夠進(jìn)一步削減功耗。
另外還有一點(diǎn)需要提及。ET-Minion的物理設(shè)計(jì)為了低功耗做出了很多優(yōu)化。比如為了提高低電壓下的頻率,ET-Minion的流水線被設(shè)計(jì)為較少的級(jí)數(shù)。另外,Esperanto還設(shè)計(jì)了自己定制的SRAM而不是臺(tái)積電的標(biāo)準(zhǔn)SRAM。這種定制單元雖然在物理實(shí)現(xiàn)上要比臺(tái)積電的標(biāo)準(zhǔn)單元更大,但是可以在更低的電壓下穩(wěn)定運(yùn)行,甚至遠(yuǎn)遠(yuǎn)低于額定電壓。這里的額定電壓可能在0.75V左右,但是Esperanto的SRAM可以在0.4V下穩(wěn)定運(yùn)行,這又可以節(jié)省—大部分功耗。
從核心到區(qū)塊再到片區(qū):ET-SoC-1的實(shí)現(xiàn)方式
ET-SOC-1內(nèi)擁有大量的核心,那么他們是如何集成和工作的呢?在這里,Esperanto帶來了區(qū)塊和片區(qū)的概念。
先來看看區(qū)塊。以1個(gè)ET-Minion為基本單位的話,8個(gè)ET-Minion可以被看作是一個(gè)區(qū)塊。在一個(gè)區(qū)塊內(nèi),每個(gè)內(nèi)核會(huì)競爭性的共享32KB指令緩存。每個(gè)周期,一個(gè)緩存行數(shù)據(jù)被發(fā)送至2個(gè)內(nèi)核。換句話說,指令緩存在每個(gè)周期內(nèi)輪詢一堆內(nèi)核,將64B的16條指令發(fā)送到2個(gè)獨(dú)立的內(nèi)核,內(nèi)核對(duì)這些信息進(jìn)行緩沖存儲(chǔ),允許他們?cè)谥噶罹彺孓D(zhuǎn)移到其他內(nèi)核的時(shí)候繼續(xù)運(yùn)行。
在區(qū)塊之上是片區(qū)。4個(gè)區(qū)塊結(jié)合成為1個(gè)片區(qū),1個(gè)片區(qū)擁有32個(gè)核心。每個(gè)區(qū)塊通過交叉開關(guān)連接到周圍的4組L2緩存。1個(gè)L2緩存包含4個(gè)1MB的SRAM組,可以通過軟件配置其為高速緩存或者暫存器訪存。在暫存器的配置下,整個(gè)緩存將被視作一個(gè)很大的地址空間,軟件可以使用它精確地訪問數(shù)據(jù)。有趣的是,默認(rèn)情況下,片區(qū)的L2緩存都是私有的,當(dāng)然也可以配置為跨越整個(gè)芯片的最后一級(jí)緩存,所有這些功能都以每個(gè)緩存Bank的粒度進(jìn)行配置。比如,一個(gè)緩存Bank可以被保留為暫存器,另一個(gè)可以用于1MB的片區(qū)LCC,另外兩個(gè)Bank可以配置為2MB的私有L2。每個(gè)片區(qū)都可以通過網(wǎng)狀互聯(lián)和其他的片區(qū)通訊,每個(gè)區(qū)塊都有一個(gè)網(wǎng)絡(luò)接口站點(diǎn)。
最后每個(gè)片區(qū)都通過網(wǎng)狀連接至其他任何區(qū)塊和芯片上其他任何組件,鏈接采用的數(shù)據(jù)位寬可能是1024b。此外,芯片上另一些組件比如內(nèi)存通道和PCIe接口等,都通過類似的網(wǎng)絡(luò)連接至整個(gè)芯片上,最終組成ET-SoC-1芯片。
最后來看看有關(guān)ET-SoC-1芯片的具體產(chǎn)品實(shí)現(xiàn)。Esperanto現(xiàn)在推出了名為OCP Glacier Point V2的加速卡,采用OCP M.2加速器模塊加速。Esperanto宣稱可以最多在OCP Glacier Point V2加速卡上封裝6個(gè)加速器模塊,這樣一來,每個(gè)OCP Glacier Point V2加速卡將擁有6558個(gè)RISC-V內(nèi)核、192GB的LPDDR4X內(nèi)存以及822G B/s的DRAM帶寬。這個(gè)模塊的理論峰值速度將達(dá)到835.6TOPS (INT8)或者210TFLOPS(FP16)。
寫在最后
可以看出,ET-SoC-1是一款面向應(yīng)用市場推出的產(chǎn)品,其設(shè)計(jì)和架構(gòu)都針對(duì)應(yīng)用做出了優(yōu)化,并且最終的產(chǎn)品實(shí)現(xiàn)也非常成熟。同時(shí),ET-SoC-1代表著RISC-V首次同時(shí)涉足高性能控制核心和超大規(guī)模并行計(jì)算。目前ET-SoC-1還處于早期實(shí)驗(yàn)和推廣階段,它的理論性能和實(shí)際表現(xiàn)究竟如何還不清楚。在今年的HotChip 33上,ET-SoC-1芯片也有更進(jìn)一步的展示,本刊會(huì)繼續(xù)保持關(guān)注,在之后給大家?guī)砀钊氲膱?bào)道。