ARM(RISC)和x86(CISC)的技术差异

RISC和CISC,这一对冤家,从诞生之日开始就处在不停的纠缠之中。直到今天,两者经过多年的发展后,都在各自领域打开了一片天地,并且相互渗透。RISC专注高性能、高性能功耗比、小体积以及移动设备领域,CISC专注桌面、高性能和民用市场。现在,RISC的代表是ARM,而CISC的代表则是我们耳熟能详的x86。那么,他们的技术差异在哪里?究竟是怎样的技术分歧带来了两者如此大的差别呢?

指令集的出现

要说清楚RISC和CISC,也就是今天热门的ARM和x86之间的差异,还得把时间往前推一些,观察计算机诞生之初的一些事情,才能很清楚地了解指令集、精简和复杂之间的关系。

机器语言的实例  
机器语言 含义
0000,0000,000000010000 代表 LOAD A, 16
0000,0001,000000000001 代表 LOAD B, 1
0001,0001,000000010000 代表 STORE B, 16
0001,0001,000000000001 代表 STORE B, 1

今天学生学习计算机实在是太幸福了!今天有大量的可视化的操作方式,有成熟的各种接近自然语言的编程语言,在这些语言中还有很多写好的库用于完成那些固定而复杂的任务。这种“幸福”的计算机的学习和使用过程,你完全不应该觉得困难——请注意,如果和上个世纪七十年代的计算机使用者比起来,真的好太多了。


老式的计算机,使用纸带进行输入输出,效率极其低下。

上世纪70年代末期,计算机的出现虽然带来了各种方便,但也带来了各种不方便。首先就是编程。当时没有类似今天这样的高级的、接近自然语言的、各种逻辑都非常完善的编程语言,而是采用最底层的机器语言来写命令。

机器语言和后来的汇编语言,在使用中都显得很麻烦,可读性差,并且很难维护。此外,还有最重要的一点是,这些语言都比较“笨”,如果要计算一些稍微复杂的操作比如乘法、除法、三角函数、微积分、方程等,每次计算都需要重新编写程序(在纸带上打孔输入数据的时代,是没有“粘贴+复制”的方便功能的)。

于是人们想了一个方法,对一些比较常用的指令,比如积分、微分、乘除法等,干脆写一套标准的程序,留下输入数据的接口。这样就能够大幅度地降低编程中的难度,提高编程效率并增加其易用性。这个想法一提出,就得到了很多业内人士的认可,大家给这种想法取了一个名字,叫做“指令集”。

指令集中包含了大量的基础运算的内容,并且以公式化和模块化的方式供人们使用。对软件来说,指令集的出现无疑大幅度提高了程序编写的效率。同时由于模块化指令的存在,软件的运行效率也得到了提升。对硬件来说,专用模块的效率永远高于通用模块,因此指令集的出现也为CPU硬件性能的提升开启了一扇新的大门。

复杂的还是精简的?

指令集诞生后,CPU厂商都开始整理、规范这些指令集,其中就包括英特尔。英特尔在它最为成功的一款处理器8086中,开始加入大量指令集,以提高计算效率、增强CPU性能。与此同时,另外一种思想在悄悄萌芽。


英特尔为了兼容8086处理器,不得不一直采用x86 CISC指令集。

业界有一个著名的“8020定理”,可以应用在很多方面:比如一家公司80%的人都会是普通职员,20%的人才可能成为领导者;这些领导者每天做的事情80%是不紧急或者不重要的、20%才是最紧急最重要的内容等等。“8020定理”概括了社会发展的大部分内容,虽然不那么精确,但足以说明大部分内容往往没有什么效率,最值得关心的往往是那20%的核心部分—比如下面这一段:

CPU的指令集是各种功能的集合。指令集诞生的原因是人们渴望在软件编写时更有效率,同时也符合事物发展中规范化、模块化的需求。但是,在所有指令集中,经过人们分析和统计,只有20%的指令集会在80%的场合都用到,而绝大部分80%的指令集只有20%的场合需要出现。


RISC处理器的效率很高,一般来说能耗比很出色,但是指令比较复杂,特别是程序体积较大。图为IBM的Power 7处理器的接口,是经典的高性能RISC处理器。

这里的意思就很明确了。如果一个CPU支持所有的指令集,那么其中20%的部分会被经常调用,而80%的部分经常闲置无所事事,至少在80%的时间中都是如此。在CPU晶体管“寸土寸金”的年代,这样的做法是对晶体管的严重浪费。在这种情况下,曾任斯坦福大学校长、美国科学院、工程学院和文理学院三院院士的约翰·亨尼西教授和加州大学伯克利分校的计算机教授戴维·帕特森等人,就提出了一种更为简单的指令集,叫做精简指令集,全称是Reduced Instruction Set Computing,简写为RISC。而传统的大而全的指令集也被赋予了一个正式的名字,叫做Complex Instruction Set Computing,也就是CISC。

RISC的优势在于将指令数目和寻址方式都做出了改进,大幅度降低了设计难度,编译器的效率更高并且指令的并行执行程度更高。同时RISC制造的CPU体积更小、能耗更低、性能功耗比更高。但是RISC并不是没有缺点,比如RISC的CPU对20%的常用指令集的计算效率更高,而对一些不常用或者复杂的指令,则以几个常用指令组合的方式来完成,计算效率就明显下降。对软件来说,RISC的程序体积相对CISC会大一些,复杂度稍高。并且由于指令集精简,早期的RISC处理器的性能显然不如同期的CISC,虽然它更小、功耗更低。

今天的CPU:x86和ARM

虽然从原理来看,RISC和CISC可谓井水不犯河水。但RISC和CISC在发展过程中,彼此反而取长补短,各有所得。

对CISC来说,指令集本身随着计算要求不断发展,肯定会越来越多。CISC继续发展下去,其实际CPU产品的晶体管数量会难以抑制地上升,性能功耗比和成本表现很难让人满意。从设计角度来看,CISC指令集长度不固定、执行时间也不固定、设计困难很多,很难找出一条高效率的通用设计道路来完成指令的执行。此外,由于CISC处理器和存储器之间的速度差距,缓存变得越来越重要。这也意味着CPU本身需要更为精简高效,节省的空间需要用于容纳越来越重要的各级缓存。

为了解决这些问题,现代的CISC处理器开始认真学习RISC的思想。CISC的问题在于指令集复杂多变,为每一个指令制定专门的硬件优化显然不可能。那么,可不可以换一个思路呢?将那些最常使用的指令集挑选出来,然后为其进行专门优化,就可以大大提高效率;至于不常用的指令,则可以用几个基础指令组合的方式完成——这正是RISC的思想。有所不同的是,RISC让思想完成在指令层面,而CISC将这个思想实现在硬件层面。


英特尔的Nehalem处理器可谓借鉴RISC思想而设计的x86。

以英特尔的Nehalem或者AMD的K10处理器为例。首先,这些x86处理器内部都会使用“微指令”。所谓微指令,就是一些基础的指令,CISC指令中大部分都可以被拆分为几条简单而固定的微指令。其次,CPU内部设计了“翻译单元”,一般是由解码单元来执行的。在运行中,CPU接受一条x86指令,然后解码单元将接收到的比较复杂的X86指令拆解为一个或几个微指令。比如Nehalem设计了3个简单的解码单元和1个复杂的解码单元,可以将x86指令解码拆分、“翻译”为1~4条微指令。

第三,CPU内部针对这些微指令会做出充足的优化,让其执行效率和速度都达到令人满意的程度。当然,在解码处理的过程中,不是所有的x86指令都会得到平均对待。那些最常用的指令比如mov、push、call、cmp、add等会被重点、优先、加速处理,不常用的指令要么被拆分为常用指令,要么进入普通循环进行处理。效率虽然有影响,但考虑到其使用几率很低,因此这样的设计完全可以接受。在微指令解码和处理过程中,如何更有效率、更为高效地执行x86命令;微指令应该如何表达、运行;微指令和x86指令的关系以及哪些微指令是最常用、最优先的指令,成为最影响CPU性能的核心内容。


未来的ARM Cortex A-50是高性能处理器的代表产品。

在采用了RISC思想、对x86处理器的设计进行革新后,如今的CISC处理器基本上可以解决CISC指令复杂、体积庞大,晶体管耗费多等问题。对厂商来说,一个设计优秀的x86处理器的解码和流水线核心可以维持数代发展而不落伍。厂商可以在发展过程中不断对已经设计好的核心进行调整和调配,在缓存、总线配置上进行更改以获取更好的性能。

CISC借鉴RISC的思想,让自己获得了新生。相对来说,RISC对CISC也有借鉴,但不算太多。RISC指令简单并且相对固定,处理快速,在设计上甚至可以使用更长的流水线来达到高频率,并最终获得更优秀的效能。但RISC的主要问题在于指令集简单,因此在处理一些比较复杂的应用时,存储器需要读入的指令总数耗费时间更多,部分场合下性能表现不理想也是RISC的硬伤。因此,在RISC的发展中,RISC也在逐渐注入CISC的思想。比如紧跟时代加入一些新的指令集,更进一步优化内部架构,运行周期变成不固定周期等。RISC发展到现在,指令也逐渐增多,浮点计算等重要性能也日益强大。以ARM为例,不但逐渐增强浮点计算性能、新增专门的浮点指令,还计划在现有的基础上开展高性能ARM处理器的发展,以增强未来应对市场变化特别是对x86处理器竞争的能力。

未来的处理器,功耗更低,效能更高

从目前CPU的发展来看,无论是ARM还是x86,无论是CISC还是RISC,除了努力巩固自己的性能优势,加强产品的性能外,还积极吸取对方产品的特色,取长补短,期望有所突破。不过无论如何,未来的CPU肯定在朝着高性能、低功耗的方向发展。目前移动计算大潮已经来临,竞争日趋激烈。但说到底就是性能功耗比的竞争,谁能在低功耗下提供高性能,谁就有希望获得成功。未来的处理器,功耗将更低,效能会更高。

===================================

转自 http://www.mcplive.cn/index.php/article/index/id/12476

时间: 2024-10-11 23:09:07

ARM(RISC)和x86(CISC)的技术差异的相关文章

ARM CPU和X86 CPU的区别

CPU即中央处理器是一块超大规模的集成电路,是一台计算机的运算核心和控制核心,主要是解释计算机指令以及处理计算机软件中的数据.主要由运算器.控制器.寄存器三部分组成,担负处理指令.执行操作.控制时间.处理数据四大作用,如果没有CPU,工业主板将无法工作. 1.目前CPU主要由X86和ARM两大架构.不同架构间的差距非常大,而从最基本的逻辑角度来分类的话,可以被分为两大类,即 “复杂指令集”与“精简指令集”系统,也就是“CISC”与“RISC”. X86工控主板与ARM工控主板最主要区别是前者使用

RabbitMQ与Kafka的技术差异以及使用注意点

作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”. 基于某些原因, 许多开发者会把这两种技术当做等价的来看待.的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的. 不同的场景需要不同的解决方案,选错一个方案能够严重的影响你对软件的设计,开发和维护的能力. 第一篇文章介绍了RabbitMQ和Apache Kafka内部实现的相关概念.本篇文章会从两个方面探讨这两种技术之间的差异,一个是这两种

嵌入式开发板 iTOP-4412开发板 初学ARM开发板首选!提供技术支持!

摘要: ARM开发板 迅为三星Exynos嵌入式开发平台超强GPS模块 iTOP-Exynos4412开发板采用 Exynos4412的主芯片,具有更高的主频和更丰富外设,配置 2GB 双通道 DDR3的内存及 16GB 存储,具有稳定性强.可靠性高,能适用于对性能和处理能力有更高要求的嵌入式系统应用场合. iTOP-Exynos4412开发板内置有无线 WIFI 模块.Bluetooth.GPS.Camera.3G等模组,支持 HDMI1.4(1080P/60Hz)显示,客户可以直接从开发平台

常见的CPU架构

CPU架构从大的层面分两类--CISC.RISC. x86 CISC就是复杂指令集计算机,目前专指 x86 和 x86-64 两类 其中 x86 又叫 IA32,即 Intel Architecture 32(Intel32位架构),不管是Intel生产的 x86 CPU,还是AMD或者VIA生产的,都是 IA32,IA32 并非没有专利保护而是 AMD 和 VIA/Cyrix 通过交叉专利授权获得了 IA32 的使用权. x86-64 又叫 AMD64,它的 Intel 版本叫做 EM64T(

ARM和x86的区别

CPU的指令集从主流的体系结构上分为精简指令集(RISC)和复杂指令集(CISC).嵌入式系统中的主流处理器——ARM处理器,所使用的就是精简指 令集.而桌面领域的处理器大部分使用的是复杂指令集,比如Intel的X86系列处理器.我们把ARM处理器所使用的指令集称为ARM指令集,把X86处 理器所使用的指令集称为X86指令集,ARM处理器与X86处理器采用不同类型的指令集,造成了处理器在性能.成本.功耗等方面的诸多差异. ARM指令集和X86指令集的比较:     (1) 功耗:       这

ARM和x86

CPU的指令集从主流的体系结构上分为精简指令集(RISC)和复杂指令集(CISC).嵌入式系统中的主流处理器——ARM处理器,所使用的就是精简指令集.而桌面领域的处理器大部分使用的是复杂指令集,比如Intel的X86系列处理器.我们把ARM处理器所使用的指令集称为ARM指令集,把X86处理器所使用的指令集称为X86指令集,ARM处理器与X86处理器采用不同类型的指令集,造成了处理器在性能.成本.功耗等方面的诸多差异. ARM指令集和X86指令集的比较: (1) 功耗: 这是ARM主板最大的优点之

Linux系统下x86和ARM的区别有哪些?

问题: 最近在用三星的一款i5处理器的Windows平板,和iPad,以及其他使用ARM处理器的手机相比,发热量大很多,甚至需要借助风扇来散热,耗电量也大了不少. 那么就很奇怪,在主频相差不大,并且实际执行效果差不多的情况下,x86架构的处理器的发热量和功耗为什么会那么大?这种差异到底是硬件以及处理器的指令集本身的问题,还是软件层面的问题? 回答1: 说x86和ARM处理器"实际执行效果差不多"其实有所不妥.楼主也说了比较的几个设备主要是windows平板,ipad和智能手机.这些平台

x86、ARM和MIPS

指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分,代表架构分别是x86(CISC).ARM和MIPS(RISC).   ARM-RISC是为了提高处理器运行速度而设计的芯片体系,它的关键技术在于流水线操作即在一个时钟周期里完成多条指令.相较复杂指令集CISC而言,以RISC为架构体系的ARM指令集的指令格式统一.种类少.寻址方式少,简单的指令意味着相应硬件线路可以尽量做到最佳化,从而提高执行速率.因为指令集的精简,所以许多工作必须组合简单的指令,而针对复杂组合的工作便需要由编译程

risc与cisc

RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法. 早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务.比如对于乘法运算,在CISC架构的CPU上,您可能需要 这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中.将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现.这种架