為什麼同樣主頻下,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-1

INC/DEC執行周期是1

MOV執行周期是0.5-1

PUSH/POP的執行周期是1.5

CALL/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將會往激進的多發射方向發展,因此對分支預測的研究會很有用 —— 他們賭對了。

  1. 多發射(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 的溫度有沒有一個上限值?

TAG:ARM | x86 | 中央處理器CPU |