深入瞭解CPU兩大架構ARM與X86

li136237發表於2016-12-06

        重溫下CPU是什麼

        中央處理單元(CPU)主要由運算器、控制器、暫存器三部分組成,從字面意思看運算器就是起著運算的作用,控制器就是負責發出CPU每條指令所需要的資訊,暫存器就是儲存運算或者指令的一些臨時檔案,這樣可以保證更高的速度。

        CPU有著處理指令、執行操作、控制時間、處理資料四大作用,打個比喻來說,CPU就像是我們的大腦,幫我們完成各種各樣的生理活動。因此,如果沒有CPU,那麼電腦就是一堆廢物,無法工作。移動裝置其實很複雜,這些CPU需要執行數以百計的指示,才能使他向我們期待的方向執行,而CPU的速度和效率是至關重要的。速度影響使用者體驗,而效率影響電池壽命。最完美的移動裝置是高效能和低功耗的相結合。

        要了解X86和ARM,就得了解複雜指令集(CISC)和精簡指令集(RISC)從CPU發明到現在,有多種架構,從我們熟悉的X86,ARM,到不太熟悉的MIOS,IA64,他們之間的差距都非常大。但是如果從最基本的邏輯角度來分類的話,他們可以被分為兩大類,即所謂的“複雜指令集”與“精簡指令集”系統,也就是經常看到的“CISC”與“RISC”。Intel和ARM處理器的第一個區別是,前者使用複雜指令集(CISC),而後者使用精簡指令集(RISC)。屬於這兩種類中的各種架構之間的最大的區別,在於他們的設計者考慮問題方式的不通。

        我們可以繼續舉個例子,比如說我們要命令一個人吃飯,那麼我們應該怎麼命令呢?我們可以直接對他人下達“吃飯”的命令,也可以命令他“先拿勺子,然後舀起一勺飯,然後張嘴,然後送到嘴裡,最後嚥下去”。從這裡可以看到,對於命令別人做事這樣一件事情,不同的人有不同的理解,有人認為,如果我首先給接受命令的人以足夠的訓練,讓他掌握各種複雜技能(即在硬體中實現對應的複雜功能),那麼以後就可以用非常簡單的命令讓他去做和複雜的事情--比如只要說一句“吃飯”,他就會吃飯,但是也有人人為這樣會讓事情變得複雜,畢竟接受命令的人要做的事情很複雜,如果這時候想讓他吃菜怎麼辦?難道繼續訓練他吃菜的方法?我們為什麼不可以把事情分為許多非常基本的步驟,這樣只需要接受命令的人懂得很少的基本技能,就可以完成同樣的工作,無非是下達命令的人稍微累一點——比如現在我要他吃菜,只要把剛剛吃飯命令裡的“舀起一勺飯”改成“舀起一勺菜”,問題就解決了,多麼簡單。這就刪“複雜指令集”和“精簡指令集”的邏輯區別。

        從幾個方面比較ARM與X86架構Intel和ARM的處理器除了最本質的複雜指令集(CISC)和精簡指令集(RISC)的區別之外,下面我們再從以下幾個方面對比下ARM和X86架構。一、製造工藝ARM和intel處理器的一大區別是ARM從來只是設計低功耗處理器,Intel的強項是設計超高效能的桌上型電腦和伺服器處理器。

        一直以來,intel都是桌上型電腦的伺服器行業的老大。然而進入移動行業時,intel依然使用和桌上型電腦同樣的複雜指令集架構,試圖將其硬塞入給移動裝置使用的體積較小的處理器中。但是intel i7處理器的平均發熱率為45瓦。基於ARM的片上系統(其中包括圖形處理器)的發熱率的最大瞬間峰值大約是3瓦,約為Inteli7處理器的1/15.其最新的Atom系列處理器採用了跟ARM處理器類似的溫度設計,為此intel必須使用最新的22奈米制造工藝。一般而言,製造工藝的奈米數越小,能量的使用效率越高。ARM處理器使用更低的製造工藝,擁有類似的溫控效果。比如,高通驍龍805處理器使用28奈米制造工藝。

        二、64位計算對於64位計算,ARM和intel也有一些顯著區別。intel並沒有開發64位版本的x86指令集。64位的指令集名為x86-64(有時簡稱位x64),實際上是AMD設計開發的。intel想做64位計算,他知道如果從自己的32位x86架構進化出64位架構,新架構效率會很低,於是它搞了一個新64位處理器專案名位IA64。由此製造除了itanium系列處理器。

        而ARM在看到移動裝置對64位計算的需求後,於2011年釋出了ARMv8 64位架構,這是為了下一代ARM指令集架構工作若干年後的結晶。為了基於原有的原則和指令集,開發出一個簡明的64位架構,ARMv8使用了兩種執行模式,AARCH32和AArch64.顧名思義,一個執行32位程式碼,一個執行64位程式碼。ARM設計的巧妙之處,是處理器在執行中可以無縫在兩種模式間切換。這意味著64位指令的解碼器是全新設計的,不用兼顧32位指令,而處理器依然可以向後相容。

        三、異構計算ARM的big.LITTLE架構是一項intel一時無法複製的創新。在big.LITTLE架構裡,處理器可以是不通型別的。傳統的雙核或四核處理器中包含同樣的2個核或者4個核。一個雙核Atom處理器中有兩個一模一樣的和,提供一樣的效能,擁有相同的功耗。ARM通過big.LITTLE向移動裝置推出了異構計算。這意味著處理器中的核可以有不同效能和功耗。當裝置正常執行時,使用低耗核,而當你執行一款複雜的遊戲時,使用的是高效能的核。

        這是怎麼做到的呢?設計處理器的時候要考慮大量的技術設計的採用與否,這些技術設計決定了處理器的效能以及功耗。在一條指令被解碼並準備執行時,intel和ARM的處理器都使用流水線,就是說解碼的過程是並行的。

        為了更快地執行指令,這些流水線可以被設計成允許指令不按照程式的順序被執行(亂序執行)。一些巧妙的邏輯結構可以判斷下一條指令是否依賴與當前的指令執行的結果。intel和ARM都提供亂序執行邏輯結構,可想而知,這種結構十分的複雜,複雜意味著更多的功耗。

        intel處理器由設計者們選擇是否加入亂序邏輯結構。異構計算則沒有這方面的問題。ARM Cotren-A53採用順序執行,因此功耗低一些。而ARM Cotren-A57使用亂序執行,所以更快但更耗電。採用big.LITTLE架構的處理器可以同時擁有Cotrex-A53和Cortex-A57核,根據具體的需要決定如何使用這些核。在後臺同步郵件的時候,不需要高速的亂序來執行,僅在玩複雜遊戲的時候需要。在合適的時間使用合適的核。

        此外,ARM具有其與x86架構電腦不可對比的優勢,該優勢就是:功耗。其實他們的功耗主要是由這幾點決定的。首先,功耗和工藝製程相關。ARM的處理器不管是哪家主要是靠臺積電等專業製造商生產的,而intel是由自己的工廠製造的。一般來說後者比前者的工藝領先一代,也就是2-3年。如果同樣的設計,造出來的處理器應該是intel的更緊湊,比如一個是22奈米,一個是28奈米,同樣功能肯定是22奈米的耗電更少。

        那為什麼反而ARM的比X86耗電少的多呢。這就和另外一個因素相關了,那就是設計。

        設計又分為前端和後端設計,前端設計體現了處理器的架構,精簡指令集和複雜指令集的區別是通過前端設計體現的。後端設計處理電壓,時鐘等問題,是耗電的直接因素。先說後端怎麼影響耗電的。我們都學過,電晶體耗電主要兩個原因,一個是動態功耗,一個是漏電功耗。動態功耗是指電晶體子啊輸入電壓切換的時候產生的耗電,而所有的邏輯功能的0/1切換,歸根結底都是時鐘訊號的切換。如果時鐘訊號保持不變,那麼這部分的功耗就為0.這就刪所謂的門控時鐘。而漏電功耗可以通過關掉某個模組的電源來控制。當然,其中任何一項都會使得時鐘和電源所控制的模組無法工作。他們的區別在於,門控時鐘的回覆時間較短,而電源控制的時間較長。

        此外,如果單條指令使用多個模組的功能,在恢復功能的時候,並不是最慢的那個模組的時間,而可能是幾個模組的時間相加,因為這牽涉到一個電次序的問題,也就是恢復工作時候模組間是有先後次序的,不遵照這個次序,就無法恢復。而遵照這個次序,就會使得總恢復時間很長。所以在後端這塊,可以得到一個結論,為了省電,可以關閉一些暫時不會用到的處理器模組。但是也不能輕易的關閉,否則一旦需要,恢復的話會讓完成某個指令的時間會很長,總體效能顯然降低。此外,子模組的門控時鐘和電源開關通常是設計電路時就決定的,對於作業系統是透明的,無法通過軟體來優化。

        再來看前端。ARM的處理器有個特點,就是亂序執行的能力不如X86。換句話說,就是使用者在使用電腦的時候,他的操作是隨機的,無法預測的,造成的指令也無法預測。X86為了增強這種情況下的處理能力,加強了亂序指令的執行。此外,X86還增強可單核的多執行緒能力。這樣做的缺點就是,無法很有效的關閉和恢復處理器子模組,因為一旦關閉,恢復起來就很慢,從而造成低效能。為了保持高效能,就不得不讓大部分的模組都保持開啟,並且時鐘也保持切換。這樣做的直接後果就是耗電高。而ARM的指令在確定次序的執行,並且依靠多核而不是單核多執行緒來執行。這樣容易保持子模組和時鐘訊號的關閉,顯然就更省電。

        此外,在作業系統這個級別,個人電腦上通常會開很多執行緒,而移動平臺通常會做優化,只保持必要的執行緒。這樣使得耗電差距進一步加大。當然,如果X86用在移動憑條,肯定也會因為執行緒少而省電。凌動系列(ATOM)專門為這些特性做了優化,在一定程度上降低亂序執行和多執行緒的處理能力,從而達到省電。現在移動處理器都是片上系統(SoC)架構,也就是說,處理器之外,圖形,視訊,音訊,網路等功能都在一個晶片裡。這些模組的開啟與關閉就容易預測的多,並且可以通過軟體來控制。這樣,整體功耗就更加取決於軟體和製造工藝而不是處理器架構。在這點上,X86的處理器佔優勢,因為Intel的工藝有很大優勢,而軟體優化只要去做肯定就可以做到。       

  ARM和X86現在發展如何?關於X86架構和ARM架構這兩者誰將統一市場的爭執一直都有,但是也有人說這兩者根本不具備可比性,X86無法做到ARM的功耗,而ARM也無法做到X86的效能。現在ARM架構已經具備了進入伺服器晶片的能力,眾多晶片研發企業紛紛採用ARM架構研發伺服器晶片無疑將促進其繁榮, 2015年一款採用ARM架構的Windows 10平板現身,這也是目前曝光的全球首款非X86架構、執行Windows系統的平板產品。

  同時,經過數年的努力,2016年AMD終於推出了首個基於ARM架構的處理器——Opteron A1100。AMD希望能夠憑藉這一處理器挑戰Intel在資料中心伺服器市場的霸主地位。這樣看來,Intel在伺服器晶片市場將會逐漸失去霸主地位,而且,Intel已然錯過了移動 CPU 市場,現在它正試圖跳進千萬億的物聯網領域,具體表現如何,看時間的考驗吧。

相關文章