反对 的高赞答。x86的兼容性负担是很重没错,但这并非ARM省电的原因。
如果生产工艺相同,频率相同的两个CPU,功耗的由参与计算的晶体管数量决定。今天的CPU,以Intel的Skylake架构为例,单个核心(不含LLC)晶体管数量大概在150M左右,而x86的几个里程碑产品,晶体管数量分别是:
- 8086:29K[1]
- 80386:275K[2]
- P5:3.1M-4.5M(P55C)[3]
所谓的兼容性负担,也就是早期使用现在几乎不用的指令,基本是P5之前已经出现,而且386之前占大部分,整个CPU才这么点晶体管,这几个指令才用了几个?另外80386以及之前的CPU都是不带FPU的,实现FPU消耗的晶体管更多。今天的CPU,整数指令的执行单元消耗的晶体管,大概占不到2%,具体到这些因为兼容性而保留下来的指令的实现部分,真没有几个。
此外今天CPU的功耗控制粒度非常细,每个指令的实现电路的晶体管,在没有对应指令执行时消耗的功耗完全可以忽略。从这个角度来说,这些老旧指令的实现并不会影响CPU功耗,即便在执行对应指令时,因为都是早期的16位指令和极个别32位指令,功耗比流行的64位整数/浮点指令、128-512位的SIMD指令更低。
正面回答一下题目:
ARM架构不一定比x86省电。
严格来说,ARM和x86都是指令集架构,说白了就是硬件和软件之间的接口定义,本身并没有功耗一说。而即便是具体实现这些指令集的CPU微架构,不同的微架构CPU的功耗,或者相同微架构但使用不同生产工艺生产的CPU,甚至同一个CPU设定了不同的工作频率,功耗都是不同的。一定要说ARM和x86两种指令集对于功耗的影响,也就是x86是变长指令,解码单元的实现需要消耗更多的晶体管而已。但反过来,因为x86是变长指令,指令更紧凑,大量指令吞吐时,FETCH单元的负载要比ARM低一些。
x86和ARM相对比较接近的两个微架构,是Cortex-A77和AMD的Zen2,虽然细节上有很多差异,但都是取指、译码、调度、执行、回写几个大模块,最核心的执行单元部分都是整数、浮点、LS分离,整数部分都是4ALU,浮点都是2个SIMD单元。
同样是台积电7nm工艺,AMD的3990X,64核心满载,频率3.46GHz。Core耗电197W,平均单个核心3.078W;整体耗电279W,平均单个核心4.36W[4]。而2.845GHz的骁龙865,跑单线程的SPECfp2006,功耗是3.06W[5]。按照功耗和频率的立方成正比关系,假设3990X和865一样以2.845GHz运行,3990X单个核心功耗1.711W,整体平均2.423W。这样算下来x86的3990比ARM的865更省电。性能方面,如果直接按照频率和SPEC2006得分计算的话,2.845GHz的865略强于单核睿频最高4.7GHz的同样是Zen2架构的3950X,大概是整数高10%,浮点高5%,但功耗比3990X高25%。
当然,这样计算相当不严谨,因为除了核心外的部分,3990X是四通道DDR4,64个核心共享;而865跑SPEC是单个核心独占LPDDR5。但反过来,3990X的设计还需要考虑核心睿频到4.35GHz时候运行,使用了19级流水线;而865不超过3GHz,只用了13级流水线。
事实上,ARM在移动端因为电池容量无法做到高频,服务器端不少场合更看重Throughput性能也可以用低主频换取更低的功耗来容纳更多的核心;而x86大量的桌面应用更看重响应时间而不得不牺牲功耗来换取高频,所以给大家的印象就是x86更耗电而已。这是生态问题,而不是指令集架构问题。
此外,ARM天才的大小核设计,在处理一些简单任务以及待机时功耗更低,对于使用电池的移动设备来说可以大幅延长续航时间,这才是微软Surface X使用ARM CPU最重要的原因——也因此Intel也在学习模仿,已经流出的消息中LakeField、Alder Lake都是大小核搭配的架构。
参考
- ^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