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独占.

ARM和X86功耗差别的深层原因探讨相关推荐

  1. 从CPU架构--x86架构和arm架构处理器--功耗

    目录: 1.两种cpu架构:冯洛伊曼和哈佛 2.x86架构和arm架构分析 3.x86架构和arm架构功耗探究 一.两种cpu架构: 目前主流的cpu 处理器都采用了冯洛伊曼架构或者哈佛架构,那么这和 ...

  2. 分不清ARM和X86架构,别跟我说你懂CPU!

     随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是如果你再问他知道ARM和X86架构么?这两者的区别又是什么?绝大多数的人肯定是一脸懵逼.今天小编就带你深入了解CPU的这两大架构 ...

  3. RICS-V和ARM与X86三种芯片架构分析

    早在10多年前,我们对芯片的理解是停留在IT时代,当时候主要是计算机的发展带来的芯片的发展,到了最近10年的发展,越来越多的设备开始有芯片,有操作系统,有数据存储.特别智能手机的出现,带动了移动设备的 ...

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

    [转]深入了解CPU两大架构ARM与X86 来自:https://blog.csdn.net/u014641018/article/details/53484565 重温下CPU是什么 中央处理单元( ...

  5. 【转】arm和x86的区别

    [转]arm和x86的区别 来自: https://blog.csdn.net/u012513972/article/details/78349192/ 信不信,随便逮住一个人问他知不知道CPU,我想 ...

  6. CPU架构解析:ARM和x86大比拼

    信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是如果你再问他知道ARM和X86架构么?这两者的区别又是什么?绝大多数的人肯定是一脸懵逼.今天小编就带你深入了解CPU的这两大架 ...

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

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

  8. ARM与x86 CPU架构对比

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

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

    ARM与X86 CPU架构对比区别 CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计 ...

最新文章

  1. Ubuntu安装rabbitMQ及单机版rabbitMQ集群配置
  2. LeetCode.961-2N数组中N次重复的元素(N-Repeated Element in Size 2N Array)
  3. 智能路由器操作系统OpenWrt
  4. Android--生命周期【转】
  5. 再学 GDI+[60]: TGPGraphics.SetSmoothingMode - 绘图质量
  6. 0day的NFO文件名的含义大全
  7. mysql用binlog恢复数据_利用mysql的binlog恢复数据
  8. java - 求最大公约数和最小公倍数
  9. 把html转换成PDF的手机软件,如何将MHTML转换为PDF(Convert MHTML to PDF)?
  10. postgre帮助文档。
  11. SQL事务与ADO.NET事务
  12. 5.20 考试 20 未完
  13. 用uniapp做的一个在线简历,可以发布成为微信小程序,给面试加分
  14. access查找出生日期年份_Access时间日期比较查询的方法总结
  15. Verilog学习笔记(7)Modelsim仿真_三角波发生器
  16. 你的必备技能 —— 方法
  17. python 标贝 模拟人声/语音克隆/语音复刻(API)体验
  18. 腾讯云直播、生成腾讯推拉流
  19. 服装行业要渡“疫情劫”,赢家时尚凭什么成为增长样本?
  20. ldo和dcdc功耗_LDO与DC-DC对比分析

热门文章

  1. C++学习笔记-利用rapidJSON生成JSON数据
  2. Qt工作笔记-QMap查找时要注意的问题(使用contains)
  3. doxygen 命令_doxygen使用
  4. 多线程java_初学Java要注意什么 怎么掌握Java多线程知识
  5. 栈溢出笔记1.1 函数调用过程
  6. Qt 密码框不可选中、复制、粘贴、无右键菜单等
  7. Python3调试类_io.BytesIO、_io.StringIO用法(Python3 IO编程之StringIO和BytesIO)
  8. Redis 如何实现主从复制
  9. MFC:移动对话框到右下角
  10. EOSIO:EOSIO最新版1.4.0 钱包开发环境搭建