ARM和X86功耗差别的深层原因探讨

ARM和X86功耗的差别一直是个很热的话题.ARM可以做的很低,甚至1瓦都不到.而X86服务器的芯片可以达到100-200瓦,就算是嵌入式处理器Atom系列也需要几瓦.很多人说这是指令集的关系.ARM采用精简指令集,X86采用复杂指令集,前者每条功能简单,单挑指令耗电低.而后者每条指令复杂,单个指令耗电高.但是这种解释很模糊.如果大家都做同样的事情,完成一个大功能,精简指令集需要指令较多,而复杂指令集需要指令少,加起来到底谁耗电多呢.还有,现在处理器普遍采用微指令,大的指令会被拆分成更小的指令,以达到更高的流水线效率.简单指令集的单条微指令和复杂指令集的单条微指令相比的话,情况就更复杂.我手头没有关于比较的具体数据,但是至少前文所列出关于功耗和指令集相关的解释不是很有说服力.

今天碰到一个资深人士,总算找到一个比较合理的解释.

首先,功耗和工艺制程相关. ARM的处理器,不管是哪家,主要是靠台积电等专业制造商生产的.而Intel的是自己的工厂制造的.一般来说后者比前者的工艺领先一代,也就是2-3年.如果同样的设计,造出来的处理器因该是Intel的更紧凑,比如一个是22纳米,一个是28纳米,同样功能肯定是22纳米的耗电更少.

那为什么反而ARM的比X86耗电少得多呢.这就和另外一个因素相关了,那就是设计.

设计又分为前端和后端设计,前端设计体现了处理器的构架,精简指令集和复杂指令集的区别是通过前端设计体现的.后端设计处理电压,时钟等问题,是耗电的直接因素.

先说下后端怎么影响耗电的.我们都学过,晶体管耗电主要两个原因,一个是动态功耗,一个是漏电功耗.动态功耗是指晶体管在输入电压切换的时候产生的耗电,而所有的逻辑功能的0/1切换,归根结底都是时钟信号的切换.如果时钟信号保持不变,那么这部分的功耗就为0.这就是所谓的门控时钟(Clock Gating).而漏电功耗可以通过关掉某个模块的电源来控制(Power Gating).当然,其中任何一项都会使得时钟和电源所控制的模块无法工作.他们的区别在于,门控时钟的恢复时间较短,而电源控制的时间较长.此外,如果条单条指令使用多个模块的功能,在恢复功能的时候,并不是最慢的那个模块的时间,而可能是几个模块时间相加,因为这牵涉到一个上电次序(Power Sequence)的问题,也就是恢复工作时候模块间是有先后次序的,不遵照这个次序,就无法恢复.而遵照这个次序,就会使得总恢复时间很长.所以在后端这块,可以得到一个结论,为了省电,可以关闭一些暂时不会用到的处理器模块.但是也不能轻易的关闭,否则一旦需要,恢复的话会让完成某个指令的时间会很长,总体性能显然降低.此外,子模块的门控时钟和电源开关通常是设计电路时就决定的,对于操作系统是透明的,无法通过软件来优化.

再来看前端.ARM的处理器有个特点,就是乱序执行能力不如X86.换句话说,就是用户在使用电脑的时候,他的操作是随机的,无法预测的,造成了指令也无法预测.X86为了增强对这种情况下的处理能力,加强了乱序指令的执行.此外,X86还增强了单核的多线程能力.这样做的缺点就是,无法很有效的关闭和恢复处理器子模块,因为一旦关闭,恢复起来就很慢,从而造成低性能.为了保持高性能,就不得不让大部分的模块都保持开启, 并且时钟也保持切换.这样做的直接后果就是耗电高.而ARM的指令强在确定次序的执行,并且依靠多核而不是单核多线程来执行.这样容易保持子模块和时钟信号的关闭,显然就更省电.

此外,在操作系统这个级别,个人电脑上通常会开很多线程,而移动平台通常会做优化,只保持必要的线程.这样使得耗电差距进一步加大.当然,如果X86用在移动平台,肯定也会因为线程少而省电.凌动系列(ATOM)专门为这些特性做了优化,在一定程度上降低乱序执行和多线程的处理能力,从而达到省电.

此外,现在移动处理器都是片上系统(SoC)结构,也就是说,处理器之外,图形,视频,音频,网络等功能都在一个芯片里.这些模块的打开与关闭就容易预测的多,并且可以通过软件来控制.这样,整体功耗就更加取决于软件和制造工艺而不是处理机结构.在这点上,X86的处理器占优势,因为Intel的工艺有很大优势,而软件优化只要去做肯定就可以做到.

以上原因我觉得较好的解释了ARM和X86的功耗差别.

现在看看趋势.

Intel现在积极推进晶体管工艺革新,简化前端设计,所以功耗劣势会逐步减低.再有,随着工艺的进一步发展,以后的移动设备主要功耗会转移到外部设备而非处理器.比如内存,显示屏,通讯模块等.这样,性能会变的越来越重要.不过Intel有个难以跨越的鸿沟,就是成本,为了保持高利润,就算可以降低也不会愿意降低.等到不得不靠降成本维生的那一天,说明技术优势不复存在,公司也快走到头了,只能转型依靠服务和平台来挣钱.这点可以参照思科和华为的竞争史.大胆预测,如果2013之后人类仍旧存在,移动处理器会逐渐分为两个市场,低端ARM把持,高端Intel独占.

转自CSDN移动平台-开发平台论坛

ARM和X86功耗差别的深层原因探讨的更多相关文章

  1. ARM与X86 CPU架构对比区别

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是  CISC要用最少的机器语言 ...

  2. ARM和X86架构

    重温下CPU是什么 中央处理单元(CPU)主要由运算器.控制器.寄存器三部分组成.运算器起着运算的作用,控制器负责发出CPU每条指令所需要的信息,寄存器保存运算或者指令的一些临时文件以保证更高的速度. ...

  3. 【转】深入了解CPU两大架构ARM与X86

    来自:https://blog.csdn.net/u014641018/article/details/53484565 重温下CPU是什么 中央处理单元(CPU)主要由运算器.控制器.寄存器三部分组 ...

  4. 【转】arm和x86的区别

    来自: https://blog.csdn.net/u012513972/article/details/78349192/ 信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是 ...

  5. ARM与X86架构的对决[整编]

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是  CISC要用最少的机器语言 ...

  6. 【转】普及一下ARM和X86的区别,鉴于ATOM已经入驻手机,AMD也会…

    这里简单来谈一下,ARM和X86之间为什么不太具有可比性的问题.要搞清楚这个问题首先要明白什么是架构,之前也有很多人提到了架构不同,但架构是什么意思?它是一个比较抽象的概念,不太容易用几句话就解释清楚 ...

  7. ARM与x86 CPU架构对比

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是CISC要用最少的机器语言指令 ...

  8. ARM与X86 CPU架构区别

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是 CISC要用最少的机器语言指 ...

  9. ARM和x86的区别

    CPU的指令集从主流的体系结构上分为精简指令集(RISC)和复杂指令集(CISC).嵌入式系统中的主流处理器——ARM处理器,所使用的就是精简指 令集.而桌面领域的处理器大部分使用的是复杂指令集,比如 ...

随机推荐

  1. php版权重轮询调度算法

    2013-09-25 <?php class WeightedRoundRobin { private static $_weightArray = array(); private stati ...

  2. ListView.setOnItemClickListener无效

    如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效, 事件会被子View捕获到,Li ...

  3. ListView中分割线的设置

    1.在布局文件中ListView元素中通过属性设置 android:divider="#fffff" 分割线颜色 android:dividerHeight="1px&q ...

  4. UESTC_棋盘游戏 CDOJ 578

    最近昀昀学习到了一种新的棋盘游戏,这是一个在一个N×N的格子棋盘上去搞M个棋子的游戏,游戏的规则有下列几条: 棋盘上有且仅有一个出口 开始时没有哪个棋子在出口,而且所有棋子都不相邻(这里的相邻是指上下 ...

  5. OC基础17:归档

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.归档即是用某种格式把一个或多个对象保存 ...

  6. 关于iconfont

    1. 从FONT-FACE说起 要想了解iconfont,得从一个新的css3规则说起.css3中,新增了一种样式规则,@font-face,这个规则可以用来引入自定义的字体,到客户端.以前,我们的字 ...

  7. Entity Framework with MySQL

    Get Entity Framework: http://msdn.microsoft.com/en-us/data/ee712906 Entity Framework 6 Tools for Vis ...

  8. Android多项目依赖在Eclipse中无法关联源代码的问题解决 Ctril 点不进去的解决方法

    1. 使用快捷键:Ctrl+shift+R,在弹出框中输入.classpath  找到被作为library引入的那个.classpath文件. 2.将kind="src" path ...

  9. js获取昨天日期

    刚刚js做项目,遇到需要获取昨天日期的问题,网上找了下答案,感觉网上的答案都不太严谨,自己写了个,凑合能用吧,忘大神们抛砖指教. <script type="text/javascri ...

  10. SQL SERVER中如何格式化日期(转)

    原文地址:http://blog.sina.com.cn/s/blog_95cfa64601018obo.html   1. SELECT convert(varchar, getdate(), 10 ...