【知乎】 為啥arm架構(gòu)比x86 x64省電?
?為啥arm架構(gòu)比x86 x64省電?

木頭龍
開了個新專欄,收錄些老回答



GreatPie、dumplingpro、嗜金水狙等人贊同
反對?
@昌維
?的高贊答。x86的兼容性負(fù)擔(dān)是很重沒錯,但這并非ARM省電的原因。如果生產(chǎn)工藝相同,頻率相同的兩個CPU,功耗的由參與計算的晶體管數(shù)量決定。今天的CPU,以Intel的Skylake架構(gòu)為例,單個核心(不含LLC)晶體管數(shù)量大概在150M左右,而x86的幾個里程碑產(chǎn)品,晶體管數(shù)量分別是:
8086:29K[1]
80386:275K[2]
P5:3.1M-4.5M(P55C)[3]
所謂的兼容性負(fù)擔(dān),也就是早期使用現(xiàn)在幾乎不用的指令,基本是P5之前已經(jīng)出現(xiàn),而且386之前占大部分,整個CPU才這么點晶體管,這幾個指令才用了幾個?另外80386以及之前的CPU都是不帶FPU的,實現(xiàn)FPU消耗的晶體管更多。今天的CPU,整數(shù)指令的執(zhí)行單元消耗的晶體管,大概占不到2%,具體到這些因為兼容性而保留下來的指令的實現(xiàn)部分,真沒有幾個。
此外今天CPU的功耗控制粒度非常細(xì),每個指令的實現(xiàn)電路的晶體管,在沒有對應(yīng)指令執(zhí)行時消耗的功耗完全可以忽略。從這個角度來說,這些老舊指令的實現(xiàn)并不會影響CPU功耗,即便在執(zhí)行對應(yīng)指令時,因為都是早期的16位指令和極個別32位指令,功耗比流行的64位整數(shù)/浮點指令、128-512位的SIMD指令更低。
正面回答一下題目:
ARM架構(gòu)不一定比x86省電。
嚴(yán)格來說,ARM和x86都是指令集架構(gòu),說白了就是硬件和軟件之間的接口定義,本身并沒有功耗一說。而即便是具體實現(xiàn)這些指令集的CPU微架構(gòu),不同的微架構(gòu)CPU的功耗,或者相同微架構(gòu)但使用不同生產(chǎn)工藝生產(chǎn)的CPU,甚至同一個CPU設(shè)定了不同的工作頻率,功耗都是不同的。一定要說ARM和x86兩種指令集對于功耗的影響,也就是x86是變長指令,解碼單元的實現(xiàn)需要消耗更多的晶體管而已。但反過來,因為x86是變長指令,指令更緊湊,大量指令吞吐時,F(xiàn)ETCH單元的負(fù)載要比ARM低一些。
x86和ARM相對比較接近的兩個微架構(gòu),是Cortex-A77和AMD的Zen2,雖然細(xì)節(jié)上有很多差異,但都是取指、譯碼、調(diào)度、執(zhí)行、回寫幾個大模塊,最核心的執(zhí)行單元部分都是整數(shù)、浮點、LS分離,整數(shù)部分都是4ALU,浮點都是2個SIMD單元。
同樣是臺積電7nm工藝,AMD的3990X,64核心滿載,頻率3.46GHz。Core耗電197W,平均單個核心3.078W;整體耗電279W,平均單個核心4.36W[4]。而2.845GHz的驍龍865,跑單線程的SPECfp2006,功耗是3.06W[5]。按照功耗和頻率的立方成正比關(guān)系,假設(shè)3990X和865一樣以2.845GHz運行,3990X單個核心功耗1.711W,整體平均2.423W。這樣算下來x86的3990比ARM的865更省電。性能方面,如果直接按照頻率和SPEC2006得分計算的話,2.845GHz的865略強(qiáng)于單核睿頻最高4.7GHz的同樣是Zen2架構(gòu)的3950X,大概是整數(shù)高10%,浮點高5%,但功耗比3990X高25%。
當(dāng)然,這樣計算相當(dāng)不嚴(yán)謹(jǐn),因為除了核心外的部分,3990X是四通道DDR4,64個核心共享;而865跑SPEC是單個核心獨占LPDDR5。但反過來,3990X的設(shè)計還需要考慮核心睿頻到4.35GHz時候運行,使用了19級流水線;而865不超過3GHz,只用了13級流水線。



事實上,ARM在移動端因為電池容量無法做到高頻,服務(wù)器端不少場合更看重Throughput性能也可以用低主頻換取更低的功耗來容納更多的核心;而x86大量的桌面應(yīng)用更看重響應(yīng)時間而不得不犧牲功耗來換取高頻,所以給大家的印象就是x86更耗電而已。這是生態(tài)問題,而不是指令集架構(gòu)問題。
此外,ARM天才的大小核設(shè)計,在處理一些簡單任務(wù)以及待機(jī)時功耗更低,對于使用電池的移動設(shè)備來說可以大幅延長續(xù)航時間,這才是微軟Surface X使用ARM CPU最重要的原因——也因此Intel也在學(xué)習(xí)模仿,已經(jīng)流出的消息中LakeField、Alder Lake都是大小核搭配的架構(gòu)。
參考
^WiKi:Intel 8086?https://en.wikipedia.org/wiki/Intel_8086
^WiKi:Intel 80386?https://en.wikipedia.org/wiki/Intel_80386
^WiKi:P5 (microarchitecture)?https://en.wikipedia.org/wiki/P5_(microarchitecture)
^AnandTech: The 64 Core Threadripper 3990X CPU Review?https://www.anandtech.com/show/15483/amd-threadripper-3990x-review/2
^Anandtech:The Snapdragon 865 Performance Preview?https://www.anandtech.com/show/15207/the-snapdragon-865-performance-preview-setting-the-stage-for-flagship-android-2020/2
編輯于 2020-06-05 16:28