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肯定在朝着高性能、低功耗的方向发展。目前移动计算大潮已经来临,竞争日趋激烈。但说到底就是性能功耗比的竞争,谁能在低功耗下提供高性能,谁就有希望获得成功。未来的处理器,功耗将更低,效能会更高。
温馨提示:内容为网友见解,仅供参考
x86和RISC哪个更适合运行游戏?
RISC的优势在于将指令数目和寻址方式都做出了改进,大幅度降低了设计难度,编译器的效率更高并且指令的并行执行程度更高。同时RISC制造的CPU体积更小、能耗更低、性能功耗比更高。但是RISC并不是没有缺点,比如RISC的CPU对20%的常用指令集的计算效率更高,而对一些不常用或者复杂的指令,则以几个常用指令组合的方式来完...
与x86架构相比,mips指令架构有何优点?
总的来说,MIPS指令架构以其简洁性、一致性和低功耗设计等优点,在某些应用场景下可能比x86架构更具优势。然而,需要注意的是,每种架构都有其适用的场景和限制,因此在选择处理器架构时需要根据具体的需求和应用场景进行权衡。
芯片架构–四大处理器架构「建议收藏」
1. x86架构 大部分我们所使用的电脑和服务器,采用了x86架构的处理器,主要来自intel和AMD。x86架构基于CISC指令集,CPU分为x86和x86-64两种类型,目前普遍使用的是x86-64,即64位处理器。2. ARM架构 我们的手机几乎都采用了ARM架构,它使用的是RISC指令集。ARM的优势在于低功耗,非常适合手机等移动设...
手机都出8核处理器了,为什么英特尔不出8核电脑处理器?
Intel是X86架构,用的CISC 复杂指令集 而ARM用的是自己的ARM架构,核心是RISC精简指令集 其实区别很明显,RISC牺牲了功能性,而提高了单位命令的运行效率 而CISC能处理的信息更多,但是相对来说,单位性能就下降了 所以,你看到家用游戏机的CPU都是用的RISC,因为只需要运行游戏,所以RISC的CPU更有效率 ...
你知道ARM和X86架构吗?
性能对比并非绝对,取决于应用需求。若ARM架构能满足应用需求,推荐考虑ARM产品,否则应选用X86架构。总结,ARM架构适用于手机、手持设备和低端控制设备,特点为体积小、功耗低、成本低,采用精简指令集(RISC),单线程运行。X86架构则适用于笔记本电脑、台式机、服务器和工控机,体积较大、功耗高、成本较高...
为什么计算机组成原理risc是主流,risc是硬布线控制器,微程
2. 然而,在个人电脑(PC)领域,英特尔的x86架构依然是应用广泛的主流架构,对市场有着深远的影响。3. 过去,RISC架构常常被视为设计上的优选,预示着对CISC架构的改革趋势。尽管如此,CISC架构并未被淘汰,反而在某些场景下展现了其独特的价值。4. 目前,CISC架构和RISC架构之间的界限越来越模糊,两者...
ARM架构与X86架构有什么不同?只适合移动端吗?
ARM架构与X86架构的主要差异在于指令集设计和应用场景。ARM基于RISC架构,追求效率,每条指令执行单一操作,适合低功耗设备如手机和嵌入式设备;而X86采用CISC架构,指令复杂,处理多个操作,适合高性能和多任务处理的桌面和服务器。在性能释放上,ARM展现出在移动设备中的强大优势,如iPhone 15 Pro搭载的A17...
龙芯为什么不做兼容CPU?为什么不选择X86架构
为什么要x86?x86要授权的,而且也不是有了x86就能一飞冲天了,龙芯性能还是偏弱。龙芯·采用的risc精简指令集不怎么看重桌面市场,反而更看重物流、军事、生物技术这些专用市场。x86架构太过于复杂,适合泛用市场,反而不太适合这些专用领域。反正就算做x86按目前来说不出现天翻地覆的技术变革肯定打不过...
电脑cpu和手机cpu的差距有多大?
首先这两种cpu在制作架构上就不一样,电脑的cpu采用的是x86架构,而手机采用的是arm架构。两种架构的cpu特性也不一样,x86的cpu非常适合高强度的运算,而arm架构的处理器的特点是功耗低,在低功耗的情况下,还可以保持较高的性能,所以被移动端广泛的运用。手机对温度和续航能力的要求非常高,先撇开其他...
ARM 和 x86 架构相比,各自的发展前景怎么样
CISC相对RISC来说的单条指令更长,功能更多,单条指令性能也更强大。你可以理解为,做同一件事情,使用CISC的指令数比RISC要少。x86的优势:1)速度快。因为单条指令功能强大,指令数相对少。2)带宽要求低。还是因为指令数相对少,即使高频率运行也不需要很大的带宽往CPU传输指令。ARM的优势:1)低功耗。