張平
ARM的首個指令集為Armv4,它于1990年發(fā)布。在隨后的20年間,ARM陸續(xù)發(fā)布了Armv5、Armv6、Armv7這三代指令集,不斷擴充著這個面向低功耗、高性能功耗比的精簡指令集家族的陣容。最大的變化來自2011年,ARM當年發(fā)布了劃時代的Armv8指令集,帶來了全新的AArch64架構(gòu),引領(lǐng)了移動計算時代的爆發(fā)性增長。在十年后的今天,ARM又再度發(fā)布了全新的Armv9。這一次,ARM希望通過大量新計算功能的加入以及安全特性的增強,為ARM在下一個十年的發(fā)展奠定基礎(chǔ)。
安全和計算:Armv9的兩大板塊
一般來說,對底層指令集的改動應(yīng)該是極為謹慎的,因為這意味著整個行業(yè)架構(gòu)的變化。具體到ARM來說,這會涉及千億級別的芯片和產(chǎn)品。在之前的Armv8上,ARM引入了全新的AArch64架構(gòu),將移動計算擴展至64位,并且還帶來了完全不同的執(zhí)行模式和指令集,包括擴展寄存器、64位的虛擬地址空間等。因此,Armv8的出現(xiàn)帶給業(yè)界極大震撼。
那么,十年后發(fā)布的Armv9有什么改進,可以和當年Armv8從32位轉(zhuǎn)換成64位的進步相提并論比呢?在這一點上,ARM宣稱Armv9依舊基于AArch64,但是增加了包括安全、AI計算、矢量計算、DSP計算等全新能力。從ARM的官方資料來看,Armv9的改變主要在于計算和安全兩個板塊。計算方面包含了增強的矢量計算、機器學(xué)習能力以及數(shù)字信號處理能力等,這部分的提升主要是交由SVE2來實現(xiàn),同時還包含了相對應(yīng)的各個計算功能的增強??紤]到這是指令集級別的改變,因此目前還暫時不會有這些增強的部分特別具體的內(nèi)容,官方資料中只提供了一些功能和應(yīng)用方面的描述。安全方面增加了包括CCA在內(nèi)的安全特性,并針對未來ARM所要面向的市場在安全方面可能遇到的問題進行了強化。
接下來,本文就先為大家介紹Armv9在計算方面的變化,主要內(nèi)容為全新的SVE2模塊。其余部分,比如涉及到CPU架構(gòu)改進的內(nèi)容,目前還不得而知,ARM可能會在未來的產(chǎn)品說明中進一步描述。
更強算力:Armv9引入SVE2
計算能力方面,Armv9對A I計算、矢量計算和DSP計算進行了大幅度加強,其核心就是第二代可變長度矢量擴展指令集(Scalable VectorExtensions 2,簡稱“SVE2”)。SVE2在技術(shù)和產(chǎn)品的實現(xiàn)上比我們想象的速度更快,因為它是作為N E N O指令集的后續(xù)出現(xiàn)的,并且有SVE的經(jīng)驗在前,廠商應(yīng)該很容易就能將它集成在自己全新的產(chǎn)品中。
SVE(第一代可變長度矢量擴展指令集)誕生于2016年,并已進行了實際應(yīng)用。SVE主要是為富士通A64FX CPU設(shè)計的,并且服務(wù)于全球排名第一的超算“Fuka gu”(中文為“富岳”)。SVE大大擴展了之前ARM指令集針對矢量數(shù)據(jù)的并行處理能力,但它的問題在于數(shù)據(jù)的可變范圍相當有限,并且只針對HPC的工作負載進行研發(fā),缺少很多通用性較強的指令集。相比之下,面向民用市場的NENO則覆蓋了這些缺少的內(nèi)容。但NENO的規(guī)格和計算能力都不夠出色,已經(jīng)難以滿足目前的需求了。
在這種情況下,新的SVE2在2019年4月發(fā)布。作為SVE2和NENO的超集,SVE2擁有SVE和NENO的所有功能和優(yōu)點,比如允許在數(shù)據(jù)集并行中實現(xiàn)更多的功能域,集成了SVE的概念,矢量寄存器和操作基本原理,并且SVE和SVE2都定義了32個可擴展的矢量寄存器(后文還有詳述)?,F(xiàn)在,芯片開發(fā)人員可以根據(jù)需求選擇合適的矢量長度來進行計算方面的實現(xiàn),可選的矢量長度范圍最小為NENO的128位(這是因為NENO指令集只能處理固定長度為128位的矢量),最長可選2048位,開發(fā)人員可以以128位為起始值,以128位為一個單位選擇自己需要的矢量處理單元的一次性可處理數(shù)據(jù)長度,這在很大程度上給了芯片設(shè)計人員和軟件研發(fā)人員不小的自由度。
SVE和SVE2的設(shè)計理念非常先進。它們允許開發(fā)人員只需要通過一次編寫和構(gòu)建軟件,就可以在不同的、支持A Arch64的硬件上,使用不同的SV E矢量長度的計算單元來完成相同的計算,當然其中存在效率和速度的差異。這種特性使得開發(fā)人員不需要知道當前系統(tǒng)實際設(shè)計的矢量長度,并且也不需要他們根據(jù)硬件矢量長度來匹配相關(guān)軟件,這為軟件移植帶來了相當大的便利。
在技術(shù)特性方面,SVE和SVE2帶來了不少新的技術(shù)特性,包括每通道預(yù)測(Per-lane predication)、對數(shù)據(jù)的獲取、裝載以及分散、存儲功能(Gather-load and scatter-store)、矢量化的預(yù)測技術(shù)(Speculativevectorization)等,上述功能有助于實現(xiàn)數(shù)據(jù)的矢量化處理和優(yōu)化循環(huán)。同時,SVE2在SVE僅針對HPC和ML優(yōu)化的基礎(chǔ)上,還帶來了針對機器學(xué)習(UDOT指令)、計算機視覺(TBL和TBX指令)、基帶網(wǎng)絡(luò)(CADD和CMLA指令)、基因組學(xué)(BDEP和BEXT指令)以及服務(wù)器(MATC H和NMATCH指令)等全新應(yīng)用場合的指令優(yōu)化。
尤其是為了幫助編譯器對上述領(lǐng)域更好的矢量化—SVE2針對大多數(shù)編譯器使用的整數(shù)數(shù)字信號處理器(DSP),提供了一個和矢量寬度無關(guān)的新N E N O指令集,這擴大了矢量并行處理的適用范圍,極大地提高了新架構(gòu)在上述所有方面的計算效能和計算速度。
進一步來看SVE2的結(jié)構(gòu)。SVE2擁有32個可擴展的矢量寄存器(scalable vector registers)、16個可擴展的述語寄存器(predicate registers)、第一故障述語寄存器(F i rstFaultpredicate Register,簡稱為FFR)以及可擴展矢量系統(tǒng)控制寄存器(scalablevector system control registers)。其中,32個可擴展矢量寄存器正如前文所說,可以在128位到2048位間選擇,其中首128位和NENO指令集固定的128位長度共享。具體計算內(nèi)容方面,可擴展矢量寄存器可以容納64、32、16和8位元素,支持整數(shù)、雙精度、單精度和半精度浮點計算,功能相當豐富。所謂述語寄存器,通常用作存儲數(shù)據(jù)運算的位掩碼,每個述語寄存器的長度是之前的可擴展矢量寄存器的1/8,共16個述語寄存器的前8個用作加載、存儲和運算,后8個用于循環(huán)管理額外的述語。此外FFR和可擴展矢量系統(tǒng)控制寄存器主要是用于推測性的存儲器訪問以及保留供將來使用。
對現(xiàn)有的處理器使用的NENO指令集而言,SVE2會將其進行復(fù)制或者轉(zhuǎn)換,使其更有效率地在SVE2架構(gòu)下運行。ARM還特別指出,即使處理器內(nèi)集成了SVE2,依舊可以繼續(xù)存在NENO。這里并不僅僅是指SVE2可以處理NENO指令集的內(nèi)容,而是說一個芯片擁有了SVE2的相關(guān)單元,也可以同時放置NENO相關(guān)單元。這里可能是考慮到啟用SVE2后功耗和效率等問題,畢竟N ENO的操作和計算都要更簡單一些??偟膩碚f,SV E和SVE2并非只是NENO指令集的簡單擴展,它們是針對更好的數(shù)據(jù)并行性而重新設(shè)計的一整套計算方案,當然,SVE和SVE2的硬件邏輯覆蓋了NENO的硬件邏輯,因此,支持SVE和SVE2的硬件也必然支持NENO,反之則不一定。
加入SVE2后,Armv9在矢量計算上終于擁有了可以和桌面處理器相比擬的功能和實現(xiàn)路徑。實際上,縱觀A R M之前在指令集上的發(fā)展路徑可以看出,在計算領(lǐng)域,桌面平臺往往會領(lǐng)先移動平臺數(shù)個身位,移動平臺則會在制造工藝或者技術(shù)應(yīng)用相對成熟的時候開始提供類似的功能。比如英特爾在數(shù)年前就開始推廣SSE指令集,也就是典型的矢量并行計算指令集,其提供了8個SIMD浮點寄存器,可以進行128位浮點計算。此后英特爾又推出了包括AVX、AVX-256、AV X-512在內(nèi)的指令集,都是希望利用規(guī)?;牟⑿杏嬎悖瑢⒖梢圆⑿谢?、矢量化處理器的數(shù)據(jù)導(dǎo)入AVX這類可以高效率執(zhí)行計算的模塊,實現(xiàn)處理器計算能力的大幅度提升,并對當前和未來很長一段時間的熱門,諸如深度學(xué)習、計算機視覺、科學(xué)計算等內(nèi)容進行加速,大幅度提高處理器效率。這次ARM在Armv9上引入SVE2,所做的也是這個事情。當然,我們并不指望Armv9和相對應(yīng)的產(chǎn)品擁有類似于桌面產(chǎn)品那樣強大的計算能力,但有就是好的。在執(zhí)行移動計算和一些要求不高、需要并行矢量計算的任務(wù)時,Armv9做出的這個改變還是能起到一定的效果。
全面強化:Armv9的安全特性改進
ARM在Armv9的安全特性方面做了相當多的工作。其中很大一部分原因是考慮到目前行業(yè)內(nèi)安全問題頻發(fā),包括英特爾之前“幽靈”和“熔斷”這類安全缺陷所導(dǎo)致的連鎖反應(yīng),以及AMD近期發(fā)生的預(yù)測存儲轉(zhuǎn)發(fā)(PSF)安全缺陷等。這些漏洞和相關(guān)同級別的旁側(cè)信道攻擊都表明,對安全性的根本需求是考慮如何對待安全本身以及如何在處理器層面實現(xiàn)安全。ARM在這里的做法是通過Armv9,重新制作整個安全架構(gòu)工作方式,這就是新的ARM保密計算架構(gòu)。
目前ARM對Armv9中新的安全架構(gòu)披露得還不算詳細,已有的消息僅僅包括比較高層級、宏觀的CCA(Confidential Compute Architecture,保密計算架構(gòu))方面的內(nèi)容,其運行的一些關(guān)鍵性和細節(jié)內(nèi)容,ARM會在今年夏末的發(fā)布會上進一步公布。
ARM解釋了有關(guān)CCA工作的內(nèi)容。從原理上來說,CCA是以軟件為核心的,也就是設(shè)備上運行的應(yīng)用必須置于操作系統(tǒng)和管理程序的控制之下。相比傳統(tǒng)系統(tǒng)和軟件那種權(quán)屬不清,部分特權(quán)軟件擁有超越操作系統(tǒng)和管理程序的功能并可能損害操作系統(tǒng)和管理程序而言,CCA將在很大程度上扭轉(zhuǎn)這個問題。
為此,CCA引入了一個動態(tài)創(chuàng)建的 "領(lǐng)域"新概念。所謂“領(lǐng)域”,可以看成是對操作系統(tǒng)或者管理程序完全不透明的、安全的、容器化的執(zhí)行環(huán)節(jié)。管理程序仍然存在,但只負責調(diào)度和資源分配,而領(lǐng)域?qū)⒂梢粋€名為 "領(lǐng)域管理器"的新實體來管理,領(lǐng)域管理器本身并不大,大約只有管理程序1/10的體積。在這里有一個非常特殊的設(shè)計,領(lǐng)域內(nèi)的應(yīng)用程序可以“驗證”一個領(lǐng)域管理器,并確認其是可信的,這在傳統(tǒng)的管理程序中是不可能的。ARM并沒有深入地介紹到底是什么在領(lǐng)域、操作系統(tǒng)、管理程序之間建立了這種分離。根據(jù)推測來看,這個功能比較接近硬件支持的地址空間,這樣一來不同的域之間就無法相互影響了。
根據(jù)ARM解釋,使用領(lǐng)域的好處是可以極大地減少設(shè)備上運行的某一應(yīng)用的信任鏈,這使得操作系統(tǒng)可以非常透明地控制系統(tǒng)內(nèi)的安全問題,并且這與需要企業(yè)使用帶有授權(quán)軟件的專用設(shè)備的情況相反,用來監(jiān)督控制的關(guān)鍵任務(wù)應(yīng)用程序?qū)⒛軌蛟谌魏卧O(shè)備上運行,這也大大方便了企業(yè)的運行和操作。
另一個和安全相關(guān)的功能是MTE(Memory Tagging Extensions,內(nèi)存標記擴展)。這個功能的出現(xiàn)是為了解決目前普遍存在的內(nèi)存安全問題。比如微軟宣稱目前每年通過安全更新解決的問題中,70%都是內(nèi)存安全問題。谷歌Chromium的安全問題,同樣有70%和內(nèi)存安全相關(guān)。
因此在Armv9上,ARM著重介紹了MTE功能。不過實際上MTE并非Armv9中的功能,而是在之前的Armv8.5中就已經(jīng)引入,其目的是幫助解決軟件中兩個最持久的安全問題,即緩沖區(qū)溢出(Buffers overflows)和釋放后重用(Use-af ter-free)。釋放后重用是指當系統(tǒng)使用并釋放了一個堆塊后,并沒有將該指針置為NULL,這會導(dǎo)致該指針處于懸空的狀態(tài),同樣被釋放的內(nèi)存數(shù)據(jù)如果被惡意利用的話,可能產(chǎn)生數(shù)據(jù)泄露等問題。在過去50年中,這兩大問題一直伴隨著軟件的發(fā)展,目前也沒有找到特別好的根治方法。MTE則是通過分配時標記內(nèi)存指針,并在使用數(shù)據(jù)時進行檢查來幫助識別這類問題的出現(xiàn),可能會對整個系統(tǒng)的安全性加強起到一定的作用。
面向未來:ARM公布部分未來CPU架構(gòu)
除了展示有關(guān)Armv9的內(nèi)容外,ARM還公布了其所帶來的CPU架構(gòu)和相關(guān)性能進步等內(nèi)容。
ARM給出的數(shù)據(jù)顯示,相比2016年推出的Cort ex-A73,在I SO流程的設(shè)計IPC層面,全新的Cortex-X1已經(jīng)將處理器的峰值性能提升了2.5倍。在采用了新的Armv9、代號為“Matterhorn”和“Makal u”的下一代(2021年推出)和下下一代(2022年推出)的新C PU架構(gòu)上,A R M預(yù)計性能增幅會提升至最多30%。值得注意的是,這里的性能增幅僅僅是指IPC方面的內(nèi)容,并不包括受益于頻率和新的工藝所帶來的性能增益。平均下來,相比2020年推出的Cortex-X1,新的內(nèi)核平均每年將帶來14%的性能增長幅度。雖然從這個曲線的斜率來看,14%的速度是要略小于之前從Cortex-A72到Cortex-X1的2015年或2016年到2020年間的增長速度的,但是顯然高于業(yè)內(nèi)平均水平。
除了移動設(shè)備外,在數(shù)據(jù)中心市場,ARM在2019年推出了全新的Neoverse架構(gòu),目前Neoverse V1擁有ARM旗下最高的單核心性能,面向的是云端、H P C和機器學(xué)習用戶,另一款Neoverse N2則兼具高單核性能和高效率,面向5G邊緣計算、SmartNIC等設(shè)備中可以實現(xiàn)非常好的擴展性能。ARM的數(shù)據(jù)顯示,這兩款產(chǎn)品相比之前的產(chǎn)品分別帶來了2.4倍和2.2倍的性能提升,但是ARM沒有給出數(shù)據(jù)元點,因此不清楚ARM是和哪年的哪一款產(chǎn)品進行了對比。
另外,ARM還特別指出,在系統(tǒng)層面需要進一步加強,這樣才能更好地發(fā)揮出CPU架構(gòu)的性能。比如根據(jù)ARM給出的數(shù)據(jù)顯示,在系統(tǒng)延遲方面之前是150ns,現(xiàn)在則是90ns,平均減少5ns的延遲就可以帶來1%的性能提升。與此類似的情況還體現(xiàn)在各個方面,每100MHz頻率的提升對應(yīng)3%的性能提升,每10GB/s內(nèi)存帶寬的增加對應(yīng)2%的性能提升,以及緩存容量的翻倍對應(yīng)9%的性能提升等。ARM在這部分可能是想說明目前整個系統(tǒng)層面對CPU的性能優(yōu)化還遠遠不夠,建議業(yè)內(nèi)應(yīng)該更注重系統(tǒng)層級的優(yōu)化,針對延遲、頻率、內(nèi)存帶寬和緩存優(yōu)秀的設(shè)計可能會帶來比擬CPU架構(gòu)升級的性能優(yōu)勢,這是非常值得關(guān)注的一個點。
在對未來的展望上,ARM依舊將CPU視為未來通用性最好的計算模塊,其余的加速模塊包括GPU等雖然正在快速發(fā)展,但是在很多情況下這些加速模塊在靈活性和易用性上不足,包括可編程性、安全特性、在任何設(shè)備上部署的能力以及經(jīng)過驗證的正確工作的能力等。ARM還提到,目前計算設(shè)備的生態(tài)系統(tǒng)的運行方式極其分散,不僅設(shè)備類型不同,設(shè)備廠商和操作系統(tǒng)之間也存在差異。而Armv9新加入的SVE2和矩陣乘法可以極大地簡化軟件生態(tài)系統(tǒng),可以采用更統(tǒng)一的方法并可在任何設(shè)備上運行,簡化系統(tǒng)的運行架構(gòu)并提高效率。
在GPU方面ARM也給出了一些消息。值得注意的是,ARM宣稱M aliGPU的未來將可能支持VRS、光線追蹤等目前已經(jīng)在桌面平臺廣泛應(yīng)用的新技術(shù)。這一點是非常令人驚訝的,這意味著移動GPU在發(fā)展路線上也深受桌面GPU的影響,未來我們會看到運行在移動G P U上的光線追蹤游戲(云游戲是否會成為其最大競爭對手?)。
最后我們來總結(jié)一下有關(guān)Armv9指令集的發(fā)布。總的來看,Armv9指令集看起來更像是一個在計算和安全方面極大加強的Armv8指令集的擴展版本,其中有關(guān)計算的部分也就是SV E2帶來了對矢量計算根本性的改變,安全部分的設(shè)計(ARM還將繼續(xù)公布詳細內(nèi)容)也非常令人感興趣。無論是計算還是安全,都將影響到未來十年ARM的發(fā)展,也會影響到我們每一個人手中的移動設(shè)備。
在具體的產(chǎn)品上,Neoverse N2可能會采用新的Armv9指令集,其他面向消費者的新架構(gòu)正在準備中,其主要目標應(yīng)該是接替Cor tex-X1和Cortex-A78,樂觀估計的話,預(yù)計2022年消費者就可以在市場中看到這類產(chǎn)品了。