1. 程式人生 > >深入理解Arm Cortex-A76處理器

深入理解Arm Cortex-A76處理器

微信公眾號 mindshare思享

 

在今年的Computex上arm公佈了2018年的Cortex-A旗艦CPU,Cortex-A76. 這個CPU的微構架做了徹底的重新設計,它重點提高了峰值效能,同時良好地保持了效能功耗比。Cortex-A76將arm CPU的效能推上了一個新高度。

Cortex-A76還是armv8.2-a構架實現,與現有的處理相容,還是使用DSU技術,到時微構架的重新設計使得它比Cortex-A75平均有35%的效能提升,且有40%的能耗比提升。對浮點數和機器學習運算任務提升最大,所以我們來深入瞭解一下這個新設計。

 

CPU開足馬力 

Cortex-A76設計的變化基本體現在“更寬”,提升CPU的吞吐量讓更強大執行單元儘可能地開足馬力執行。

在每個Core裡,Cortex-A76裝備了

  • 2個簡單的ALU執行單元用來基本的算術運算和移位操作,

  • 一個多指令週期的整形組合ALU用來做乘和乘加運算

  • 一個分支跳轉單元

Cortex-A75只有一個基本的ALU和一個ALU/MAC單元,這也解釋了為什麼整形運算效能的提升。

Cortex-A76有兩個SIMD NEON執行pipeline, 只有其中一個可以處理浮點數除法和乘加指令。兩pipeline都是雙128bit的SIMD pipe,提供了比以前arm CPU兩倍的頻寬。和Cortex-A75一樣,支援半精度的FP16運算,同時對低精度的INT8 點積(dot product)指令的效能有大幅提升,提高機器學習應用的效能。

 

A76另外一個重要的變化是新的分支預測設計,分支預測現在從指令預取裡解耦出來,分支預測單元每時鐘週期fetch 32 byte,比以前的每時鐘週期16 byte速度快一倍。這樣做的主要原因是利用記憶體級並行,換句話說,潛在的一次處理多個記憶體操作的能力。這特別對處理cache和TLB miss,去掉pipe line無事可做的週期特別有幫助。

 

A76也有每週期4條指令的decode路徑,可以每週期decode 8條16bit的指令。而A75是3條,A73是2條。這意味著CPU可以dispatch最多 8 micro-ops/cycle, A75的數值是6,A73是4.

加上8個issue queue(每個執行單元一個),和128 bit的指令windows, arm 更進一步地加強了指令亂序執行的能力,以提高IPC。

在設計中,使pipeline的早stage更寬,提高了指令吞吐量,這可以餵飽後面高效能的運算單元。即使在cachemiss情況下。但這也稍微增加面積和功耗。

 

 

低延遲memory設計

 

如果處理器存在記憶體讀寫頻寬瓶頸,前面所說的對預取和執行單元的提升就不會這麼有用,所以arm也提升了memory訪問效率。

 

和以前一樣,A76有一樣的64KB,4-way set associative L1cache,和256-512KB的私有L2cache, 但是解耦addressgeneration和cache-lookup流水線兩倍提高了頻寬。

記憶體級並行也是關鍵目標,因為記憶體管理單元可以處理64個in-flight loads,72個in-flight store和2個outstanding非prefetch miss。整個cache層次結構也對訪問延遲做了優化。它只需要4個cycle訪問L1 cache,9個cycle訪問L2 cache,31個cycle訪問L3 cache。基本上記憶體訪問越快,執行也越快。

 

Cortex-A76改進了單核的吞吐量,低延遲的記憶體訪問,和穩定效能。

說到L3 cache,在第二代DSU設計中它支援高達4MB的記憶體。這麼大的記憶體極有可能是為筆記本產品預留的,因為加倍cache只會大致提升5%的效能。智慧手機產品極可能最多隻會配置2MB,因為芯片面積和成本的限制,和對較低效能的要求。

 

aarch32的取捨

Cortex-A76是第一個開始逐漸去除32bit支援的CPU。A76還是支援aarch32,但是隻是在最低特權級的EL0支援,而aarch64在EL0-EL3都支援-從OS到底層的韌體。在將來某個時候,arm非常有可能完全只支援64 bit,這取決於arm生態系統的發展。

在server市場,很多軟體本來就是64bit的,所以QC的Centriq等處理器EL0-EL3只支援aarch64.

在mobile市場,大多數的處理器已經都是64bit的OS和Android kernel,但是還是有部分32bit的應用,為了高效執行,所以在EL0設計保留支援aarch32。EL0是應用級模式,不需要特權級的OS支援,虛擬化,異常處理,記憶體管理的指令和行為,基本上基礎的運算指令,記憶體訪問指令和分支跳轉指令,這些指令中大多數也是aarch64要支援的,所以不會增加很多的邏輯。

只在EL0支援aarch32,很大程度上減少了對CPU設計指令和行為的驗證(驗證全面EL0-EL3 aarch32支援,基本上和驗證一個armv7-a的CPU工作量上是一樣的),同時因為少了處理和aarch64很不一樣的行為的邏輯要求,可以減少CPU面積和功耗。                                                            

筆記本級效能(TLDR)

通常來說,CPU的速度用它在一個時鐘週期可以做多少事情來表示,比如可以做2個加法比只能做一個好,所以arm增加額外的運算單元和提升了浮點運算的效能。

 

這種方式的問題是你需要讓執行單元有事情可做,否則就是浪費晶片的面積和功耗,所以你必須能比以前更快發射更多指令給執行單元。這導致一些問題,比如增加了資料不在處理器認為該在的地方(cache miss)的可能性,這會導致整個系統stall. 因此你需要重點提高分支預測和預取,和更快的cache訪問。最後,這些是以芯片面積和功耗為代價的,所以你需要優化使這些因素可控。

 

 

arm需要關注這些所有的因素,這就是arm做這麼大重新設計的原因,而不是僅僅對A75做些調整。綜合這些IPC效能提升和預計使用的7nm工藝,我們可以看到Cortex-A76比已經很讓人影響深刻的Cortex-A75效能方面有顯著的35%提升,而且A76只需要一半的功耗,以更低的頻率達到一樣的效能目標。

 

A76是arm在從mobile到筆記本(甚至超越)高效能運算方面的大動作,A76同時保持了使arm這樣成功的能效。我們非常有可能在2019早些時候看到第一個A76的晶片。

 

本文屬個人觀點。

本文主要來源:https://www.androidauthority.com/cortex-a76-deep-dive-870896/