為什麼同樣主頻下,x86 CPU 的處理能力比 ARM CPU 強大?
樓主只是有一個問題沒搞明白:主頻與性能的關係,樓上幾乎所有人都犯了一個錯誤:單純的主頻與性能的比較來說,與CISC/RISC架構是無關的。
主頻是什麼?主頻是CPU的一秒鐘的時鐘周期,而樓主的最需要糾正的觀點是:主頻不等於一秒鐘執行的指令個數。
甚至在同一個廠商的產品中,主頻的高低都不是執行指令速度的衡量指標。
主頻只是影響性能的指標但不是性能的決定性指標。
下面是技術細節的分析:
關於intel CPU里每條指令的執行周期,可以參考這個官方文檔:
Intel速 64 and IA-32 Architectures Optimization Reference Manual在Appendix C里有詳細的描述,我這裡截取部分:
(註:表中列出的應該是最新的CPU架構下的性能)
ADD/SUB執行周期是0.5-1INC/DEC執行周期是1MOV執行周期是0.5-1PUSH/POP的執行周期是1.5CALL/RET是5個周期浮點指令的周期一般都是3-5左右
乘除指令周期都很長,一般都在10以上。也就是說一個2G主頻的intel CPU(估計要core2和以後的架構),一秒鐘可以執行2G條INC指令,並且是在沒有啟動流水線等任何優化的情況下,而如果採取流水線並發的話(intel指令集里的指令轉化為微指令以後都是可流水化的,自己去讀手冊),可以把性能再提高3倍,也就是6GHz。
---------------intel和arm的分割線---------------
再看ARM架構下,ARM的資料我找不完整,以ARM7為例,ARM7是三級流水,加減運算都是1個周期(吞吐率是三倍,與intel相同),LDR(相當於intel里的MOV)則需要2-8個周期。
所以,即使是同等主頻下,intel的某些指令是比ARM還要快的(當然,有些指令也會更慢)---------------RISC和CISC的爭論---------------
既然有人提了,那麼就說說這個問題:
RISC-精簡指令集的一個特點是指令等長,32位CPU都是32位的指令;
CISC-複雜指令集的區別就是一個指令可能是8位,16位,24位,32位,40位……甚至有超長指令的情況。RISC的CPU設計更簡單,因為指令是等長的,而CISC指令不等長,CPU更複雜。
但是RISC有一個可以說是很嚴重的缺陷,處理常數的立即數和地址的時候代價比CISC要高。
寫一個最簡單的C函數:
int abcd()
{ register x = 0x12345678; return x;}編譯成intel x86彙編是:
.text:080035D2 push ebp
.text:080035D3 mov ebp, esp
.text:080035D5 mov eax, 12345678h.text:080035DA pop ebp.text:080035DB retn編譯成ARM CORTEX-A7的彙編是:
.text:0000429C MOV R12, SP
.text:000042A0 STMFD SP!, {R11,R12,LR,PC}.text:000042A4 SUB R11, R12, #4.text:000042A8 TST R5, #0x7800000.text:000042AC CMP R1, #0x40000003.text:000042B0 MOV R0, R3
.text:000042B4 LDMFD SP, {R11,SP,PC}因為ARM一條指令是32位,所以ARM無法一次性載入一個32位立即數,至少要分成兩部來做,這樣就比x86彙編慢,同樣,對於一個32位的偏移地址也是一樣,雖然ARM寄存器多,但在多數單條指令上,ARM性能不佔優勢。
---------------總結---------------
1、主頻跟指令速度無關,指令執行個數=主頻/指令時鐘周期;2、ARM在時鐘上不佔優勢,甚至有些處於劣勢;3、ARM指令在編譯後,指令個數比intel的更多。所以以上三條就可以看出來,同主頻下,單位時間裡ARM執行的有效指令都比intel的要少,所以處理能力上必然有差異。至於緩存什麼的,intel做的比ARM稍微好點,就更增加了二者的差距。當然了,我不是說ARM的不好,ARM架構在省電方面做的很強。-完-
很多人在回答當中提到了ISA的區別對兩者性能(題主並未給出處理能力或者說性能的定義)的影響,如果問題涉及到了RISC與CISC的這種對比,我建議一篇文章,HPCA2013上的,「Power Struggles: Revisiting the
RISC vs. CISC Debate on Contemporary ARM and x86 Architectures」,我覺得對這個問題有一定的參考意義,對這個問題,文章的觀點認為:X86的設計目的是Performance-optimized,所以X86有最好的性能(以MIPS而言),這一切與指令集是RISC還是CISC無關。
最終體現的快和慢不是由主頻決定的,它還包括,但不限於:
- On-die cache 的大小和效率;
- Out-of-order, in-order 策略;
- 流水線長度;
- 運算器件的冗餘和利用效率(hyper-thread);
- Vectorization 的支持和編譯器優化。
說個有意思的。有家既自己做編譯器,又做手機操作系統,但是不做 CPU 的公司(禁止猜想),程序跑得死慢。招見 CPU 的支持。CPU 廠家的人來了,接上調試設備一分鐘之後說,您家的編譯器優化太好了,幾條指令一個長 jmp 把 cache 搞失效,然後大笑出門。
處理器簡單比較的參數先後分別是:架構/物理核心數/線程數/主頻/各級緩存.etc架構不同,指令集不同,比主頻沒意義,因為同樣一個運算任務需要的時鐘數不同。就好比汽車發動機轉速快,不代表跑得快。
這個取決於微架構的選擇:
1. 這個晶元是否是一個超標量的CPU;
2. 是否支持亂序執行;3. 分支預測等有多深有多大;
4. 你的L1 cache有多大,有多少way;5. L2、L3的大小最後,性能都是有代價的@馮東 說的是對的,但我要補充它忽略的幾個X86(intel)的巨大優勢。恕我直言,但其它人說得都是比較表面。
(這個答案只是拋磚引玉也好,什麼都好。業餘也確實是,我不是做IP設計的,有問題請明確指出)。
update:30/12/2013=============================================
這個答案並不完美和準確,因時間關係,我暫時來不及重新整理。請務必看評論,但是很高興能吸引到跟多的真知。我要表達的一個核心觀點是:任何技術,都無法一劍封喉。處理器設計是一個極其龐大的系統工程。我下面要說的這幾個技術,是相輔相成的,並不能割裂開來看,因為這些技術,是對處理在進行指令執行時,慢下來的地方進行逐一加速的方法。- cache管理能力
cache管理能力x86之所以強大,不如說是intel之所以強大,是因為intel投入了大量的人力物力在這方面進行研究和創新。這一點,可能是AMD永遠只能望其項背的。
AMD的CPU設計,大多依賴與開發套件自動生成,而intel,則是工程師進行手工調優。(這句話的出處我還要找一下來源)換句現在流行的話來說,intel在設計CPU時,有一顆工匠的心。cache管理能力有多重要?cache是連接CPU於內存,其它元器件的最快的設備,幾乎是所有數據的畢竟的通道。這樣想,在一個極其繁忙的十字路口,是一個優秀的交警的作用大,還是巨大的交通燈的作用大?cache管理能力的也直接影響了下面的分支預測,因為分支預測的實際作用,還要依賴於cache管理的效能來決定。- 分支預測能力
x86處理的實際處理分2層,一層是CISC,另外一層是從奔騰/pro開始引入的CISC轉RISC,即重新對指令集進行分解和解碼的過程(這裡描述對於很了解的人可能不是很準確,但是限於篇幅,只能簡化地形容了)。X86很早就不是單純的CISC,它吸收了很多其他CPU的優點。
解碼就之後就是執行,實際指令執行之前,CPU就乾等著嗎?大段的指令在長長的流水線上,被解碼之後,CPU另外一個叫分支預測的單元開始判斷哪些指令可以提前執行,哪些可以並行執行,哪些指令需要的數據可以提前提取,哪些指令執行的結果目標的存放位置等等。
正式由於強大的cache管理能力,所以分支預測的準確度,和執行速度,都可以先人一步。intel說它的準確度可以高達90%以上,也就是說,CPU提前知道了操作系統下一步需要完成的動作。ARM這些時間的頻率突然變高,是因為流水線的級數增加的提高,這個事情intel在P3-P4的階段也做過。當然,這一次ARM沒有變態地讓流水線增加到31級。
ARM11開始提高了流水線,也引入了分支預測,但是以上這些技術精度和深度都是現在ARM的設計廠商現在所不具備的東西。所以同頻的情況下,x86要優於ARM。by@破布先說分支預測。分支預測不是在解碼之後,而是在整個流水線的幾乎最前端,也就是取指令的地方就開始做了,那個地方一般放著BTB和第一級分支預測器,解碼階段的流水線會放著第二級預測器,現在一般是這種兩級結構,另外是多層複合結構,也就是間接跳轉分支預測,返回棧預測……多種預測器複合起來,由BTB的分支種類bit來指示使用哪個預測器,或者是用錦標賽分支預測器的做法,用一個2bit計數器來判斷哪個預測器最近結果最准。分支預測器裡面通常都需要鋪開非常大的記錄表(參見ISCA 91~93 Yale N.Patt組發的論文),這個記錄表的大小直接關係到預測準確率,x86處理器的面積和功耗預算都遠高過ARM,面對這些需要鋪表的地方通常可以比較大手大腳,ARM就不行,這也是一個原因。
分支預測只預測指令流走向,不會預測【哪些可以並行執行,哪些指令需要的數據可以提前提取,哪些指令執行的結果目標的存放位置】,這些是交給亂序執行來做的。分支預測和多發射、亂序執行關係很緊密,因為亂序多發射以後碰到的指令流分叉會很多,分支預測越強,分支的干擾越小。80年代~90年代中後期對分支預測的狂熱研究的出發點就是,未來的CPU將會往激進的多發射方向發展,因此對分支預測的研究會很有用 —— 他們賭對了。
- 多發射(multi-issue)
待補充。。。。。。
其實這一切,也可以理解為Intel對CPU的設計水平要優於採用ARM指令集的廠商。
換句話說,有一天,Intel即使要改用ARM指令集,也非常可能做得比現在的廠商要好。
因為這不是指令集,不是標準的規範,不是一份paper,每個公司都可以到照方抓藥就完事的。它是一個團隊,對於處理器技術的深入研究,所做的細微的,精確的創新。額 感覺主要差在指令所花時鐘周期ARM較長,沒有那麼多SIMD,每個核心沒有CPU那麼多管線/超標量沒有X86那麼強....緩存,亂序執行弱還有很多原因.....
如果單單比較主頻的話,也不能得出這個結論。例子很簡單,都是1.3GHz單核,我相信現在大部分的ARM處理器,還是可以秒殺我家老電腦的銅礦和圖拉丁的賽揚的。
如果是同樣的指令執行速度(單位MIPS,百萬指令每秒)的話,那麼是很有可能的,這個是來自於CISC(複雜指令集計算機,以x86為代表)和RISC(精簡指令集計算機,以ARM、PowerPC為代表)的區別。
計算機需要完成許多功能,這些功能可以通過編程(軟體方式)實現,也可以通過指令(硬體方式)實現,而顯然,通過硬體方式實現顯然是會比軟體方式要快的。所以在CISC計算機中,會集成有大量的指令集,這些指令都可以完成複雜的功能,比如我們常用的x86的CPU,裡面包含了許多多媒體指令,可以提高計算機處理多媒體信息的速度。
不過,指令集數量的增加也是使得電路的複雜度大大提高,解碼部件也越來越複雜。而實驗表明,計算機有80%的時間在使用20%的指令集,於是就有了RISC的想法。通過簡化指令集,提供CPU處理各條指令的速度,以便高速完成大部分任務,而對於少部分的任務,可以多花費一些時間的代價,通過軟體方式去完成。
所以,因為CISC的指令比較複雜,完成的功能比較多,每一條指令(平均)完成的計算量,是CISC比較多,即相同的指令執行速度的情況下,CISC勝於RISC。而主頻,只有在相同架構下才能和速度有關係,不同架構下直接比較主頻意義不大。因為x86是CISC,ARM是RISC,同樣一個較為複雜的功能(例如XLAT位元組查錶轉換、IDIV整數除法,或者MMX、SSE、3DNow等),x86有專門的邏輯電路只用一條指令在幾個周期之內就完成了,ARM得用很多條指令在多個周期內完成。
此外,x86還得處理不同指令、數據之間的對齊問題,會花費較多的時間;而ARM指令都是32位對齊的。當然,這取決於大部分時間進行何種計算。
如果非要在同頻率條件下比較,現在的ARM是不是需要和386~586時代的x86對比?就像你問孫悟空和變形金剛、關羽和魯智深誰更厲害的問題類似。
但是,如果都是以大量簡單的邏輯、加或乘運算為主,再考慮功率問題,ARM完勝。為什麼你們不說晶體管數量。
沒有最好的只有最合適的。ARM的宗旨是在能夠滿足需要的情況下功耗要低,晶元成本(面積)也要最低。最好的評估方法是在某個場景約束下(比如功耗要求,散熱要求,晶元面積等)性能最佳,也就是PPA
ARM是RISC指令集的CPU,而x86是CISC指令集的。一些複雜的運算x86可能一下能搞定,ARM就要用更簡單的運算操作搞很多次。當然本質上,x86需要有更多的功能單元支持更加複雜的指令集。
個人以為同晶體管數量級的CPU做比較靠譜,您覺得ARM作為一款移動CPU的指令集,它可能擁有桌面PC X86平台指令集那樣的複雜程度嗎?
我只是覺得電腦都是X86的手機都是ARM的所以X86的好
時國懷 說的不錯主頻不等於一秒鐘執行的指令個數。..你先弄清楚 頻率的單位是Hz,你可以想像Hz是能量.一個技能(指令)能量越高,(執行越快)
大的方向先不談 就先說說你手機能維持多久的滿載?arm中Apple算最強的吧 主頻才多少?能維持多少分鐘?更不用說其它一緩二緩都查不到高通mtk等了 更何況無風扇pc也不見得比arm強
同晶體管數下(小規模低功耗範圍) arm比x86強大
不做專業分析,通俗來講本質是指令集的不同。比如同主頻的arm和x86,arm採用的的精簡指令集而x86是複雜指令集,同主頻可以認為單位時間執行相同條數的指令,比如10條,重點來了,可能你ram的SICS指令集的這10條指令完成的計算功能在CISC指令集中一條指令就完成了!這就已經有10倍的差距了。
更本質一點的話,SISC的一條指令的邏輯處理電路要遠少於CISC的邏輯電路。arm其實還不錯啦,cpu不只是主頻,還有電壓、運算單元數量等等決定主頻性能
推薦閱讀:
※為什麼8086CPU不支持將數據直接送入段寄存器的操作?
※CPU 的外頻是什麼,所謂的倍頻是如何實現的?
※如何評價國產處理器——飛騰公司的「火星」?
※處理器是如何實現對程序的fetch的?分支預測是在前端解碼後就進行的嗎?
※CPU 的溫度有沒有一個上限值?