RISC-V是一種開放指令集架構,任何人都可以創建了解RISC-V指令的內核,而無需擔心專利和許可證。SiFive是RISC-V領域的重要參與者,創建了可以授權給其他公司的定制RISC-V內核。
在Hot Chips 2023上,SiFive展示了他們的P870內核,旨在提供更高性能,并與ARM的Cortex X2或AMD的Zen 4c相媲美。
●P870核心概覽
高級內核設計P870是SiFive的六核心,具備亂序執行功能,具備強大的重排序緩沖區和指令融合能力,從而具備出色的重排序性能。?P870采用了現代化功能,如分支預測器解耦、非調度隊列以及RISC-V的矢量執行能力。
從SiFive的流Pipeline來看,P870的誤預測損失僅為8個周期,相較于ARM、AMD和Intel的現代CPU,這是相當短的。如果在Ex階段檢測到錯誤預測,并且可以從指令緩存重新啟動流水線,那么錯誤預測懲罰僅為7個周期。
●分支預測器?
P870的流水線以分支預測器為起點,用于確定指令的執行方向。采用了具有16K表條目的八表TAGE預測器,通過在一組子預測器中選擇來進行方向預測。這種配置可以提供強大的分支預測性能。
P870的分支預測過程包括快速零氣泡預測器生成目標地址,然后TAGE預測器完成其預測,最后進行間接分支預測。雖然間接預測會帶來三個周期的懲罰,但與競爭對手AMD Zen 4相似。
P870還提供了1024個零氣泡預測器條目,與AMD Zen 3相匹配。其他分支預測資源也很充足。64 個條目的返回地址堆棧。AMD 的 Zen 系列只有 32 個入口返回堆棧,并且已經可以非常高精度地預測返回。間接預測器的 2.5K 條目容量也相當可觀。Zen 4 有 3072 個條目間接預測器,而 Zen 3 有 1536 個條目。P870 的間接預測器正好位于這兩代 Zen 之間。
●指令獲取?
分支預測器生成獲取地址,P870的前端每個周期可以從64KB指令高速緩存中獲取36字節的數據,相當于9個RISC-V指令的字節,以供6寬解碼器使用。此外,32條目的iTTLB用于虛擬地址到物理地址的轉換。
P870的解碼器可以處理多種指令融合情況,盡管SiFive沒有提供詳細說明。這種指令融合的潛力對于提高性能非常直觀,但需要編譯器的支持。
●執行引擎
P870具備大型的后端資源,與ARM Cortex X系列或AMD Zen 4相當。這些資源包括重新排序緩沖區、寄存器文件容量等,盡管加載和存儲隊列略顯不足。iFive選擇了一種執行端口布局,與ARM的Cortex X2策略有一些相似之處。他們采用了小型分布式調度程序,從而產生了大量的執行端口。
分布式調度程序可能很難調整,因為任何一個調度隊列填滿都可能導致停滯。為了解決這個問題,SiFive采用了與蘋果Firestorm類似的策略。每個執行集群都有一個非調度隊列,以防止調度隊列填滿時重命名器停止。
在執行單元方面,P870共有六個端口,端口數量與Cortex X2相匹配,但每個端口都有一個專用的調度隊列。Cortex X2將兩個端口用于處理分支操作,P870則使其中一個分支端口也能夠處理一般的ALU操作。
●浮點運算
浮點執行資源相對于整數執行資源而言較為有限。P870具備兩個浮點管道,每個管道能夠處理最常見的操作。SiFive著重強調了其浮點加法和乘法的出色性能,僅需2個周期的延遲。與大多數其他現代CPU不同,SiFive的演示表明P870具備獨立的浮點和矢量寄存器文件。
具備不同數量的重命名寄存器,并且彼此之間不是倍數關系(減少了融合情況的可能性)。浮點和矢量寄存器文件各自可以具備較低的端口數。供給兩個乘加單元所需的輸入達到了六個,較低的端口數應該能夠實現更節省空間的寄存器文件。
●矢量執行
P870支持一對128位寬矢量執行管道,這在RISC-V領域是一大進步,P870還引入了針對RISC-V的LMUL功能的獨特機制,稱為向量排序器,用于提高矢量指令的效率。
P870支持矢量執行,配備了一對128位寬的管道。這在P870的架構中是一個弱點,但在RISC-V世界中仍然是一大進步。與之相比,其他RISC-V芯片,如Ventana的Veyron V1,只具有標量FP執行能力,根本沒有矢量執行能力。一對128位的管道大致與ARM的Neoverse N1和N2上的管道相匹配,并且可以提供可接受的矢量性能。?
P870具有獨特的應對機制,針對RISC-V的LMUL特性,稱為矢量順序器。瘋狂的程序員可以將LMUL設置為大于1的值,使矢量指令尋址連續的寄存器塊。通常,奇怪的復雜事情是由解碼器將指令分割成多個微操作來處理的。
但如果LMUL不等于1,這樣做將消耗大量的解碼器和重命名器帶寬。?
如果LMUL > 1,SiFive會在管道中進一步拆分矢量指令。這樣做意味著LMUL = 2的指令將僅消耗一個解碼槽。
在順序器之后,將消耗多個調度器槽,并根據需要在多個周期內發出其微操作。對SiFive的管道幻燈片進行了仔細觀察,表明順序器可以在短短一個周期內分解矢量操作。
矢量單元在矢量順序器之后放置了自己的寄存器重命名階段,因此在分割矢量操作后分配物理寄存器。與所有新的架構功能一樣,我們必須拭目以待,看看RISC-V的LMUL會有多大的用處。
●緩存和內存訪問?
P870具有三個用于地址生成的管道,兩個管道可以處理加載或存儲操作,而第三個管道只處理加載操作。這種AGU設置與Cortex X2、A710和Zen 4上看到的類似。數據緩存訪問需要四個周期。有趣的是,地址生成、標簽查找和數據緩存訪問在三個周期內完成。P870額外消耗一個管道階段(Drv)來移動數據。我想知道未來的設計是否會實現3個周期的加載到使用延遲。這應該是完全可行的。畢竟,AMD的Athlon系列在古老的工藝節點上實現了64 KB L1D的3個周期延遲,同時以相似的頻率運行。?
地址翻譯由64個條目的DTLB處理,并由1024個條目的L2 TLB支持。現在的L2 TLB有點小,但ARM的Cortex A710上也有類似大小的L2 TLB。 L1D缺失由共享的、非包含的L2緩存處理。L2緩存是分段的,用于處理來自多個核心的訪問,并具有16個周期的延遲。
英特爾的E-Cores也是以四核簇的方式排列,具有共享的L2緩存,延遲為20個周期。SiFive允許客戶配置L2的大小,但他們以4 MB的L2配置作為示例。為了處理一致性,L2復合體維護監聽過濾器來跟蹤核心私有緩存內容,其方案聽起來類似于Cortex A72使用的方案。?
P870的L3緩存在簇之間共享。L3的容量和延遲取決于具體的實現,但SiFive在性能估算中使用了一個16 MB的L3配置。
●可靠性特征?
現代CPU都采取各種措施來保護各種緩存和其他結構,以提高可靠性。
SiFive的P870-A是P870核心的汽車變種,特別注重錯誤檢測和糾正。除了用于緩存和寄存器文件的標準ECC和奇偶校驗保護集之外,SiFive還實現了高可靠性緩存控制器和互連。
CPU通常在它們的互連中的各種隊列和傳輸鏈路上都具備奇偶校驗或ECC保護。例如,Zen 4的可擴展數據端口(Infinity Fabric的接口)具備奇偶校驗保護,UMC(內存控制器)前面的隊列具備ECC保護。?
SiFive可以將一對P870核心以鎖步方式運行,以進一步提高可靠性,有點類似于飛機和航天器在多臺計算機上運行冗余計算。隨機位翻轉不太可能以相同的方式影響多個核心,因此這種方法通過基本上復制所有核心結構來顯著提高可靠性,但代價是計算吞吐量較低。這種鎖步操作是可能的,因為每個核心在重置后都以明確定義的狀態開始,并且此后的操作是確定性的。
●最后
RISC-V雖然起步較晚,但增長迅速。SiFive的P870展示了能力和野心,希望能與ARM競爭并在市場上獲得份額。RISC-V還需要發展更完善的軟件生態系統來支持其發展,這是個挑戰。
SiFive的P870內核在性能和功能方面表現出色,為RISC-V生態系統的進一步壯大奠定了基礎。
編輯:黃飛
?
評論
查看更多