李實
CorteX-A76是2018年的亮點產品,無論是高通還是華為,都利用這個先進的架構設計出了極為出色的產品,使得移動計算設備的性能又大大向前推進了一步,并且依舊保持了極高的能耗比。在2019年,ARM并沒有松懈下來,而是進一步推出了全新CorteX-A77架構。這一全新架構,不但帶來了更為顯著的性能提升,同時也很好地控制了設備功耗,值得細細解讀.
Cortex-A77是一個全新的架構。和之前《微型計算機》曾介紹過的內容相關聯的是,Cortex-A77是屬于奧斯汀家族的第二款產品。這一架構將在2019年年末或者2020年年初正式被應用在許多新的SoC上。今天,本文就要詳細地分析下這款產品的性能和架構情況。
“畏懼之神”登場——代號Deimos的Cortex-A77
ARM在架構發(fā)布的節(jié)奏上維持了一年一個新架構的模式,所以全新Cortex-A77架構的突然發(fā)布并沒有令人感覺意外。實際上在更早的時候,像是去年8月,ARM就曾預告了將在2019年發(fā)布一款全新的、代號為“Deimos”的架構,并會采用7nm工藝進行制造。說起“Deimos”這個詞,其實是指希臘神話中戰(zhàn)爭之神阿瑞斯和愛神阿芙洛狄忒的兒子,被稱為畏懼之神。此外,ARM還順便公布了接下來在2020年會出現的架構代號“Hercules”,中文為赫拉克勒斯,這個名字的來源是古希臘神話中主神宙斯和阿爾克墨涅之子,象征大力士。
名字起得光芒萬丈,相應的實力自然也不能落在人后。ARM在發(fā)布這些內容和絡線圖的時候,還順便調侃了一下英特爾。在ARM展示的對比圖中,英特爾的處理器架構在SPECint2016的測試中,從2013年后的Core i54300U開始,一直到2017年的Core i5-7300U,工藝雖然從22nm一路進化到14nm,但是其在實際性能方面的增長幅度相當有限。相比之下,ARM選擇的節(jié)點是2016年發(fā)布Cortex-A73之后,直到即將到來的2020年的Hercules架構,ARM預計會帶來2.5倍的性能提升。也就是說,每一代奧斯汀系列的處理器相比前代產品,都會有20%-25%左右的性能提升。
從目前ARM的產品來看,Cortex-A76這一代可以說是遇到了最好的時候。相當出色的架構設計加上7nm工藝的應用,使得其最終在實際SoC產品上相比上代產品展現出了巨大的性能躍升。比如基于Cortex-A76架構的驍龍855處理器相比前代驍龍845處理器的性能提升最多可達45%。尤為值得一提的是,如此巨大的性能提升卻并沒有過多影響電池效率,甚至由于新工藝和架構,還帶來了設備電池壽命的延長。
不過這并不意味著ARM在市場上已經沒有對手了,雖然其中一個競爭對手三星的M4處理器表現不佳,但真正的對手蘋果所拿出的A11和A12處理器相比ARM的產品依舊具有極大的性能優(yōu)勢和效率優(yōu)勢,大約相當于兩代微架構的領先幅度。當然,這也可以說是因為蘋果選擇的路線和ARM不同,ARM總希望以更小的芯片面積獲取更大的性能提升,而不像蘋果那樣可以使用盡可能大規(guī)模的產品。當然很大程度上這樣的選擇是來自ARM的客戶和市場,而不是它本身。
Cortex-A77:架構概述
從產品研發(fā)的代次上來看,Cortex-A77是Cortex-A76直接的繼承者,這意味著新的架構和上代產品基本保持一致。ARM表示,Cortex-A77只需要簡單地升級SOC IP即可部署,并不需要推倒重來。
對應到實際產品上,Cortex-A77和Cortex-A76一樣,依舊使用了ARMv8.2的CPU核心,支持AArch32和AArch64。在多核心設計方面,Cortex-A77依舊支持DSU(DynamIQ5hared Uint),以實現和較小的Cortex-A55單元配對。基本架構配置上,Cortex-A77依舊支持64KB L1指令和數據高速緩存以及256KB或者512KB的L2高速緩存。有趣的是,ARM在Cortex-A77的L2緩存設計上選擇的是較小容量的方案,因為其面向基礎設施的Neoverse N1處理器架構采用的是1MB的L2緩存,這款處理器本身架構來自Cortex-A76,這可能意味著ARM在處理器配置上有更多獨特的想法。
依照經驗來看,作為Cortex-A76架構的演變,從微架構角度來看,Cortex-A77的性能提升幅度應該不算很大,從絕對性能角度來看也應該是這樣,畢竟工藝在這個時間節(jié)點并沒有大幅度提升。絕大部分C0rtex-A77的產品依舊會采用7nm工藝,ARM宣稱Cortex-A77的峰值頻率和前代Cortex-A76一樣,都是3GHz。如果真是這樣的話,Cortex-A77可能并沒有太多出彩的地方。
但是根據ARM發(fā)布的路線圖顯示,Cortex-A77能夠帶來相比前代產品20%的性能提升??紤]到它在工藝和頻率上都沒有太大變化,這意味著Cortex-A77的架構將有明顯變化,IPC得到了顯著提升。實際上,ARM重新設計了Cortex-A77的架構體系,引入了大量的智能功能,從而在工藝和頻率不變的情況下,帶來了高達20%的性能增長。
CorteX-A77微架構解讀:高達6發(fā)射的前端設計
Cortex-A76是一個全新的設計ARM在其中凝聚了多年來進行CPU設計的知識和經驗教訓,使得這款核心成為一個在微架構方面具有前瞻性的優(yōu)秀設計。Cortex-A76成了奧斯汀家族接下來兩款架構設計的基準,包括今天要介紹的Cortex-A77以及明年的“Hercules”架構。
Cortex-A77的目的是增加微體系結構的IPC,ARM這一代的目的是依舊保持最佳的PPA,這意味著設計人員的目標是在盡可能提高核心性能的同時,保持Cortex-A76架構下出色的能效比和恰到好處的核心面積大小。另外,Cortex-A77的核心頻率峰值依舊是3GHz。
從微體系架構整體來看,Cortex-A77的改進幾乎觸及了核心的所有部分。從前端開始,ARM采用的新設計包括:采用了更大帶寬的前端,分支預測能力加倍,一個全新的MOP緩存結構用于L0指令緩存,更寬的指令解碼/重命名/分配單元(簡稱為“解碼單元”,也被簡稱為“核心中部單元”),解碼器寬度增加50%,全新的整數ALU管道和改進的加載/存儲隊列,新的發(fā)布功能等。
先來看看前端部分。Cortex-A77的前端部分最大的變化來自分支預測單元,其帶寬從32B/周期翻倍至64B/周期。這種設計的原因通常是為了配合更寬以及更高性能的前端,并且也需要一個強大的分支預測單元以配合更強大的指令解碼/重命名/分配單元。ARM的指令是32位寬度的(Thumb是16位寬度),這意味著每個分支預測器每個周期可以獲取16個指令。這是解碼單元寬度的2.6倍之多,并且這種不平衡的設計主要是考慮到核心中出現分支氣泡時,前端和分支預測單元能夠盡可能快地趕上核心的速度。
分支預測單元的設計也發(fā)生了變化,主要是降低了分支預測的錯誤并提高了準確性。實際上,在Cortex-A76上已經有了非常大的分支目標緩沖容量(6KB),但是在新的Cortex-A77上,ARM將這個數據提高了33%,具體容量為8KB。此外在結構上,ARM已經放棄了在Cortex-A77之前使用的BTB層次結構,Cortex-A76擁有一個16入口的nanoBTB和一個64入口的microBTB,在Cortex-A77上已經被一個64入口的L1 BTB取代了延遲為1個周期。
新前端的另外一個主要的特性是引入了Macro-Op緩存結構。這種結構在AMD和英特爾的處理器上已經廣泛使用了,類似于內核中的uOP/MOP緩存結構,實際上它們的功能類似。在Cortex-A77中,新的MOP緩存實際上是用于L0指令緩存,包含了已經解碼和融合的指令(宏操作),其架構采用的是1.5K entry。假設宏操作具有和ARM指令類似的32位密度,那么其體積則為6KB。
ARM在Cortex-A77的緩存設計中,其獨特之處在于和解碼單元的深度集成。在指令融合和優(yōu)化之后,高速緩存以解耦方式在解碼階段被數據填充。在高速緩存命中的情況下,前端可以直接將數據從宏操作高速緩存中發(fā)送至解碼單元執(zhí)行部分的重命名階段,這相當于削減了核心的有效管道循環(huán)的深度,更淺的管道可以在一定程度上提高性能效率,并且這也意味著分支預測錯誤的延遲能夠從11個周期減少至10個周期,即使它具有13個周期的頻率能力(包括一個解碼周期、一個分支/拾取周期、一個dispatch和issue周期)。相比之下,其他核心的誤判率更高一些,比如三星M3、AMD Zen 1、Skylake等處理器大約是16個周期,在這一點上ARM的表現非常出色。
ARM為使用1.5KB條目緩存給出了相應的理由:其目標是在測試套件工作負載上需要達到85%以上的命中率。如果這個緩存容量過小的話,命中率會顯著降低,但是如果緩存容量過大的話核心面積等綜合收益情況反而會降低。對于64KB L1緩存,1.5M0P緩存大小大約是其面積的一半,比較合理。
此外,MOP緩存還允許為解碼單元帶來更高的帶寬。該結構能夠在重命名階段提供64B/周期的數據處理能力,再次明顯高于解碼單元的重命名和調度模塊,并且這種不平衡的設計和更大的前端帶寬使得核心可以隱藏分支泡沬和流水線刷新所帶來的延遲。
ARM還談到了“動態(tài)代碼優(yōu)化”。這個功能將允許代碼重新安排,并更好地適應后端執(zhí)行流水線。值得注意的是,這里的“動態(tài)”并不意味著它是可編程的(比如英偉達的“丹佛”架構),而是指其邏輯固定在核心的設計之上。
最后再來看看解碼單元部分,Cortex-A77核心帶寬得到了大幅度提升。和人們預料的不同,Cortex-A77的解碼單元部分的解碼器寬度依舊是4發(fā)射,而不是傳言中的6發(fā)射。解碼單元寬度從重命名階段開始增加寬度,核心仍然獲取6條指令,但是這種帶寬僅僅在MOP緩存命中的情況下才發(fā)生,然后繞過解碼階段。在MOP高速緩存未命中的情況下,限制因素依舊是指令解碼器,每個周期4個指令被解碼。
增加的寬度還帶來了解碼單元重新排序緩沖區(qū)的增加,已經從128個條目增加至160個條目。值得注意的是,高通采用的修改版本Cortex-A76已經采用了類似的設計,但條目數量未知。另外,由于ARM依舊負責RTL更改,如果采用了160入口的ROB設計,這也是很正常的。
CorteX-A77微架構解讀:ALU加強和更好的負載/存儲設計
在對Cortex-A77的前端和核心中部的解碼單元進行解讀之后,我們再來看看對性能至關重要的后部計算單元部分。
在這里,ARM為Cortex-A77的整數執(zhí)行端增加了第二個分支端口,這與前段加倍的分支預測器是一致的,此外它還具有額外的整數ALU單元。這個新的整數ALU單元比較特殊,它的計算能力介于一個簡單的單周期ALU和現有復雜的ALU單元之間:它自然已經具有單周期ALU單元操作的能力,同時也能夠支持更復雜的2個周期操作,包括一些位移組合指令、邏輯指令、移動指令和測試/比較指令等。ARM表示,新的管道增加帶來了驚人的性能提升,隨著核心變得越來越大,后端可能成為瓶頸,這就使得執(zhí)行單元需要與核心中的其他部分一起變強。
執(zhí)行核心另一個更大的變化是問題隊列的統(tǒng)一。ARM解釋這樣做是為了通過增加執(zhí)行端口來維持核心的效率。
最后,現有的執(zhí)行管道沒有看到太多變化,其中比較值得關注的是一個復雜整數ALU上的整數乘法單元的流水線操作延遲改進。這個改進允許其實現2-3個周期的操作,目前是4個周期。
此外,ARM沒有提到Cortex-A77有在浮點和ASIMD流水線上進行任何改進。有可能之前Cortex-A76的設計已經足夠出色了,因此ARM在Cortex-A77上將架構改進的重點集中在了處理器的其他部分。
接下來看看有關緩存和其他單元部分。Cortex-A77的加載和存儲單元方面依舊是2個單元設計但是ARM為其添加了2個額外的專用存儲端口,這實際上使得讀取/存儲使用的issue端口的帶寬增加了一倍。這意味著讀取/存儲帶寬為4寬度,具有2個地址生成的uOps和2個存儲數據的uOps。在指令排隊方面,ARM將其容量增加了25%,這樣可以實現更多內存及并行,提高效能。
為了進一步隱藏系統(tǒng)的內存延遲,數據預取就顯得非常重要了,這個部分能夠通過減少等待周期進而大幅度提高性能。在之前的Cortex-A76上采用的新預取器在性能上非常出色,能夠處理一些復雜雋況下數據預取的問題。實際上Cortex-A76的預期性能遠遠超過目前已測試過的任何其他微體系結構,這是一個非常了不起的成績。
在Cortex-A77上,ARM進一步改進了預取器,添加了新的額外預取單元,以進一步改善數據預取性能。ARM對技術細節(jié)沒有透露太多,但是保證增加了模式覆蓋范圍以提高預取準確程度。其中一個改變被稱為“增加最大距離”,這意味著ARM的預取器將在更大的虛擬存儲器距離上識別重復的訪問模式,盡可能提高性能。
Cortex-A77中增加的另一個有關數據預取的功能是“系統(tǒng)預取感知”,在這里,ARM試圖解決在不同的系統(tǒng)負載中必須使用單個IP的問題,其中某些系統(tǒng)可能具有更好或者更差的內存特性,比如延遲等。為了處理內存子系統(tǒng)之間的差異,新的預取程序將根據當前的系統(tǒng)行為方式改變其工作模式。比如在一些DVFS條件下,這可能意味著一些有趣的性能改進,比如預取功能將根據當前內存的頻率改變其預取的結果等。這種新的感知系統(tǒng)的優(yōu)勢在于可以更多地緩解DSU的L3緩存壓力。比如如果其他CPU核心處于高度活躍狀態(tài),核心預取程序能夠看到這一點并降低其工作強度,以避免不必要的破壞共享緩存,從而提高整體系統(tǒng)性能。
CorteX-A77的性能:IPC改善20%~35%
最后再來看看Cortex-A77的性能。ARM公布了一些數據,顯示了Cortex-A77在性能上的提升,其采用的測試軟件依舊是SPEC 2006、SPEC2017,GeekBench4和MBench內存帶寬測試。其中的測試重點放在SPEC 2006上,因為它依舊是移動設備中最典型的基準測試。
在SPECint 2006上,Cortex-A77承諾IPC的增長會在23%左右,但SPECfp2006則增加了高達35%。整數工作負載的增加或多或少與CPU內核的改進一致。但是FP部分增加30%-35%則完全出乎意料,尤其是沒有任何有關FP執(zhí)行單元變化的資料和說明。其中一種解釋是SPEC的FP測試套件比整數測試套件更加占用內存,而Cortex-A77能夠在這種高負載情況下提供更好的性能。
在頻率方面,由于Cortex-A77的工藝節(jié)點和Cortex-A76基本一樣,因此最終頻率表現不會有什么大的變化。目前諸如麒麟980和驍龍855這樣的處理器最終的頻率落點大約都在2.6GHz~2.8GHz左右,因此Cortex-A77可能也不會在這個數據上提升太多。雖然ARM又提到Cortex-A77可能會工作在3GHz的頻率下,但綜合諸多因素,新處理器的頻率設定可能不會有太大的進步。
在這個頻率范圍內,最終可以看到Cortex-A77的整數部分性能得到了一些提升,同時浮點結果就更值得關注了,它將超過蘋果A11的浮點性能。不過考慮到產品上市時間,Cortex-A77將面對的是蘋果A13和三星的下一代M5處理器,尤其是前者,會以更強的態(tài)勢出現。
在能耗比方面,ARM承諾新的處理器會和Cortex-A76完全一致。因此在峰值性能時,兩個處理器將耗費相同的電能來完成設定的工作負載。但是Cortex-A77有一個缺點,那就是功率增加和性能數據增加呈線性關系,比如核心功耗在峰值頻率下會大幅度增加,其數值可能會超過普通狀態(tài)下2個以上核心的耗電量,這對移動設備來說是非常敏感的。不過值得慶幸的是大多數的SoC廠商都注意到了這一點,將4個全速的大核心改為2+2設計或者1+3設計其中只有1個或者2個高頻率的高功耗核心。
最后需要說明的是,在相同代次的工藝下,Cortex-A77的核心面積依舊比Cortex-A76大17%真這會帶來一些成本的上升,但是依舊比競爭對手的核心面積小了很多。
CorteX-A77:堅實的一小步
下面又到了總結時間。從Cortex-A77的架構其實不難看出,其變化并沒有去年發(fā)布的Cortex-A76那么大。不過這是建立在Cortex-A76是一個非常成功的核心,幾乎實現了ARM所有的承諾并且運行效率相當高效的基礎上。不僅如此,Cortex-A76還具有出色的PPA,這也是各大AoC廠商所看重的。
Cortex-A77在Cortex-A76的基礎上進行了一些改進,帶來了核心IPC的顯著提升。其一大驚喜就是浮點性能提升高達30%-35%,雖然ARM沒有在這方面有任何表示,但這樣巨大的性能提升最終會反映到實際應用上。一般來說,移動網絡瀏覽是浮點應用的大殺器,未來Cortex-A77將會在這方面表現更加出色。除了浮點性能外,即使在整數性能上,20%-25%的IPC提升也絕對是驚人的改進。整體性能表現值得稱道。
在功耗方面,Cortex-A77的功耗可能相比Cortex-A76會略有上升,但從業(yè)界對處理器設計的一些新觀點來看,新的SoC使用的處理器配置已經變成“大核心+中核心+節(jié)能核心”的方案,在功耗控制上應該不會有太大問題。
最后來看看制造和產品。Cortex-A77的兩大客戶相信會是華為海思和高通驍龍,工藝為7nm,我們將在下半年或者明年年初逐漸看到這些產品上市。到時候就能檢驗ARM宣稱的每年20%-25%的復合增長率是否能夠實現了。