未來是屬於 ARM 為代表的精簡指令集還是 x86 為代表的復雜指令集?


分析一:

 

這里簡單來談一下,ARM和X86之間為什么不太具有可比性的問題。要搞清楚這個問題首先要明白什么是架構,之前也有很多人提到了架構不同,但架構是什么意思?它是一個比較抽象的概念,不太容易用幾句話就解釋清楚。我們要明白CPU是一個執行部件,它之所以能執行,也是因為人們在里面制作了執行各種功能的硬件電路,然后再用一定的邏輯讓它按照一定的順序工作,這樣就能完成人們給它的任務。也就是說,如果把CPU看作一個人,首先它要有正常的工作能力(既執行能力),然后又有足夠的邏輯能力(能明白做事的順序),最后還要聽的懂別人的話(既指令集),才能正常工作。而這些集中在一起就構成了所謂的“架構”,它可以理解為一套“工具”、“方法”和“規范”的**。不同的架構之間,工具可能不同,方法可能不同,規范也可能不同,這也造成了它們之間的不兼容——你給一個意大利泥瓦匠看一份中文寫成的烹飪指南,他當然不知道應該干什么了。
如果還看不懂,沒關系,我們繼續。從CPU發明到現在,有非常多種架構,從我們熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它們之間的差距都非常大。但是如果從最基本的邏輯角度來分類的話,它們可以被分為兩大類,即所謂的“復雜指令集”與“精簡指令集”系統,也就是經常看到的“CISC”與“RISC”。屬於這兩種類中的各種架構之間最大的區別,在於它們的設計者考慮問題方式的不同。我們可以繼續舉個例子,比如說我們要命令一個人吃飯,那么我們應該怎么命令呢?我們可以直接對他下達“吃飯”的命令,也可以命令他“先拿勺子,然后舀起一勺飯,然后張嘴,然后送到嘴里,最后咽下去”。從這里可以看到,對於命令別人做事這樣一件事情,不同的人有不同的理解,有人認為,如果我首先給接受命令的人以足夠的訓練,讓他掌握各種復雜技能(即在硬件中實現對應的復雜功能),那么以后就可以用非常簡單的命令讓他去做很復雜的事情——比如只要說一句“吃飯”,他就會吃飯。但是也有人認為這樣會讓事情變的太復雜,畢竟接受命令的人要做的事情很復雜,如果你這時候想讓他吃菜怎么辦?難道繼續訓練他吃菜的方法?我們為什么不可以把事情分為許多非常基本的步驟,這樣只需要接受命令的人懂得很少的基本技能,就可以完成同樣的工作,無非是下達命令的人稍微累一點——比如現在我要他吃菜,只需要把剛剛吃飯命令里的“舀起一勺飯”改成“舀起一勺菜”,問題就解決了,多么簡單。
這就是“復雜指令集”和“精簡指令集”的邏輯區別。可能有人說,明顯是精簡指令集好啊,但是我們不好去判斷它們之間到底誰好誰壞,因為目前他們兩種指令集都在蓬勃發展,而且都很成功——X86是復雜指令集(CISC)的代表,而ARM則是精簡指令集(RISC)的代表,甚至ARM的名字就直接表明了它的技術:Advanced RISC Machine——高級RISC機。
到了這里你就應該明白為什么RISC和CISC之間不好直接比較性能了,因為它們之間的設計思路差異太大。這樣的思路導致了CISC和RISC分道揚鑣——前者更加專注於高性能但同時高功耗的實現,而后者則專注於小尺寸低功耗領域。實際上也有很多事情CISC更加合適,而另外一些事情則是RISC更加合適,比如在執行高密度的運算任務的時候CISC就更具備優勢,而在執行簡單重復勞動的時候RISC就能占到上風,比如假設我們是在舉辦吃飯大賽,那么CISC只需要不停的喊“吃飯吃飯吃飯”就行了,而RISC則要一遍一遍重復吃飯流程,負責喊話的人如果嘴巴不夠快(即內存帶寬不夠大),那么RISC就很難吃的過CISC。但是如果我們只是要兩個人把飯舀出來,那么CISC就麻煩得多,因為CISC里沒有這么簡單的舀飯動作,而RISC就只需要不停喊“舀飯舀飯舀飯”就OK。
這就是CISC和RISC之間的區別。但是在實際情況中問題要比這復雜許許多多,因為各個陣營的設計者都想要提升自家架構的性能。這里面最普遍的就是所謂的“發射”概念。什么叫發射?發射就是同時可以執行多少指令的意思,例如雙發射就意味着CPU可以同時拾取兩條指令,三發射則自然就是三條了。現代高級處理器已經很少有單發射的實現,例如Cortex A8和A9都是雙發射的RISC,而Cortex A15則是三發射。ATOM是雙發射CISC,Core系列甚至做到了四發射——這個方面大家倒是不相上下,但是不要忘了CISC的指令更加復雜,也就意味着指令更加強大,還是吃飯的例子,CISC只需要1個指令,而RISC需要5個,那么在內存帶寬相同的情況下,CISC能達到的性能是要超過RISC的(就吃飯而言是5倍),而實際中CISC的Core i處理器內存帶寬已經超過了100GB/s,而ARM還在為10GB/s而苦苦奮斗,一個更加吃帶寬的架構,帶寬卻只有別人的十分之一,性能自然會受到非常大的制約。為什么說ARM和X86不好比,這也是很重要的一個原因,因為不同的應用對帶寬需求是不同的。一旦遇到帶寬瓶頸,哪怕ARM處理器已經達到了很高的運算性能,實際上根本發揮不出來,自然也就會落敗了。

說到這兒大家應該也已經明白CISC和RISC的區別和特色了。簡而言之,CISC實際上是以增加處理器本身復雜度作為代價,去換取更高的性能,而RISC則是將復雜度交給了編譯器,犧牲了程序大小和指令帶寬,換取了簡單和低功耗的硬件實現。但如果事情就這樣發展下去,為了提升性能,CISC的處理器將越來越大,而RISC需要的內存帶寬則會突破天際,這都是受到技術限制的。所以進十多年來,關於CISC和RISC的區分已經慢慢的在模糊,例如自P6體系(即Pentium Pro)以來,作為CISC代表的X86架構引入了微碼概念,與此對應的,處理器內部也增加了所謂的譯碼器,負責將傳統的CISC指令“拆包”為更加短小的微碼(uOPs)。一條CISC指令進來以后,會被譯碼器拆分為數量不等的微碼,然后送入處理器的執行管線——這實際上可以理解為RISC內核+CISC解碼器。而RISC也引入了指令集這個就邏輯角度而言非常不精簡的東西,來增加運算性能。正常而言,一條X86指令會被拆解為2~4個uOPs,平均來看就是3個,因此同樣的指令密度下,目前X86的實際指令執行能力應該大約是ARM的3倍左右。不過不要忘了這是基於“同樣指令密度”下的一個假設,實際上X86可以達到的指令密度是十倍甚至百倍於ARM的。
最后一個需要考慮的地方就是指令集。這個東西的引入,是為了加速處理器在某些特定應用上性能而設計的,已經有了幾十年的歷史了。而實際上在目前的應用環境內,起到決定作用的很多時候是指令集而不是CPU核心。X86架構的強大,很多時候也源於指令集的強大,比如我們知道的ATOM,雖然它的X86核心非常羸弱,但是由於它支持SSE3,在很多時候性能甚至可以超過核心性能遠遠強大於它的Pentium M,這就是指令集的威力。目前X86指令集已經從MMX,發展到了SSE,AVX,而ARM依然還只有簡單而基礎的NEON。它們之間不成比例的差距造成了實際應用中成百上千倍的性能落差,例如即便是現今最強大的ARM內核依然還在為軟解1080p H.264而奮斗,但一顆普通的中端Core i處理器卻可以用接近十倍播放速度的速度去壓縮1080p H.264視頻。至少在這點上,說PC處理器的性能百倍於ARM是無可辯駁的,而實際中這樣的例子比比皆是。這也是為什么我在之前說平均下來ARM只有X86幾十分之一的性能的原因。
打了這么多字,其實就是為了說明一點,雖然現在ARM很強大,但它距離X86還是非常遙遠,並沒有因為這幾年的進步而縮短,實際上反而在被更快的拉大。畢竟它們設計的出發點不一樣,因此根本不具備多少可比性,X86無法做到ARM的功耗,而ARM也無法做到X86的性能。這也是為什么ATOM一直以來都不成功的原因所在——Intel試圖用自己的短處去和別人的長處對抗,結果自然是不太好的,要不是Intel擁有這個星球上最先進的半導體工藝,ATOM根本都不可能出現。而ARM如果嘗試去和X86拼性能,那結果自然也好不到哪兒去,原因剛剛也解釋過了。不過這也不意味着ARM以后就只能占據低端,畢竟任何架構都有其優點,一旦有應用針對其進行優化,那么就可以揚長避短。X86的繁榮也正是因為整個世界的資源都針對它進行了優化所致。只要能為ARM找到合適的應用與適合的領域,未來ARM也未必不可以進入更高的層次。

 

 

分析二:

ARM vs. x86 不是一個技術問題,而是一個商業問題。為什么這么說呢?且聽我細細分解:

首先,「x86 比 ARM 功耗高」這一點,在事實上已經不再成立了,具體的數據和分析可以參考 [1]。文章比較長,數據也很多,如果沒空看也沒關系,看看最后一頁的這張表就行了:


這里比較的是兩個平板設備:采用 NVIDIA Tegra 3 (40nm ARM 處理器) 的 Microsoft Surface RT 平板電腦和采用 Intel Clover Trail Atom (32nm x86 處理器) 的 Acer W510 平板電腦。可以看到,每一個測試項目中 Atom 的功耗都比 Tegra 3 低不少。這還不是最要命的,更要命的是 Atom 的性能比 Tegra 3 高,也就是說 Atom 可以在更短的時間內完成同樣的任務然后進入低功耗休眠狀態以節省電力,而且在休眠狀態下 Atom 的功耗也只有 Tegra 3 的差不多一半。

 

當然,Atom 並不能完全代表 x86 處理器,Tegra 3 也只是諸多 ARM 處理器中比較費電的一款,但這個例子的教育意義在於它打破了傳統上認為「ARM 比 x86 省電」的迷思:沒錯,在對性能要求不高的情況下,ARM 的確比 x86 省電,因為 ARM 天生就是為低功耗這一目標打造的;但隨着應用的不斷深入,人們對移動設備的性能要求越來越高,目前在高端平板【或者說普通筆記本替代品】這個尺度的應用上以 Atom 為代表的 x86 處理器已經具有相當的功耗優勢。假以時日,在給定性能基礎上 x86 做到比 ARM 功耗更低並不存在太大技術上的障礙。

其次,處理器功耗只是整個設備功耗的一部分,甚至不是最主要的部分,特別是在觸屏移動設備上還有屏幕、無線通訊模塊這樣的耗能大戶。比如從上面那張表可以看出,處理器的功耗占總功耗的比例,在絕大多數情況下都不超過 20%,實際使用場合下的功耗占比更是會低於 10%【處理器大部分時候在休眠】。技術的進步可以相對快速的降低處理器的功耗,但由於物理規律的限制【比如屏幕始終需要維持足夠的亮度、無線通訊始終是需要發射足夠強的電磁波】,設備上的其他耗能大戶功耗降低的幅度要小得多。這就意味着單純削減處理器功耗以延長續航時間的邊際效用會越來越小,到一定程度后對整個設備的續航時間的影響變得微乎其微、花大成本提高處理器功耗的回報太低以至於不經濟。Intel 的下一代平台 Haswell 之所以要強調全平台的低功耗也部分是出於這個原因。當然目前我們還沒有到那個時候,現在還不用操心這個,但要記住這一點。

————我是技術/商業分割線————

好了,如果現在你和我一樣相信 Intel 有能力在功耗和性能上都戰勝 ARM,為什么現在絕大部分移動設備采用的是 ARM 而不是 x86 處理器呢?或者說為什么 Intel 會在移動市場上如此「失敗」呢?

因為 ARM 代表的產業模式對於 Intel 而言是一場商業災難。

Intel 這么多年習慣的模式是生產制造幾十、幾百美元的處理器,在這個價位上的生產制造毛利率高得嚇人。而正是豐厚的毛利率使得 Intel 敢於付出高昂的代價研發下一代處理器技術和生產線制程,從而保持領先競爭對手至少一個代際的技術優勢。比如現在 Intel 的主流 Core 系列的制程是 22nm,同時期的 ARM 還處於 40nm 到 32nm 或者 32nm 到 28nm 的過渡階段,而 Intel 已經在新建 14nm 的生產線了。

反觀一片 ARM 處理器才賣幾美元,利潤率微薄,即便出貨量大不少【不要忘了出貨量和生產線投入之間的准線性關系】,卻也不能滿足 Intel 這樣的巨鱷【巨餓?XD】的胃口,更不能讓它保持目前的「高研發/高毛利相互驅動」的商業模式。不玩自家的游戲規則,Intel 淪為二三流廠商那是分分鍾可能發生的危險。Intel 管理層不希望看到這個未來,Intel 的股東們更不希望。

另外,移動 SoC 市場中公司之間的合作模式也不適合 Intel。為了節省制造成本和降低功耗,移動 SoC 經常需要集成多家廠商的 IP 塊於一片上,那么兩個問題就隨之而來了:1) Intel 會不會授權自己的 IP 塊給其他廠商,比如蘋果?這可不是 Intel 擅長的,因為授權設計的收入比銷售最終產品的收入要低得多;2) 最終生產的時候用誰的生產線?Intel 可不會白白的讓出自己投入巨資研發制造的最新制程的生產線給別人用;就算 Intel 願意,別人也不見得用得起,畢竟有低毛利率的限制。而 ARM 則沒有這些顧慮:ARM 設計和生產是分離的,設計的 IP 塊可以單獨授權給各家廠商自行定制整合,而制造采用的是比較成熟的生產線,成本低、可選廠家也多。

這就是為什么 Intel 在移動領域涉足很晚也很勉強、為什么功耗低、單價更低的 Atom 處理器始終比最先進的 Core 處理器落后一兩代的原因。非不能也,乃不為也;因何不為?利益使然爾!

然而市場現實是台式機、筆記本的出貨量穩步下降,Intel 寄予厚望的 Ultrabook 不成氣候也沒能讓筆記本市場死灰復燃;與此同時,移動設備份額穩步飆升,ARM 處理器的性能在多數場合都能滿足需求【good enough】,甚至有威脅 Intel 在服務器市場的潛能。這一切都迫使 Intel 不得不面對 ARM 這個難題;而這個難題的主要症結不在於技術,而在於 Intel 能不能否定自我、推倒重來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM