Linux系统下x86和ARM的区别有哪些?
问题:
最近在用三星的一款i5处理器的Windows平板,和iPad,以及其他使用ARM处理器的手机相比,发热量大很多,甚至需要借助风扇来散热,耗电量也大了不少。
那么就很奇怪,在主频相差不大,并且实际执行效果差不多的情况下,x86架构的处理器的发热量和功耗为什么会那么大?这种差异到底是硬件以及处理器的指令集本身的问题,还是软件层面的问题?
回答1:
说x86和ARM处理器“实际执行效果差不多”其实有所不妥。楼主也说了比较的几个设备主要是windows平板,ipad和智能手机。这些平台上的程序都是移动环境下的应用,大多逻辑简单功能单一,没什么“计算”可言。ARM处理器本身定位于嵌入式平台,应付轻量级、目的单一明确的程序,现在应用在移动设备上正是得心应手。x86定位于桌面和服务器,这些平台上很多应用是计算密集型的,比如多媒体编辑、科研计算、模拟等等。因此将x86和ARM在移动环境下做对比得出“差不多”是不好的。
由于定位的不同,ARM处理器基于精简指令集(RISC)架构。指令集数量少就可以简化硬件逻辑的设计,减少晶体管数量,也就意味着低功耗。而且由于移动平台应用通常简单,程序的控制流不复杂,执行效率没有必要很高,所以流水线、分支预测等硬件逻辑都比较简单。这些都降低了晶体管总量。同时因为移动设备有电池的能源限制,ARM的电源管理是作为重要部分特别设计了的。比如移动设备的处理器在待机时通常只以极低的主频在运行,甚至可以暂时关闭闲置的核心、协处理器来降低功耗。
x86就截然不同。x86是复杂指令集(CISC)架构,存在很多机器指令,只为了高效地完成一项专门任务(比如MMX, SSE中的指令)。这就使得硬件的逻辑很复杂,晶体管数量庞大。为了高效地进行运算,x86架构有较长的流水线以达到指令级并行(ILP)。长流水线带来的一个弊端,就是当遇到分支时,如果预载入分支指令不是未来真实的分支,那么要清空整个流水,代价较高。所以x86为此还必须有复杂的分支预测机构,确保流水线的效率。再加上多级cache,支持超线程、虚拟化等等,x86的复杂度其实相当高。
回答2:
因为ARM是为了低功耗设计的,而X86是为了高性能。你想把ARM做到X86一样的性能,势必增加核心复杂度,增加指令集,到时候你猜ARM对X86还能有多少功耗优势?X86精简核心规模抛弃部分指令集,一样也做到了功耗5W以下的ATOM,你又要问为什么那些X86手机功耗高发热大,因为没有专为X86平台开发的手机APP,你跑在X86手机上的APP全都是二次转换运行的,芯片一直高负载。你ARM手机一直高负载功耗不高发热不大?
ARM和x86几大简单比较
处理器通常是指一台计算机的运算核心和控制核心。但是随着移动设备的兴起,处理器在智能手机和平板电脑等移动终端设备中的也逐渐兴起,让处理器市场的变化开始了。
英特尔是PC和企业级处理器市场上毋庸置疑的霸主,ARM则是在移动终端市场发展起来的新兴霸主。英特尔专注高性能,为个人用户、企业用户提供出色的性能支持;而ARM则专注低功耗,为手机和平板用户带来超长待机。这两个看似没有交集的企业为何会发展成如今对立局面呢
疑的霸主,ARM则是在移动终端市场发展起来的新兴霸主。英特尔专注高性能,为个人用户、企业用户提供出色的性能支持;而ARM则专注低功耗,为手机和平板用户带来超长待机。这两个看似没有交集的企业为何会发展成如今对立局面呢
技术发展是两家公司直接竞争的主要原因,在Web2.0时代,Facebook、谷歌这些公司的崛起使得数据中心三大核心技术发生了改变,三大核心技术指的是:计算、存储和网络。
ARM是如何满足数据中心需求的
低功耗是ARM处理器的一个优势,但是在面向企业级领域的时侯,其发现并没有64位架构处理器,于是在2012年10月31日ARM推出新款ARMv8架构ARMCortex-A50处理器系列产品,来满足企业级级市场应用的需求。
而为了弥补自己在企业级市场的经验劣势,ARM还拉拢了原本跟英特尔同一阵营的AMD.AMD在服务器领域积累的相当多的成功经验,其拥有业界领先的64位微处理器技术以及广泛的知识产权组合与OEM、ODM和ISV合作的经验,将促进ARM在数据中心领域的扩展,满足数据中心领域的特定需求。
一、性能:
X86结构的电脑无论如何都比ARM结构的系统在性能方面要快得多、强得多。X86的CPU随便就是1G以上、双核、四核大行其道,通常使用45nm(甚至更高级)制程的工艺进行生产;而ARM方面:CPU通常是几百兆,最近才出现1G左右的CPU,制程通常使用不到65nm制程的工艺,可以说在性能和生产工艺方面ARM根本不是X86结构系统的对手。
但ARM的优势不在于性能强大而在于效率,ARM采用RISC流水线指令集,在完成综合性工作方面根本就处于劣势,而在一些任务相对固定的应用场合其优势就能发挥得淋漓尽致。
二、扩展能力
X86结构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,而且x86结构的电脑出现了近30年,其配套扩展的设备种类多、价格也比较便宜,所以x86结构的电脑能很容易进行性能扩展,如增加内存、硬盘等。
ARM结构的电脑是通过专用的数据接口使CPU与数据存储设备进行连接,所以ARM的存储、内存等性能扩展难以进行(一般在产品设计时已经定好其内存及数据存储的容量),所以采用ARM结构的系统,一般不考虑扩展。基本奉行“够用就好”的原则。
三、操作系统的兼容性
X86系统由微软及Intel构建的Wintel联盟一统天下,垄断了个人电脑操作系统近30年,形成巨大的用户群,也深深固化了众多用户的使用习惯,同时x86系统在硬件和软件开发方面已经形成统一的标准,几乎所有x86硬件平台都可以直接使用微软的视窗系统及现在流行的几乎所有工具软件,所以x86系统在兼容性方面具有无可比拟的优势。
ARM系统几乎都采用Linux的操作系统,而且几乎所有的硬件系统都要单独构建自己的系统,与其他系统不能兼容,这也导致其应用软件不能方便移植,这一点一直严重制约了ARM系统的发展和应用。GOOGLE开发了开放式的Android系统后,统一了ARM结构电脑的操作系统,使新推出基于ARM结构的电脑系统有了统一的、开放式的、免费的操作系统,为ARM的发展提供了强大的支持和动力。
x86 和 ARM 优缺点比较
一、背景知识
指令的强弱是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。从现阶段的主流体系结构讲,指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分。相应的,微处理随着微指令的复杂度也可分为 CISC 及 RISC 这两类。
CISC是一种为了便于编程和提高存储器访问效率的芯片设计体系。在20世纪90年代中期之前,大多数的微处理器都采用CISC体系,包括Intel 的 80x86 和 Motorola 的 68K 系列等。 即通常所说的 X86 架构就是属于 CISC 体系的。
RISC是为了提高处理器运行速度而设计的芯片设计体系。它的关键技术在于流水线操作(Pipelining):在一个时钟周期里完成多条指令。而超流水线以及超标量技术已普遍在芯片设计中使用。RISC体系多用于非 x86 阵营高性能微处理器CPU,像HOLTEK MCU系列等。
ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。而ARM体系结构目前被公认为是业界领先的32位嵌入式 RISC 微处理器结构,所有 ARM 处理器共享这一体系结构。
因此我们可以从其所属体系比较入手,来进行X86指令集与ARM指令集的比较。
二、CISC和RISC的比较
(一)CISC
1. CISC体系的指令特征
1) 使用微代码。指令集可以直接在微代码存储器(比主存储器的速度快很多)里执行,新设计的处理器,只需增加较少的电晶体就可以执行同样的指令集,也可以很快地编写新的指令集程序。
2) 庞大的指令集。可以减少编程所需要的代码行数,减轻程序员的负担。高级语言对应的指令集:包括双运算元格式、寄存器到寄存器、寄存器到存储器以及存储器到寄存器的指令。
2. CISC体系的优缺点
1) 优点:能够有效缩短新指令的微代码设计时间,允许设计师实现 CISC 体系机器的向上兼容。新的系统可以使用一个包含早期系统的指令超集合,也就可以使用较早电脑上使用的相同软件。另外微程序指令的格式与高级语言相匹配,因而编译器并不一定要重新编写。
2) 缺点:指令集以及芯片的设计比上一代产品更复杂,不同的指令,需要不同的时钟周期来完成,执行较慢的指令,将影响整台机器的执行效率。
(二)RISC
1. RISC体系的指令特征
1) 精简指令集:包含了简单、基本的指令,通过这些简单、基本的指令,就可以组合成复杂指令。
2) 同样长度的指令:每条指令的长度都是相同的,可以在一个单独操作里完成。
3) 单机器周期指令:大多数的指令都可以在一个机器周期里完成,并且允许处理器在同一时间内执行一系列的指令。
2. RISC体系的优缺点
1) 优点:在使用相同的芯片技术和相同运行时钟下,RISC 系统的运行速度将是 CISC 的2~4倍。由于RISC处理器的指令集是精简的,它的内存管理单元、浮点单元等都能设计在同一块芯片上。RISC 处理器比相对应的 CISC 处理器设计更简单,所需要的时间将变得更短,并可以比CISC处理器应用更多先进的技术,开发更快的下一代处理器。
2) 缺点:多指令的操作使得程序开发者必须小心地选用合适的编译器,而且编写的代码量会变得非常大。另外就是RISC体系的处理器需要更快的存储器,这通常都集成于处理器内部,就是L1 Cache(一级缓存)。
综合上面所述,若要再进一步比较CISC与RISC之差异,可以由以下几点来进行分析:
1. 指令的形成:CISC 因指令复杂,故采用微指令码控制单元的设计,而RISC的指令90%是由硬件直接完成,只有10%的指令是由软件以组合的方式完成,因此指令执行时间上RISC较短,但RISC所须ROM空间相对的比较大,至于RAM使用大小应该与程序的应用比较有关系。
2. 寻址模式:CISC的需要较多的寻址模式,而RISC只有少数的寻址模式,因此CPU在计算存储器有效位址时,CISC占用的汇流排周期较多。
3. 指令的执行:CISC指令的格式长短不一,执行时的周期次数也不统一,而RISC结构刚好相反,故适合采用流水线处理架构的设计,进而可以达到平均一周期完成一指令的方向努力。显然的,在设计上RISC较CISC简单,同时因为CISC的执行步骤过多,闲置的单元电路等待时间增长,不利于平行处理的设计,所以就效能而言RISC较CISC还是占了上风,但RISC因指令精简化后造成应用程式码变大,需要较大的存储器空间,且存在指令种类较多等等的缺点。
(三)X86指令集和ARM指令集
1. X86指令集
X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,后来的电脑中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器以及使用X87指令,以后就将X86指令集和X87指令集统称为X86指令集。虽然随着CPU技术的不断发展,Intel陆续研制出更新型的i80386、i80486,但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel公司所生产的所有CPU仍然继续使用X86指令集,所以它的CPU仍属于X86系列。由于Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了今天庞大的X86系列及兼容CPU阵容。
除了具备上述CISC的诸多特性外,X86指令集有以下几个突出的缺点:
通用寄存器组——对CPU内核结构的影响。X86指令集只有8个通用寄存器,所以,CISC的CPU执行是大多数时间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。RISC系统往往具有非常多的通用寄存器,并采用了重叠寄存器窗口和寄存器堆等技术使寄存器资源得到充分的利用。
解码——对CPU的外核的影响。解码器(Decode Unit),这是x86 CPU才有的东西。其作用是把长度不定的x86指令转换为长度固定的类似于RISC的指令,并交给RISC内核。解码分为硬件解码和微解码,对于简单的x86指令只要硬件解码即可,速度较快,而遇到复杂的x86指令则需要进行微解码,并把它分成若干条简单指令,速度较慢且很复杂。Athlon也好,PIII也好,老式的CISC的X86指令集严重制约了他们的性能表现。
寻址范围小——约束了用户需要。即使AMD研发出X86-64架构时,虽然也解决了传统X86固有的一些缺点,比如寻址范围的扩大,但这种改善并不能直接带来性能上的提升。
(2) ARM指令集
相比而言,以RISC为架构体系的ARM指令集的指令格式统一,种类比较少,寻址方式也比复杂指令集少。当然处理速度就提高很多。ARM处理器都是所谓的精简指令集处理机(RISC)。其所有指令都是利用一些简单的指令组成的,简单的指令意味着相应硬件线路可以尽量做到最佳化,而提高执行速率,相对的使得一个指令所需的时间减到最短。而因为指令集的精简,许多工作都必须组合简单的指令来完成,而针对较复杂组合的工作便需要由编译器(compiler) 来执行,而 CISC 体系的X86指令集因为硬体所提供的指令集较多,所以许多工作都能够以一个或是数个指令来代替,编译器的工作因而减少许多。
除了具备上述RISC的诸多特性之外,可以总结ARM指令集架构的其它一些特点如下:
ARM的特点:1) 体积小,低功耗,低成本,高性能;2) 支持Thumb(16 位)/ARM ( 32 位)双指令集,能很好的兼容 8 位 /16 位器件;3) 大量使用寄存器,指令执行速度更快;4) 大多数数据操作都在寄存器中完成;5) 寻址方式灵活简单,执行效率高;6) 指令长度固定;7) 流水线处理方式;8) load-store结构。
ARM的一些非RISC思想的指令架构:1) 允许一些特定指令的执行周期数字可变,以降低功耗,减小面积和代码尺寸;2) 增加了桶形移位器来扩展某些指令的功能;3) 使用了16位的Thumb指令集来提高代码密度;4) 使用条件执行指令来提高代码密度和性能;5) 使用增强指令来实现数字信号处理的功能。
(四)小结
因此,大量的复杂指令、可变的指令长度、多种的寻址方式这些CISC的特点,也是CISC的缺点,因为这些都大大增加了解码的难度,而在现在的高速硬件发展下,复杂指令所带来的速度提升早已不及在解码上浪费的时间。除了个人PC市场还在用X86指令集外,服务器以及更大的系统都早已不用CISC了。x86仍然存在的理由就是为了兼容大量的x86平台上的软件,同时,它的体系结构组成的实现不太困难。而RISC体系的ARM指令最大特点是指令长度固定,指令格式种类少,寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线,寄存器数量多,大量操作在寄存器之间进行。优点是不言而喻的,因此,ARM处理器才成为是当前最流行的处理器系列,是几种主流的嵌入式处理体系结构之一。RISC目前正如日中天,Intel似乎也将最终抛弃x86而转向RISC结构。而实际上,随着RISC处理器在嵌入式领域中大放异彩,传统的X86系列CISC处理器在Intel公司的积极改进下也克服了功耗过高的问题,成为一些高性能嵌入式设备的最佳选择,发展到今天,CISC与RISC之间的界限已经不再是那么泾渭分明,RISC自身的设计正在变得越来越复杂(当然并不是完全依着CISC的思路变复杂),因为所有实际使用的CPU都需要不断提高性能,所以在体系结构中加入新特点就在所难免。另一方面,原来被认为是CISC体系结构的处理器也吸收了许多RISC的优点,比如Pentium处理器在内部的实现中也是采用的RISC的架构,复杂的指令在内部由微码分解为多条精简指令来运行,但是对于处理器外部来说,为了保持兼容性还是以CISC风格的指令集展示出来。
Linux系统下x86和ARM的区别有哪些?的更多相关文章
- [转帖]Linux系统下x86和ARM的区别有哪些?
Linux系统下x86和ARM的区别有哪些? https://www.cnblogs.com/alantu2018/p/9209143.html 其实界限 越来越小了.. 问题: 最近在用三星的一款i ...
- [转]Linux系统下yum和apt-get的区别
一般来说著名的linux系统基本上分两大类: 1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包 ...
- 编译Linux系统下的jrtplib3.9和jthread1.3(arm和ubuntu)
最近由于学习需要,需要编译jrtplib,网上的资料基本上都是关于3.9以前的版本,而以前的版本基本上都是通过confiugre来配置生成Makefile,而最近的版本却没有这一项,而是使用cmake ...
- 操作系统复习——如何查看一个进程的详细信息,如何追踪一个进程的执行过程 ,如何在 Linux 系统下查看 CPU、内存、磁盘、IO、网卡情况?epoll和select区别?
1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可 ...
- JPEG库在Linux系统下的编译和移植【转】
本文转载自: 这篇文章介绍了jpeg库在Linux系统下的编译和移植,经过了亲自的验证,编译首先需要准备以下资源:jpegsrc.v6b.tar.gz(jpeg库),libtool-1.5.26.ta ...
- 深入理解linux系统下proc文件系统内容
深入理解linux系统下proc文件系统内容 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它 ...
- Linux系统下(x64)安装jdk 1.6(jdk-6u45-linux-x64.bin)
Linux系统下(x64)安装jdk 1.6(jdk-6u45-linux-x64.bin) 一,查看是否安装jdk: # rpm -qa | grep jdk 或者 #rpm -q jdk 或者 # ...
- 【转】Linux系统下的ssh使用
Linux系统下的ssh使用(依据个人经验总结) 对于linux运维工作者而言,使用ssh远程远程服务器是再熟悉不过的了!对于ssh的一些严格设置也关系到服务器的安全维护,今天在此,就本人工作中使 ...
- Linux系统下如何优雅地关闭Java进程?
资料出处: http://www.sohu.com/a/329564560_700886 https://www.cnblogs.com/nuccch/p/10903162.html 前言 Linux ...
随机推荐
- VirtualBox查看虚拟机IP地址
在终端输入如下内容 ifconfig 结果如图所示 eth0 内容中 inet 后的地址10.0.2.15即为虚拟机IP地址,lo 中的 inet 后的地址时本地环回,用于测试网络
- seq2seq升级TF1.5后_Linear报错
解决TF升级到1.5之后seq2seq.py出现的引用报错: 1.4时候使用rnn_cell_impl的_Linear没有问题的,TF升级到1.5之后这一行就运行不过去了,查到的方法是引用core_r ...
- Vuejs学习笔记(一)
1) vue.js 的 主要功能 1.模板渲染 2.模块化 3.扩展功能:路由,Ajax 2) vue.js 模板渲染之双向绑定示例 message 绑定到了 input 对象,所有在in ...
- Django单表操作
一.数据库相关设置 配置ORM的loggers日志: # 配置ORM的loggers日志 LOGGING = { 'version': 1, 'disable_existing_loggers': F ...
- KTV项目之3个ListView的跳转和加载歌手图片
第一个ListView: 第二个ListView: 第三个ListView: 定义一个KTVUtil类,在里面定义一个静态变量保存歌手图片 //定义一个静态变量保存歌手图片路径 public stat ...
- ReactNative bug:Application XXX has not bean registered.
故障现象 当react-native init新项目之后运行react-native run -android/ios时手机报错 Application XXX has not bean regist ...
- [机器学习入门篇]-Logistic函数与Softmax函数
1.Logistic函数 在维基百科中,对logistic函数这样介绍道: A logistic function or logistic curve is a common "S" ...
- js实现一个一个打印字体的功能
var str = "ddll台湾八百壮士抗议苹果正式发邀请函西安铁警查倒票案自制航模逼停高铁林志玲遭老总熊抱拖拽游艇事故通报大马外交官被暗杀鹿晗又和邮筒合影奥迪男辱骂环卫工 " ...
- python网络编程(十一)
epoll版-TCP服务器 1. epoll的优点: 没有最大并发连接的限制,能打开的FD(指的是文件描述符,通俗的理解就是套接字对应的数字编号)的上限远大于1024 效率提升,不是轮询的方式,不会随 ...
- Java集合框架(简介明了)
对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 接口:Collection Collection是最基本的集合接口,一个Collection代表一组Object,即Collect ...