采用RISC-V架構的處理器不經意出現在日常電子產品中,似乎已經變得越來越稀松平常了:不僅是一些典型的MCU廠商開始擁抱RISC-V。
而且還體現在一些業已成熟的產品中,如今年的中國IC領袖峰會上,我們與硅谷數模對話,了解到如今十分成熟的TCON芯片內部竟也不顯山、不露水地加入了RISC-V小核心;還有像是前些年英偉達就開始在其GPU產品中選擇RISC-V作為控制器;西數也在整個產品線上開始選擇RISC-V核。
這讓我們對于RISC-V指令集的處理器微架構也愈發感興趣:去年10月,SiFive發布了首款RISC-V亂序CPU核心,U8系列處理器IP。SiFive在宣傳中提到,U8系列是目前最高性能的RISC-V指令集核心IP(似乎晚于玄鐵910),“基于超標量亂序管線,以及可配置的管線深度和發射序列寬度”。
SiFive在RISC-V的微架構IP授權中還是相當活躍的一家企業,其7系與8系IP核,作為RISC-V世界的高性能核心,是我們觀察RISC-V當前發展情況的一個重要窗口,雖然微架構剖析大約并不能特別好地呈現指令集本身的特性,但通過它們與Arm的對比,也是了解RISC-V生態的機會。
最高性能的RISC-V核心,比起Arm如何?
我們首先有必要搞清楚,SiFive內部針對不同系列的產品的定位。在今年4月SiFive舉行的一場名為"Embedding Intelligence Everywhere with SiFive 7 Series Core IP"的在線會議上,SiFive曾經對自家產品線進行過總結。SiFive的E系列核心,著眼在32bit嵌入式使用場景;64bit的S核心則偏向算力需求更大的場景;而U系列核心是性能最強的定位,面向高端計算。
若以數字為切分維度,SiFive的2系列是RISC-V處理器IP中效率最高,同時也最小型的處理器IP;3系列、5系列則在部署上更為廣泛,用在一些多核配置和對實時處理能力要求較高的場景;7系列和8系列如上所述都著力于高性能。數字與字母組合,就構成了不同的產品,比如說E3面向中端定位的嵌入式應用提供32bit性能;S7顯然是專注在性能方面的產品;U8則實現了可規?;渲玫母咝阅芎诵?,達成最高的每瓦性能。
在U8發布之前,SiFive的高算力產品主要就是U5、U7——這兩者仍是順序架構,對標的是Arm的低端及微控制器核心,在面對更為復雜的負載、要求算力的場景下還是有欠缺的。U8系列是彌補這個短板的產品。SiFive當時宣稱,U8將極大擴展SiFive與RISC-V在終端產品中的生態系統生存能力。
在SiFive U8系列產品下,目前主要包括U84、U87兩個核心IP。SiFive自己給的數據是,U84核心的性能是U74的3.1倍,IPC提升2.3倍(在最高頻率提升1.4倍的情況下)。上面這張圖對比中,在相同工藝的前提下,U84性能是U54的5.3倍;如果加上工藝造成的差別,則7nm的U84核心,性能達到了28nm的U54核心的7.2倍。這個數據其實一方面表明,RISC-V的性能潛力這些年還在挖掘過程中,所以相比更低端的產品能有如此巨量的性能與效率差距。
這是RISC-V自己內部在FPGA平臺下跑U84 IP的成績,比較的是SPECint2006成績。
SiFive此前在新聞稿中給U8樹立的直接競爭對手是Arm Cortex-A72,其中提及相比Arm Cortex-A72核心,SiFive U84提供可媲美的性能。不過在面積效益和每瓦性能方面,U84還是有優勢,當然我們知道A72已經是Arm前兩年的架構了。
同是7nm工藝的前提下,U84的每個核心占地面積在0.28mm2,四個核心加上2MB L2 cache構成一個簇,面積為2.63mm2。此前華為Krin 980的Cortex-A55小核心,每個核心配上各自128KB的L2 cache,面積為0.36mm2——要知道A72的性能是A55的兩倍還多,顯然在PPA方面,SiFive U84表現不錯。
需要強調的是,U8系列作為IP在面向具體的芯片產品時還是有很大的可配置和擴展性的,U84是作為一個標準IP存在的,所以這里的探討僅基于SiFive的標準IP,具體到實際產品仍然會有差別。
7系列與8系列微架構
或許很多人并不會將RISC-V這樣一個指令集,在高性能領域去與Arm一決高下,畢竟RISC-V當前的主場也不在此——IoT產品對碎片化問題更不敏感,也不像手機那樣對處理器性能有那么高的要求,RISC-V在很多情況下也偏向以微控制器的姿態存在。不過在我們看來,這依然是表現RISC-V陣營技術能力的重要組成部分。
RISC-V可查閱的資料當然還遠沒有Arm世界那么多,已經商用的RISC-V處理器——無論是MCU中的處理器,還是某些硬件中的控制器,公開的技術細節也并不多,詳實程度自然不及遍地開花的Arm。我們從有限的資料中去了解SiFive的7系列與8系列處理器微架構,對于理解RISC-V生態還是有價值的。
如前文所述,U8系列是SiFive的首款亂序核心,U84流水線深度12級,后端3個執行單元——還是相當傳統的亂序執行設計。這里的寄存器組(RegFile)設計還是頗為與眾不同。
從前端來看,核心的取指單元(Fetch Queue)能夠每周期以16字節從L1l獲取指令,將其放到取指隊列中。RISC-V ISA為可變指令編碼長度,假定平均是32bit,則對應每周期4個指令。所以U8的解碼器(decoder)也是4-wide設計,并將其傳遞到指令隊列(Instruction Queue)中。
再往后,指令隊列能夠一次發射3個指令到重命名階段(rename),這個寬度就比前面收窄了。外媒AnandTech此前也在針對這部分的評價中提到,取指階段的寬度大于發射這種設計,旨在發生分支預測錯誤時,讓前端能夠跟上后端;但解碼比發射更寬的這種設計,以前還從未見過。猜測這可能是微架構的某種平衡之策,也可能是為將來更寬發射的U8系列IP設計做準備的。從SiFive的官方介紹來看,發射隊列數應該是可以由芯片設計商來配置擴展的。
重命名階段的設計比較常規,包含一個重排序buffer,和三個分發引擎。然后就進入到執行后端了。
后端部分,SiFive只給了整數執行單元的情況,整體包含3條執行管線。每一條都有其各自的發射隊列,填充進3條ALU管線。其中一條管線是常規的ALU,有一條則與分支單元共享了端口,還有一條更為復雜,可以執行整數乘法和除法操作。
U84這樣的核心本身還沒有SIMD、矢量指令支持,似乎是因為擴展指令還未完全就緒。SiFive解釋說,今年年底這部分會就緒;可能U87就會具備這部分能力——目前我們從SiFive官網還未看到這方面的更新。
可擴展性
從構成SoC/MCU的更高層級來說,SiFive采用一種名為"Mix+Match"的大小核異構設計,共享一個L2可以配置至多9個核心。核心的搭配方式,可以是U8、U7、S2這些不同的核心搭配組合。
參考早前的7系列,采用的是8+1設計,看起來和這次的設計比較相似,但搭配方式上可能會有些差別。WikiChip所做的這張圖更清晰地表達了這種結構——包括核心、cache等,整體構成一個簇(Cluster)。其上還有自定義指令支持(Custom Instruction Extensions),每個核心都能實現特定指令的支持,實現某些特定工作負載的加速——這也是現在很多基于RISC-V指令微架構的能力。
7系列的介紹中曾提到,通過TileLink,可以將64個這樣的簇放在一顆單芯片上。U8系列核心IP介紹中則只提到了使用TileLink,來連接第三方加速器IP實現core-to-core通信,或者ChipLink實現chip-to-chip通信。存儲子系統部分詳情不多,SiFive提到提供高帶寬存儲接口IP,對于HBM2E+這類需求有幫助,不過這部分工作似乎還在持續。
7系列的核心有可選配一種FIO端口(Fast I/O),直連到核心,作為核心以及大容量SRAM或第三方加速器之間的低延遲接口——這種FIO端口還與main core complex bus總線相連,其他核心也能看到SRAM或者第三方加速器。不知道這種FIO端口,與SiFive的TileLink技術是什么樣的關系。
在可擴展性的問題上,U8系列還有一些特性:(1)對不同工藝節點的支持;(2)亂序設計可做配置,前文提到U84這種標準核心是12級流水線、3發射,實際上流水線深度、發射隊列數等都是可以針對不同應用做具體調整的;(3)整數單元到浮點單元的跨發射(cross-issue)能力;(4)“可組合cache”達成實時操作支持。
如前文所述,SiFive的7系列與8系列在當今RISC-V生態中可能沒有充足的代表性,不過如SiFive所言,這些高性能核心IP對于擴展RISC-V生態邊界還是有相當價值的。即便就現在看來,Arm生態在中高端市場仍然占據著性能和技術上相當的優勢。