一、引言
伴隨智能手機(jī)的高速發(fā)展,移動(dòng)處理器架構(gòu)設(shè)計(jì)廠商ARM公司幾乎每年都更新CPU的核心架構(gòu)。從2018至2020年,ARM公司基于ARMv8架構(gòu)推出了三代Cortex-A76、Cortex-A77、Cortex-A78經(jīng)典CPU核心架構(gòu)?;谶@幾代CPU架構(gòu),芯片設(shè)計(jì)廠商也設(shè)計(jì)了多款性能優(yōu)秀的處理器產(chǎn)品。本文從A76微架構(gòu)開始學(xué)習(xí),通過對(duì)比每一代的變化,讓讀者了解處理器微架構(gòu)關(guān)鍵知識(shí)。下表給出了一些基于這三代ARM處理器架構(gòu)的典型處理器產(chǎn)品。
二、從A76開始了解ARM微架構(gòu)
從ARM的A76開始,網(wǎng)絡(luò)上可以查詢到較多資料,例如我們可以從wikichip網(wǎng)站(en.wikichip.org)獲取到A76的完整微架構(gòu)框圖。
1. DSU(DynamIQ Shared Unit)
從A75開始,ARM提出了一個(gè)新的多核心管理系統(tǒng)單元,叫做DSU。通過DSU模塊,CPU設(shè)計(jì)者可以隨意擺放不同架構(gòu)的核心并共享L3緩存,減少不同架構(gòu)核心直接傳遞數(shù)據(jù)損耗。在DSU架構(gòu)之前,每個(gè)Cluster需要擺放同架構(gòu)CPU,如將4個(gè)A73處理器放在一個(gè)Cluster中,將4個(gè)A53放在另外一個(gè)Cluster中,這兩個(gè)Cluster的數(shù)據(jù)相互訪問會(huì)有一定的連接損耗。
利用DSU模塊,開發(fā)者可以隨意設(shè)計(jì)CPU的組合,例如圖中1大+7小,2大+6小,4大+4小,1大+2小,1大+3小,1大+4小等等組合。
2.?性能功耗優(yōu)化
架構(gòu)和工藝具有一定的關(guān)聯(lián)性,如A76架構(gòu)設(shè)計(jì)可采用7nm工藝,根據(jù)ARM數(shù)據(jù),基于7nm的A76比基于10nm工藝的A75,性能可提升40%,或同性能下能耗降低50%??梢夾76相比上一代的A75的提升較大,后面我們會(huì)詳細(xì)了解架構(gòu)上差異點(diǎn)。
3. 三級(jí)緩存設(shè)計(jì)
A76采用三級(jí)緩存機(jī)制,其中:
L1是核心獨(dú)有緩存,具有獨(dú)立的64KB指令Cache(ICache)和64KB數(shù)據(jù)Cache(DCache);
L2是核心獨(dú)有緩存,可以配置成256KB或者512KB(加錢);
L3是核間共享緩存,在DSU內(nèi)部,可以配置成2MB或者4MB。
4.?分支預(yù)測(cè)單元(BPU)
多級(jí)流水線系統(tǒng)中,在執(zhí)行分支判斷指令時(shí),系統(tǒng)如果不知道下面走哪一條分支,需要等到分支執(zhí)行出結(jié)果才可以再獲取正確的指令。為了提升流水線性能,現(xiàn)代處理器中提供了一個(gè)分支預(yù)測(cè)單元(BPU),用來預(yù)測(cè)常用路徑,并提前進(jìn)行指令預(yù)取,確保流水線被填充完整。
A76的BPU和指令Fetch單元獨(dú)立,BPU可以同時(shí)和Fetch單元工作,提前推測(cè)并獲取分支后指令,降低分支預(yù)測(cè)的延遲。
5. 前端設(shè)計(jì)(Front-end)
指令預(yù)取后進(jìn)入一個(gè)解碼隊(duì)列,A76提供了4路decoder,相比A75增加了一路decoder單元,這是性能提升的一個(gè)要素。
6. ROB模塊設(shè)計(jì)
經(jīng)過譯碼的指令叫做MOP(Macro-Operation),MOP不是實(shí)際執(zhí)行的指令,最終送到執(zhí)行單元的指令叫做uOP(Micro-Operation)。MOP比uOP稍微復(fù)雜一些,可能是多條uOP的組合指令,通過后端單元的拆解,可以把MOP分解成處理器可以執(zhí)行的最基礎(chǔ)指令uOP,uOP的指令數(shù)量約比MOP多20%。
ROB(ReOrder-Buffer)模塊提供了128個(gè)entry,用來將指令進(jìn)行重新排序,盡可能填充流水線,這里可以看到A76設(shè)計(jì)的輸入是4路MOP,輸出是8路uOP。
7. 執(zhí)行單元 (Execution Engine)
Dispatch單元將uOP指令發(fā)射到執(zhí)行單元(Issue),執(zhí)行單元提供了120個(gè)entry,分成三類:整型、浮點(diǎn)和讀寫,整型部分包括了1個(gè)分支單元,2個(gè)基礎(chǔ)ALU單元,1個(gè)復(fù)合ALU單元;浮點(diǎn)部分提供了2個(gè)128bit的高級(jí)SIMD指令單元;讀寫部分則提供了2個(gè)AGU(Adress Generation Unit)地址單元。
8. LSU(Load Store Unit)設(shè)計(jì)
LSU模塊和執(zhí)行單元的2個(gè)AGU相連接,同時(shí)連接64KB的L1數(shù)據(jù)緩存(DCache),并提供2個(gè)16B/cycle的load端口和1個(gè)32B/cycle的store端口。
9. 小結(jié)
至此,我們從取指、譯碼、指令分派、指令發(fā)射、指令執(zhí)行到數(shù)據(jù)讀寫,簡略了解了A76處理器的微架構(gòu),下一節(jié)我們通過對(duì)比A77和A76架構(gòu)的差異,進(jìn)一步了解ARM微架構(gòu)設(shè)計(jì)的步伐。
三、A77微架構(gòu)和A76對(duì)比
A77微架構(gòu)圖,大家且看且珍惜,因?yàn)樽訟77之后的產(chǎn)品在網(wǎng)絡(luò)上很難找到完整的微架構(gòu)圖了。
1. 性能提升
ARM資料顯示同樣是7nm工藝3GHz的條件下,A77的性能可以比A76提升20%,注意這里面標(biāo)注是單線程性能提升,后面我們可以從架構(gòu)升級(jí)中推測(cè)性能提升的原因。 ? ?
2. L0緩存(MOP Cache)
A77新引入了MOP Cache模塊,這個(gè)模塊并不是ARM的創(chuàng)新設(shè)計(jì),在PC處理器上已經(jīng)有了,例如Intel在早期的酷睿Sandy Bridge處理器中就加入了uOP Cache模塊。
此外AMD的Zen架構(gòu)也有MOP緩存模塊。
MOP Cache主要用做L0級(jí)別緩存,存儲(chǔ)譯碼過的MOP指令。MOP Cache的好處是如果在里面找到需要的指令,前面的電路模塊都可以暫時(shí)由MOP Cache來替代,可以節(jié)省功耗提升性能。ARM數(shù)據(jù)顯示這個(gè)MOP Cache的命中率有85%,可見是A77的一個(gè)非常大的改進(jìn)。
繼續(xù)看下MOP Cache的尺寸,ARM給的尺寸數(shù)據(jù)是1.5K而不是1.5KB,單位不是Byte而是條,考慮到ARM常規(guī)decoded出的機(jī)器碼是32位寬(Aarch64也是32位寬,當(dāng)然也有個(gè)別64位寬指令),推測(cè)這個(gè)L0 Cache的大小應(yīng)該是6KB左右(和Intel的sandy bridge時(shí)一樣)。
移動(dòng)處理器領(lǐng)域引入L0,ARM并不是首家,早在高通的Snapdragon S4時(shí)代就在Krait核心中引入了L0 cache。根據(jù)數(shù)據(jù)顯示1.5K的Cache就可以達(dá)到80-85%的命中率,再增加Cache,提升命中率的邊際效應(yīng)會(huì)越來越明顯。
3. 前端設(shè)計(jì)(Front-End)
A77相對(duì)于A76的另一個(gè)重要變化是產(chǎn)生MOP指令的能力從原來的每周期4個(gè)提升到最多6個(gè),但是decode的能力還是保持4個(gè)沒有變化??梢詫?duì)比下整體上fetch和decode的基本架構(gòu)和A76沒有太大變化,MOP提升的主要原因是新加入的MOP Cache提供的。如果MOP Cache命中,可以繞過decode模塊最多一次取6條MOP指令,如果不命中回到decode模塊還是一次4條,L0 Cache和Decode進(jìn)行了很好的補(bǔ)充,讓一周期可以提供更多的MOP指令。
4. ROB模塊設(shè)計(jì)
A77相對(duì)A76在執(zhí)行單元上提升了重排序緩沖的大?。≧eOrder-Buffer),還記得A76是128-entry,A77提升了25%到160-entry。
另外可以看到輸入是6條MOP,輸出提升到了10條uOP,對(duì)比A76則是8條。據(jù)說其他廠商基于ARM定制內(nèi)核時(shí)會(huì)修改這個(gè)部分,隨著ARM內(nèi)核逐步吸收這些優(yōu)秀的設(shè)計(jì),定制ARM內(nèi)核的空間和收益會(huì)越來越小 。
5. 執(zhí)行單元
A77相比A76在執(zhí)行單元也有比較大的改變:新增加了一路分支單元,將分支預(yù)測(cè)的帶寬提升了一倍;新增了第四個(gè)基礎(chǔ)整型ALU單元,這個(gè)單元可以用一個(gè)周期執(zhí)行簡單的算術(shù)運(yùn)算或二個(gè)周期執(zhí)行更復(fù)雜運(yùn)算。A77一共4個(gè)整型ALU,其中3個(gè)是基礎(chǔ)整型ALU單元,還有一個(gè)是復(fù)雜整型ALU單元,可以執(zhí)行更復(fù)雜的計(jì)算(例如MAC乘加,DIV除法),A76也有這個(gè)復(fù)雜ALU單元。在整型執(zhí)行單元上,A77相對(duì)A76提升是比較大的,從4個(gè)提升到6個(gè),有50%的提升。
此外,還A76的每個(gè)執(zhí)行單元都有獨(dú)立的發(fā)射列隊(duì),A77則進(jìn)行了一定程度的優(yōu)化,將發(fā)射列隊(duì)(issue queue)統(tǒng)一成三個(gè),整型、浮點(diǎn)和讀寫發(fā)射列隊(duì),由于A77的執(zhí)行單元多,將發(fā)射列隊(duì)統(tǒng)一進(jìn)行管理和分配,可以進(jìn)一步提升執(zhí)行效率。
6. LSU設(shè)計(jì)
A77在LoadStore單元上有兩個(gè)獨(dú)立的地址生成單元AGU,這和A76是一樣的。不同的地方是A77額外增加了兩路Store端口,等于將Store的帶寬增加了一倍。同時(shí)這四路LSU單元也共享一個(gè)發(fā)射隊(duì)列,ARM宣稱這樣可以提升25%的內(nèi)存并發(fā)讀寫性能。
再來看一下LSU單元,更寬的執(zhí)行單元需要有更寬的LSU支持,A77增大了LSU的load和store buffer,同時(shí)可以支持85級(jí)深度load 操作和90級(jí)深度store操作,總共支持同時(shí)175個(gè)內(nèi)存操作,稍高于指令操作的寬度160,相比A76的LSU深度140,提升了25%。
7. 小結(jié)
最后整理了一個(gè)更詳細(xì)的表格來對(duì)比A77和A76,A77是ARMv8系列中非常成功的一代,基于A77,產(chǎn)生了如麒麟9000、驍龍865這樣經(jīng)典的產(chǎn)品。
四、A78微架構(gòu)和A77對(duì)比
1. 性能功耗優(yōu)化
2020年,ARM更新了代號(hào)Hercules的A78新架構(gòu),也是ARMv8體系中最后一代中核架構(gòu)。ARM宣傳這一代是“持續(xù)的性能功耗領(lǐng)先”,圖中看到性能提升了20%,工藝從7nm提升到5nm,注意性能提升包含了頻率的15%提升,架構(gòu)的性能提升ARM估計(jì)在7%左右。得益于工藝進(jìn)化到5nm,同樣性能,功耗可以比A77降低50%(2.1GHz相當(dāng)于A77的2.3GHz)。從第二張圖可以看出,A78這一代的主要設(shè)計(jì)目標(biāo)是小幅度提升性能,提升能效并減少芯片面積。
2. A78微架構(gòu)的一些特點(diǎn)
1、L1緩存:ARM提供了32KB緩存的選擇,讓一些注重成本和芯片面積的廠商可以選擇更低的數(shù)據(jù)和指令緩存,默認(rèn)是64KB。
2、分支預(yù)測(cè):分支預(yù)測(cè)的帶寬相對(duì)A77提升了1倍。
3、執(zhí)行單元:增加了一個(gè)MUL單元,允許一個(gè)周期進(jìn)行2個(gè)整型的乘法運(yùn)算(A77是一周期1個(gè))。增加了一個(gè)用于Store的AGU單元,Store的能力從16B/cycle提升到32B/cycle。
A78是ARMv8架構(gòu)最后一代產(chǎn)品,主要是對(duì)前面幾代微架構(gòu)的優(yōu)化,可謂ARMv8架構(gòu)的守門員了。
五、總結(jié)
A78是ARMv8架構(gòu)的最后一代產(chǎn)品,智能手機(jī)依然在高速發(fā)展并快速更新產(chǎn)品,ARM處理器的架構(gòu)也在持續(xù)迭代和更新。2020年,ARM公司提出了對(duì)廠商定制高性能核心的計(jì)劃,并推出了面積更大性能更強(qiáng)的Cortex-X系列核心。2021年,ARM公司推出了全新的ARMv9架構(gòu),目前已經(jīng)有A710、A715等產(chǎn)品接替A78的路線。限于篇幅限制,后續(xù)我會(huì)和大家一起繼續(xù)學(xué)習(xí)X系列和ARMv9架構(gòu)的相關(guān)內(nèi)容。
審核編輯:劉清
評(píng)論
查看更多