姓名:韩政
学号:16010188021
转载自:https://www.zhihu.com/question/20148756,有删节
【嵌牛导读】:在大一下学期嵌入式微处理器原理这门课程中,我们学习了arm cortexM3的架构。其中老师说到了X86与ARM架构处理器能效有很大差异从而引发探索。
【嵌牛鼻子】:架构 指令集
【嵌牛提问】:X86和ARM架构的处理器能效差异为什么会这么大?
【嵌牛正文】
ARM处理器本身定位于嵌入式平台,应付轻量级、目的单一明确的程序,现在应用在移动设备上正是得心应手。x86定位于桌面和服务器,这些平台上很多应用是计算密集型的,比如多媒体编辑、科研计算、模拟等等。因此将x86和ARM在移动环境下做对比得出“差不多”是不好的。
由于定位的不同,ARM处理器基于精简指令集(RISC)架构。指令集数量少就可以简化硬件逻辑的设计,减少晶体管数量,也就意味着低功耗。而且由于移动平台应用通常简单,程序的控制流不复杂,执行效率没有必要很高,所以流水线、分支预测等硬件逻辑都比较简单。这些都降低了晶体管总量。同时因为移动设备有电池的能源限制,ARM的电源管理是作为重要部分特别设计了的。比如移动设备的处理器在待机时通常只以极低的主频在运行,甚至可以暂时关闭闲置的核心、协处理器来降低功耗。
x86就截然不同。x86是复杂指令集(CISC)架构,存在很多机器指令,只为了高效地完成一项专门任务(比如MMX, SSE中的指令)。这就使得硬件的逻辑很复杂,晶体管数量庞大。为了高效地进行运算,x86架构有较长的流水线以达到指令级并行(ILP)。长流水线带来的一个弊端,就是当遇到分支时,如果预载入分支指令不是未来真实的分支,那么要清空整个流水,代价较高。所以x86为此还必须有复杂的分支预测机构,确保流水线的效率。再加上多级cache,支持超线程、虚拟化等等,x86的复杂度其实相当高。
硬件层面,这两种处理器的设计初衷可说是背道而驰的,目前看来,x86架构在移动计算站稳脚跟很困难,而ARM之类的RISC架构也无法在较复杂的应用中表现很出色,例如高性能计算等领域。
至于发热量和功耗,一则因为x86处理器要包含很多指令集,这用去了不少晶体管,二则因为内部逻辑比较复杂,也用去了不少晶体管。所以它从架构上讲,做到低功耗其实很困难,intel号称可以讲功耗做到数百毫瓦,但那是在CPU闲置进入C5或者C6 state的时候的功耗,相当于某些低频ARM处理器正常工作的功耗。
总结来看:
1、精简指令集就意味着更小的芯片,更少的晶体管工作。CISC相比于RISC有更多实现单一功能的晶体管结构(言外之意它们被使用的频率并不高),而这部分晶体管在不工作的时候会提供不小的静态功耗。
2、ARM在无指令处理的时候可以休眠,而X86在无指令处理时只是降低工作频率而已
3、ARM一般都有协处理器共同工作,比如GPU
网友评论