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