【轉】Arm Cortex A78微架構評測:中核奠基之作
前言
A78的故事得從2018年講起,彼時Arm Austin團隊接過了微架構設計的接力棒,帶來了影響深遠的A76。A76在我眼中是Arm A系列步入現代高性能處理器領域的第一款微架構,其諸多的先進特性和良好的功耗、性能表現為時至今日的Arm微結構演進打下了良好的基礎。次年的A77是一步堅實的迭代,引入了更合理的后端配置和micro op cache等部件;采用了A77的驍龍865也堪稱一代傳奇。在A78世代,同期的X系列接過了wider、deeper的任務向最高性能發(fā)起沖擊;而A系列的定位悄然由大核變?yōu)榱酥泻耍赬1的映襯下似乎黯然失色。那么A78的表現究竟如何呢?我們來一探究盡。
基準測試
在這一部分我們使用SPEC06、SPEC17、Coremark以及Verilator對處理器進行測試。注意,我們并不執(zhí)著于fine-tune以獲得某一微架構的最高分數,而是以合理、統(tǒng)一的編譯參數帶來可比的分值數據。SPEC06、SPEC17等的分值受系統(tǒng)環(huán)境、編譯器版本、編譯參數、BIOS調教、頻率穩(wěn)定性、具體SKU的Cache配置、具體平臺的內存參數等因素影響巨大,且無法通過任何簡單線性縮放進行分數推演。
頻率
我們使用的平臺是Microsoft windows dev kit 2023;處理器為高通8cx Gen3。在多次更新后處理器已經能夠穩(wěn)定運行在2.4GHz,以下的測試都基于2.4GHz的頻率進行,但是A78微架構本身是可以運行在更高頻率的。
SPEC06
SPEC06是已經退役的SPEC測試集但是仍然被廣泛使用;其負載特性與SPEC17并不相同,因此仍然具有相當的測試價值。

A78擁有這三款處理器核中最高的IPC性能;考慮到其較小的浮點后端規(guī)格,其浮點性能也十分優(yōu)秀。在mcf等重訪存項目上,A78絲毫不遜于Gracemont;考慮到8cx Gen3相對較小的Cache規(guī)模,A78的極限應遠不止于此。Icestrom受制于E核簇較小的可訪問L2 Cache容量,在諸多子項上都落后明顯,絕對性能并不是其強項。
SPEC17
SPEC17是現役的SPEC測試集,被廣泛用于微結構性能評估。

A78擁有這三款處理器核中最高的IPC性能,考慮到A78也可以運行至3GHz,與Gracemont相比擁有相當的競爭力。Icestorm以極低的能耗著稱,但是在絕對性能上并不是其他兩款處理器核的對手。A78最令人驚奇的是其相較A76(本圖并未列出)的提升十分全面,在幾乎所有子項上都有正向提升而非“取舍的藝術”。
Coremark
Coremark是一款嵌入式基準測試程序,其受下級Cache子系統(tǒng)、內存等的影響極小,主要考察核內流水線以及L1 Cache的性能表現。

可見A78的表現十分優(yōu)秀,充分發(fā)揮了mop cache供指時6發(fā)射的前端優(yōu)勢;Icestorm則受制于較弱的后端執(zhí)行單元規(guī)格,落后于其他兩款CPU。
Verilator
以上三款測試集對處理器的前端壓力較小,仿真大規(guī)模設計的verilator則恰恰相反,海量的分支與數MB的代碼足跡能夠輕松壓垮ICache、BTB等組件,導致巨大的性能下降。

在這一項目中,盡管Icestrom頻率最低但仍然勝出。采用分離式前端的A78與Gracemont受制于較小的前端規(guī)模,發(fā)生了海量的BTB miss;采用傳統(tǒng)設計的Icestorm則將ICache視為下級BTB,因此取指效率更好。A78本身也并沒有為前端bound負載優(yōu)化的跡象,表現較為普通,甚至不敵較老的源于A76的N1。與Skylake相比更因為巨大的目標頻率差異而被遠遠甩開。

前端
隨著現代程序體量的膨脹,處理器面臨越發(fā)巨大的前端壓力;為了應對巨大的程序代碼段帶來的海量跳轉指令,大部分高性能處理器核心的BTB容量、分支預測器容量不斷擴展,分支預測算法不斷演進。
BTB
對于A78這樣的分離式前端設計,BTB是前端的絕對核心組件。其負責在譯碼之前識別指令流中的跳轉指令,并提供相應的跳轉目標地址。頻繁的BTB miss會造成嚴重的性能損失。

可見,A78的L0 BTB容量為64項,疑似全相聯;L1 BTB為4096項,組相聯。對于現今的分離式前端設計而言,這樣的BTB配置并不算大;但是考慮到A78的定位,4K項也算是誠意十足,與常青的傳奇架構Skylake規(guī)模相當。但是決定BTB性能的遠不止有效容量,其吞吐率、預測速度也十分重要。當分支指令數量小于64條時,平均每條分支指令的執(zhí)行延遲僅有0.5 cycle;即A78支持每周期2 taken分支。現如今的其他消費級處理器中僅有Intel的新產品12代、13代酷睿(GoldenCove等)擁有與之匹敵的特性。當分支指令大于64條小于4096條時,平均每條分支指令的執(zhí)行延遲僅有1-2 cycle;即此時A78每周期預測1條taken分支的代價在0-1間波動。如此低的下級BTB延遲也實屬不易;作為參照,12K項的Intel GoldenCove BTB延遲為2,7K項的AMD Zen4 BTB延遲為1.5-2??傮w而言A78的BTB表現十分驚艷,受制于其定位,A78在BTB容量方面有所保留,火力全開的X1則更為亮眼(容量相較A78倍增)。
RAS
指令流中的call、return指令是較為特殊的分支指令,其棧形式的行為特征催生了專門用于預測此類場景的RAS(Return Address Stack)。簡而言之,call指令壓棧,return指令彈棧;而硬件棧(RAS)結構的深度就影響了處理器在復雜函數調用場景中的性能表現。

可見A78的RAS容量為16項,與X1相比并沒有被閹割??赡軐τ贏rm而言,16項的RAS已經足以覆蓋常見場景了;但是為服務器優(yōu)化的Zen3則擁有著32項的RAS。
BP
分支預測器是當代高性能處理器前端中的又一核心組件,負責在流水線早期給出分支指令跳轉與否的猜測,引導指令流的方向。在推測執(zhí)行的超標量處理器中,分支預測器的準確率會極大影響處理器的性能和能效表現。

本測試考察分支預測器在不同歷史pattern長度、不同分支數量(需要預測)情況下的準確性表現。A78在4條分支、32條分支時經歷了一定程度的性能衰減。A78總體性能表現與Intel Goldencove相似,但是在追蹤海量分支指令時與Zen3仍有一定差距。
IJP
IJP(Indirect Jump Predictor)作為BP(Branch Predictor)的一部分,負責預測間接跳轉的目標地址。與預測跳轉與否的BP不同,IJP需要在多個可能的跳轉目標中選擇本次的跳轉目標,并引導指令流。

首先考察A78 IJP在不同歷史pattern長度(但是可能目標均只有2個)、不同間接跳轉指令數量(需要預測)情況下的準確性表現。A78在64條間接跳轉指令時經歷了一定程度的性能衰減,但是這種衰減可能并非IJP失效導致的,因為其并沒有導致跳轉地址錯誤而回滾,只是增加了少量的延遲。這可能是cascading預測的特征,IJP系統(tǒng)內某種規(guī)模更大但是速度相對較慢的結構修正了前級預測器的結果,導致taken延遲小幅增長。另外注意到,2條間接跳轉指令時,A78 IJP內部可能發(fā)生了某種Hash沖突導致性能顯著降低;對于Hash算法而言,類似的corner case是難以完全避免的。與X1相比,A78的IJP規(guī)模被小幅減少了;不過考慮到間接跳轉指令在一般程序指令流中占比極少,這樣的取舍是完全合理的。

接下來,考察A78 IJP在不同可能跳轉目標數量、不同間接跳轉指令數量(需要預測)情況下的準確性表現。A78在64條間接跳轉指令時經歷了一定程度的性能衰減。其間接跳轉預測器的容量約為2048-4096項,相較X1減少了一半(4096-8192)。在SPEC06中間接跳轉較多的perlbench子項中,A78的表現尚可但也談不上優(yōu)秀,還有一定的進步空間;但是不可否認,A78已經擁有了堅實的間接跳轉預測機制。
ITLB
TLB是現代處理器中容易被忽視的一個部件,其負責虛擬地址至物理地址的翻譯。在一般情況下TLB并不會成為瓶頸,但是隨著現代程序體量的膨脹,TLB承受的壓力也與日俱增,這一點在服務器負載中尤為明顯。由A系列衍生的Neoverse N系列會被用于服務器負載,因此TLB設計也不可忽視。

A78的ITLB容量為48項,取指時可以訪問的L2 TLB容量為1024項。在一般用戶程序中這樣的TLB規(guī)模并不會成為瓶頸;但是已經顯著落后于當今的其他競品。
取指
處理器對程序的執(zhí)行始于取指,前端的指令供給能力至關重要;一旦前端無法提供足夠的指令,縱使后端的亂序執(zhí)行能力再強也無力回天。對于A78這樣的4發(fā)射處理器,我們期望其每周期能夠取指至少4條指令。

由于A78配備了mop cache,我們可以看到當指令足跡在4KB-8KB時,mop cache能夠提供每周期6條指令的吞吐;mop cache的有效容量在1.5K左右。當指令足跡溢出至ICache時,取指帶寬下降至4條/周期;這樣的帶寬是完全夠用的,ICache的有效容量在32KB左右。A78的L2 Cache取指帶寬相較ICache取指帶寬并未嚴重下滑,仍然保持著~3.4條/周期的良好表現,而在一些早期處理器上此時的取指帶寬甚至會下降至2條/周期。對于取指而言L2 Cache的有效容量在256KB左右;A78似乎有意限制了代碼段可以占據的L2 Cache容量,指令只能使用到一半左右的空間。當代碼段溢出到LLC后A78的取指帶寬下降到了2條/周期;同樣的,指令似乎只能最多使用一半的LLC空間??紤]到A78的應用場景,這樣的取指能力是可圈可點的。

A78的mop Cache對于nop指令進行了壓縮優(yōu)化;倘若使用nop指令測試取指,mop cache每周期能夠供給超過10條指令。
后端
處理器的后端負責指令的執(zhí)行,當代高性能處理器普遍配備了亂序超標量機制,后端的設計也是紛繁復雜。
流水線寬度
在超標量處理器中我們著重關注前端與mid-core部分的寬度。
流水級寬度Fetch(ICache)4Fetch(mop Cache)6Decode4Rename6當指令流能夠被mop Cache容納時,A78能夠提供其最大吞吐:6條指令/周期;此時處理器bypass了譯碼級以及以前的部分,因此只要重命名級擁有足夠的寬度即可。較少的decoder有利于降低功耗,緩解流水線寬度增加時前端的膨脹。但是A78的mop Cache放在當代是顯著偏小的,面對不算很大的代碼段時也會退化至4發(fā)射,這對同源的Neoverse N系列是很不利的(雖然A78并沒有對應的產品)。
執(zhí)行單元
執(zhí)行部件數量延遲ALU41BRU2MUL22DIV119(支持提前退出)AGU(ld+st)3AGU(ld)34AGU(st)2FPU2FADD22FMUL23FDIV211FMA24A76首代只配備了3組ALU,在隨后的A77中補齊為4組,A78延續(xù)了A77的設計。簡單ALU并不占據過多的面積,難度來自于物理寄存器堆讀寫端口的設計,這在更寬的處理器上會更加棘手。A78配備了2組BRU,在密集跳轉應用中能夠保證吞吐量,符合現代應用程序發(fā)展的趨勢。乘除法單元上A78選擇了非對稱配置,由于除法指令使用較少,這一選擇是合理的。其乘法器延遲符合預期但是除法器算法則顯得較為普通;除法器支持提前退出,當被除數變?yōu)?時算法可以立即結束。
A78擁有3個AGU(訪存地址生成單元),但是AGU load與AGU store并非分離式設計;3個AGU中2個支持load/store操作,1個只支持load操作。對于一款4發(fā)射處理器而言,這樣的訪存單元配置不可謂不豪華;在memory wall越發(fā)明顯的趨勢下,重訪存也是我個人十分欣賞的設計哲學。但是我個人更喜歡Intel式的AGU load與AGU store分離的設計,但是這也會顯著增加發(fā)射隊列、物理寄存器堆設計的復雜度,也許這樣的設計蘊藏著Arm自己的取舍哲學。
由于A78的定位其只配備了兩組浮點流水線,但是在基準跑分中其浮點成績十分優(yōu)秀,這也是重訪存設計的優(yōu)勢。其FMADD延遲表現優(yōu)異僅需4周期,FADD延遲表現優(yōu)異僅需2周期,但是A78本身的目標頻率也較低,因此在這方面Intel似乎更勝一籌。Arm的特點便是提供足額的FMA單元,且FMA單元均支持較快的獨立FADD操作。Arm在浮點寄存器堆的設計上也有所取舍,并沒有提供足額的讀端口;這一點在浮點執(zhí)行單元較少的A78上并無大礙,但是會限制更寬的設計(如X1)在某些場景下的吞吐量。
總體而言A78的后端執(zhí)行單元配置較為均衡,偏重訪存和分支,弱浮點向量。當然,其相對較多的訪存、分支單元也是為了兼顧mop Cache供指模式下6發(fā)射的吞吐量。
幕間
在下篇中我們將對Mid-core、訪存子系統(tǒng)、核外系統(tǒng)進行逆向探究。
分析與測試:lyz、lxy
編輯于 2023-02-08 10:26

幕間
在上篇中我們主要探究了A78微架構的取指前端和后端執(zhí)行單元配置,下篇我們繼續(xù)探究Mid Core、訪存子系統(tǒng)、核外系統(tǒng)。
JamesAslan:Arm Cortex A78微架構評測(上):中核奠基之作94 贊同 · 18 評論文章
Mid Core
重命名消除
在實際應用程序中許多指令并不需要進入處理器后端被真正執(zhí)行(如move指令);現代處理器普遍配備了各式各樣的重命名消除機制,以減少處理器后端壓力并加速程序執(zhí)行。
Elimination typeThroughputmove imm zero6move imm one4move chain1.3move single4move self4move bounce1.3sub self1xor self1A78配備了最簡單的重命名消除機制,但是與當今競品相比仍極為落后。A78的重命名甚至不能在同一周期內處理相關鏈;雖然這樣的場景在實際應用中并不多見,但是殘缺的機制在我個人眼中終究是不優(yōu)雅的。拋開個人情感,這樣的取舍可以理解:一方面是這樣的場景較少;另一方面是A78流水線相對較短,支持相關鏈重命名會給重命名級帶來巨大的時序壓力。
move imm one(mov x10, #0)吞吐為6說明重命名時對置0進行了消除,這是常用操作。
move imm one(mov x10, #1)吞吐為4說明重命名時未對其他立即數情況進行消除,由ALU真正執(zhí)行。
sub與xor均未對置0情況進行特別優(yōu)化,可能是ARM ISA的編譯器極少進行此類操作;X86處理器普遍配備此類優(yōu)化。
move single(非相關的move消除)等的吞吐僅為4而非6,說明了其基本不具備重命名消除機制(除最簡單的置0),所有的move仍然由后端真正執(zhí)行。
既然move single都不支持,其余操作顯然不會支持。
總體而言A78在重命名機制上的進步空間無限大。
亂序資源
亂序推測執(zhí)行的處理器需要海量的隊列空間來跟蹤指令,確保指令最終的提交順序正確。
CapacityROB~160PRF(Fix)~160PRF(Float)~92PRF(Condition)~44A78貫徹了中核的定位,采用了小而美的設計。160項的ROB對于消費級4發(fā)射處理器而言綽綽有余,但是倘若考慮到mop cache供指時的6發(fā)射寬度,這樣的容量就較少了。A78提供了近乎足額的定點物理寄存器堆,說明了ARM對整數應用的重視,但實際上這是不必要的。由于A78并不注重浮點性能,因此只提供了約92項的浮點物理寄存器堆;考慮到即便是浮點程序,一般也會同時使用相當數量的定點指令,這樣的FPRF容量也未嘗不可,反倒是ROB容量可能先成為瓶頸。由于ARM ISA定義了Conditional Bits,該結構也支持重命名操作,其容量在44項左右。
ARM對Nop指令的特殊優(yōu)化并不局限于前端的Mop Cache,ROB也同樣進行了Nop指令的壓縮。倘若使用Nop指令測試ROB容量會得到下圖:

使用精心配比的非Nop指令占滿ROB時得到下圖:

因此逆向測試時知道自己到底在做什么是非常重要的,否則會得到誤導性的數據;諸如C&C也在隊列容量上提供了錯誤數據,例如他們測試LDQ的方式就并不準確。人無完人難免百密一疏,如果我們的測試有遺漏和錯誤也歡迎討論。
亂序推測執(zhí)行的處理器最為直接的調度窗口由各級發(fā)射隊列的容量決定:
CapacityIssueQ(Simple fix)~56IssueQ(Complex fix)~32IssueQ(Float)~48IssueQ(Load)~32LDQ~64STQ~48由Arm官方公布的信息可知,A78采用了分布式發(fā)射隊列,浮點、整數、訪存分別共享一個發(fā)射隊列。經過容量測試,我們可以得到以下信息:
整數發(fā)射隊列為56項左右,相較X1小幅縮減。整數發(fā)射隊列與ROB表項的比值為56/160=0.35,是相當高的;這是較為平衡的設計,可以認為代表了一般場景下較好的亂序調度能力。需要注意的是, 復雜整數指令如乘法指令并不能使用到所有的整數發(fā)射隊列表項,而是只能用到56項中的32項;這可能是發(fā)射隊列的內部結構劃分導致的,為了實現每周期挑選4條就緒指令,該隊列內部劃分為了數個子隊列。
浮點發(fā)射隊列為48項左右,相較X1小幅縮減。對于A78這樣的設計而言是富足的。
訪存發(fā)射隊列為32項左右,相較X1小幅縮減,三組發(fā)射隊列的容量削減均為8項左右。A78的訪存執(zhí)行單元規(guī)格相較X1并未減少,不過訪存發(fā)射隊列小幅削減并不影響大局。
總體而言,A78的亂序調度窗口巨大,這樣平衡的設計在超大核(Apple、X86)頻出的如今并不多見。
A78的Load Queue容量為64項,Store Queue容量為48項;相較X1有相當幅度的縮減,不過這種縮減符合A78相對X1的定位。至于這樣的LDQ、STQ容量是否夠用,不同的視角會有不同的答案。從其它亂序資源的規(guī)模上來看(例如160項的ROB容量),A78的LDQ與STQ容量綽綽有余;從執(zhí)行單元的規(guī)格上來看(3load AGU、2store AGU),A78的LDQ與STQ容量就顯得不那么大了??傮w而言,A78仍然是一款相當注重訪存的微架構;較強的訪存能力會讓處理器在實際負載中獲得較好的表現,而非僅僅是理論跑分戰(zhàn)神。
訪存
訪存是體系結構永恒的話題與難題,訪存性能直接決定了處理器性能的上限(甚至取指也受制于訪存),訪存子系統(tǒng)的表現體現了設計團隊的綜合實力(前端、后端)。為了緩解越發(fā)明顯的緩存墻(memory wall)問題,現代處理器的訪存子系統(tǒng)十分復雜;流水線內的LDQ、STQ,Dcache、DTLB,下級Cache、下級TLB,各級預取器等組件交織配合;嘗試在延遲、帶寬等多個維度提高訪存性能。
load-store前遞
當load指令命中STQ中還未來得及寫回DCache的store指令(訪問了相同的物理地址)時,配備了load-store forwarding的處理器無需等待store指令寫回DCache后再執(zhí)行l(wèi)oad指令,而是可以直接將STQ中存儲的相應數據發(fā)送至LSU,完成load指令的執(zhí)行。

從橙色條帶可見,A78配備了load-store forwarding機制,延遲倍率在5倍左右,屬于相對較快的梯隊。與A76相比,A78的store-load forwarding經歷了小幅改進,延遲下降了。實際表現上A78與X1基本一致,相關機制并未改動;作為流水線的核心機制之一,這方面的規(guī)格沒有必要(僅因為定位不同)修改。A78只能在32bit對齊的位置上進行l(wèi)oad-store forwarding(STQ的查詢和存儲粒度為32bit),且load目標數據必須真包含于store指令的操作數據;當數據partial overlay時,必須等待store指令的數據寫入DCache再重新執(zhí)行l(wèi)oad指令。當store和load操作地址跨行時,都會帶來額外的延遲損失,但是load-store forwarding機制并未失效。
Dcache端口
load-store forwarding圖還包含了更多的信息。

load、store均不跨行時,每周期能夠執(zhí)行1.5組store-load指令對,符合A78只有3個AGU的設計。

load不跨行store跨行時,store寫入Dcache的帶寬降低,引入了額外的開銷;此時每周期能夠執(zhí)行1組store-load指令對。

load跨行store不跨行時,load讀取Dcache的帶寬降低,引入了額外的開銷;此時每周期能夠執(zhí)行0.78組store-load指令對,開銷大于store跨行。這些現象表明:
Dcache并不能無損處理一般跨行情況,沒有采用按地址interleave的分block設計。
倘若跨行采用的是多周期形式的處理,那么核內流水線LSU調度不夠完善,遇到多周期情況不能最優(yōu)得調度load與store;這也是混合load AGU與store AGU的潛在弊端。
倘若跨行采用的是爭奪Dcache端口形式的處理,那么1.Dcache的設計令A78無法有效得穿插load與store。2.write buffer的寫合并不夠激進。
總體而言,A78的核側訪存子系統(tǒng)相較A76有小幅改善,但是Dcache設計鮮有變動;主要提升來自于核內流水線增加的一組load AGU。相似的核側訪存子系統(tǒng)也是A76、A77、A78(X1)一脈相承的關鍵特征。
Cache延遲
我們使用多種訪存模式訪問逐漸變大的數據集(直至內存),以探究A78的Cache層級設計、預取器效果、內存控制器效果。

A78展現出了一些不尋常的特性,其L2 Cache延遲與LLC延遲并沒有很大差距,這可能是Dynam IQ crossbar系統(tǒng)的優(yōu)勢。
DCache有效容量為32KB。
L2Cache有效容量難以辨認。
LLC有效容量為6MB,與X1并不相同,可能存在QoS機制限制了中核的可用容量;抑或是替換算法的不完備性限制了空間使用。
預取器存在一定的進步空間,Linear Chain也未能做到無損預取。
存在開頁預取器或類Region預取器,但是效果也較為一般。
內存延遲較大。
8cx Gen3的LLC延遲出奇得低,可能是Dynam IQ crossbar系統(tǒng)的優(yōu)勢;其不明顯的L2 Cache容量則可能是優(yōu)秀的動態(tài)替換算法發(fā)揮了作用。
訪存序
亂序推測執(zhí)行的處理器中,store指令無法被推測執(zhí)行但是load指令允許被推測執(zhí)行,這就造成了訪存的RAW和WAR問題。為了避免錯誤推測執(zhí)行的load指令帶來頻繁的回滾或流水線清空,處理器內部普遍配備了訪存違例預測器,預測可能會導致回滾和流水線清空的load指令,并強制這樣的load指令不再完全推測執(zhí)行。

A78的訪存違例預測器有32項容量,采用了較為傳統(tǒng)的設計?,F今處理器仍然廣泛使用這樣的傳統(tǒng)設計而非store-set等機制,但是傳統(tǒng)機制也有海量的設計細節(jié),我們不在此展開。采用傳統(tǒng)機制的設計中,Apple M1的表項容量最大(IBM除外),其余設計容量普遍在32項左右;只有Intel的大核采用了類store-set設計。
訪存并行度
在該測試項目中,我們考察處理器同時面對多個訪存流時的表現。每個訪存流均是隨機且獨立的,因此可以規(guī)避大部分預取器的影響,最大限度壓榨核內流水線亂序結構、各級Cache亂序結構。

可見A78在上級Cache層次中并不能很好得隔離各個訪存流,預取器等結構的行為相互干擾造成了極大的不穩(wěn)定性。在下級內存端,最大的有收益流數量在16-20之間,在現如今處理器中不算很多。
Pointer Chasing
Pointer chasing是現代高性能處理器中常見的訪存優(yōu)化,當一條load指令的結果用于下一條load指令的地址計算時,該結果會從快速通路進入AGU流水線,縮短這兩條load指令的執(zhí)行間隔。在配備了pointer chasing消除的處理器中,觸發(fā)pointer chasing后load-to-use延遲會比正常情況減少1周期。
Load-to-use latencyPointer-chasing Case4No-pointer-chasing Case4較為遺憾的是A78并未配備pointer chasing優(yōu)化。A78的4周期的訪存延遲本身較低,pointer chasing優(yōu)化重要性較低;但是A78目標頻率較低,pointer chasing優(yōu)化的難度也較低。蘋果firestorm在相近的目標頻率下配備了pointer chasing優(yōu)化,觸發(fā)時load-to-use延遲僅3個時鐘周期,Arm與之仍有較大的差距。
核外
隨著摩爾定律的放緩,即便是消費級處理器也被迫向多核方向發(fā)展,核外組件發(fā)揮著重要的作用。核外系統(tǒng)是個紛繁復雜的世界,無論是總線結構、一致性協(xié)議、LLC設計還是內存控制器調度,每項都復雜到讀完1本書都無法入門。因此,我們只關注其中較為淺顯、直觀的部分。
核間延遲
我們通過CAS測量Soc中兩兩核間的延遲,其反映了處理器的一致性協(xié)議效率、LLC設計、總線設計等多個維度特性的交疊。

8cx Gen3的核間延遲非常均勻,沒有采用了ringbus或是mesh網絡的特征,應該是最為簡單的crossbar類。從發(fā)布代際上來看,Cortex A78與X1發(fā)布時DSU110(雙ring結構)還未發(fā)布(不過僅從時間上判斷是無效的,DSU110仍然有可能支持A78與X1);因此其采用的是初代Dynam IQ且其為crossbar設計。平均34秒左右的延遲是可以接受的,當然也談不上優(yōu)秀;不過對于消費級而言是綽綽有余了。附上老對手蘋果M1的核間延遲表現:

此處不展開M1的核間延遲分析,但是較為明顯的是其大小核簇之間并不能有效得共享信息,與Dynam IQ形成了鮮明對比。
訪存帶寬
我們通過Stream程序測試Soc中CPU單核的訪存帶寬,其反映了處理器核內的流水線設計、各級Cache設計、總線設計、內存控制器設計等多個維度特性的交疊。
FunctionBest Rate (MB/s)Copy33002Scale31302Add29228Triad29517與使用高頻DDR的桌面平臺相比,8cx Gen3的內存帶寬還有較大的差距。對于重內存帶寬的極少數單核應用、重內存帶寬的多核應用,8cx Gen3會更為力不從心;不過對于專注單核常規(guī)測試的我們而言這并不是問題。我們可以期待,今后“真正”的桌面級Arm平臺在更好的內存子系統(tǒng)加持下會有更好的性能表現。
總結
從市場角度來看A78是一款長壽的微架構,至今還被廣泛用于中端SoC中,這本身就說明了其成功。從微架構角度來看,A78是對A76、A77的堅實迭代,主要改進了處理器前端和核內流水線,不過鮮有涉及Cache子系統(tǒng)。從Benchmark的角度來看這些改進基本是正向的,鮮有負面效果,令人印象深刻??傮w而言,A78已經擁有了現代微結構的大部分基本特征,但是細節(jié)上較為粗糙和“簡陋”;這是受制于移動端應用環(huán)境還是人力資源限制我們不得而知,但也讓人更加期待Arm A系列未來的發(fā)展動向。
分析與測試:lyz、lxy
測試平臺
本文的測試是在Microsoft windows dev kit 2023上進行的,其使用了高通8cx Gen3(配備了4顆Cortex X1和4顆Cortex A78),環(huán)境為Win11的WSL2 Ubuntu22.04。

這臺開發(fā)機經歷了一段奇妙的旅程:康涅狄格 → 紐約 → 香港 → 澳門 → 湛江 → 廣州 → 北京。個人對此類設備抱有極大的好奇與好感,無論是當初的zen/zen+還是后來的m1;而8cx gen3算是第一代真正可用的高通desktop soc了,自然不能錯過。但是微軟在國內并不對個人出售dev kit,故只能代購轉運,也就有了它跋山涉水游歷四方的傳奇旅途。
發(fā)布于 2023-02-18 09:30