不要再纠结了:ARM与X86性能完全没有可比性

ARM与intel伴随着移动计算终端的迅速普及ARM处理器性能也在逐渐的提高,众多平板电脑,智能手机啊都出来双核甚至四核的了(比如国产的华为海思K3V2),于是乎网上不少水军开始叫嚣所谓的ARM时代来临了,真的是这样么?难道X86已经穷途末路了?非也。

要看一个处理器的优劣就要考察这个处理器的整个过程,CPU执行的整个过程中最慢的那个环节确定其运行速度与效率。

CPU工作的第一个环节是提取,就是把指令提取到CPU中的过程,这个过程的决定因素是内存带宽(CPU外频与总线带宽的乘积),在这个方面,ARM处理器据说还在攻克10GB/S大关(一说是刚刚攻克)而X86已经攻克了100GB/s了。也就是说假如ARM和X86处理器对内存带宽的要求是同样的话X86的处理速度会是ARM的至少十倍。(相关延伸:干掉CPU?手机ARM处理器与X86 CPU处理器的不同特点

肯定现在有人会说ARM的指令发射速度比X86快(因为ARM一直这样宣传的),ARM指令短小精悍这是优点,但是也是最致命的缺点(后面会说),通常一个X86指令的长度不超过3-5个ARM指令的长度,也就是说即使X86全部都使用长指令发射速度也应该是ARM的1/3到1/5更何况X86也有很多短指令。考虑到现在内存带宽上X86占据10倍以上的优势X86的运行速度也应该是ARM的至少两倍。

此外就是指令长度并不完全决定发射速度,不是说指令长度时三倍发射时间就是3倍,中间有很长的时间是指令间隙,所以紧靠指令短小来提高速度是不可能超过x86的。

但是仅仅看第一环节还是不行的,下面我们来看第二环节,就是解码过程。解码过程也是ARM粉丝们攻击X86的地方。说解码就先说说二者的指令集吧。ARM指令集是精简后的RISC精简指令集,而X86的是CISC复杂指令集。打个比方,RISC就是训练一直军队时,直接告诉他们,“拿起枪,上好子弹,冲过去”三个指令,而CISC就是告诉他们“冲锋”,直观上看CISC反而更简单是吧。但是实际上不是这样的,CISC复杂复杂在对“冲锋”的执行上,使用CISC指令的前提是你的军队经过足够的训练已经明白了冲锋这个概念,这个训练就是CPU的复杂度。假如现在要撤退怎么办呢,CISC就必须再训练一个指令是“撤退”而RISC只需要把最后的冲过去换成“快回来”就行了。所以从这个角度上看RISC更合理。

现在的X86实际上不能说是CISC因为它也把CISC指令拆分成好几段指令来执行,这样效率就很高了,而且CISC最大的有点是复杂指令执行的速度远比RISC快(RISC要执行好多简单指令来堆积成一个复杂指令)而现在电脑执行的指令中复杂指令远远高于简单指令,随着编程技术和编程语言的提高这类复杂指令会更多,因为这样可以大大减少应用程序的体积和响应时间。而RISC的特点是什么呢,适合简单重复的工作,比如并行计算,所以在大型机和服务器上用的很多,但是在个人计算机上非常不给力。

一个CISC指令通常需要至少3个RISC来堆砌,所以CISC的运行速度大概是是ARM的3倍,这还是在其他条件相同的情况下。当然CISC效率没有RISC高,但是在现在的X86平台下表现还不明显。

第三个环节就是执行,执行效率高的处理器肯定效率高。直观的来看,ARM现在还在攻克1080p视频的软解(CPU解码)问题(据说已经能播放了),而早3年前core架构的处理器就能以10倍速度实现1080p视频解码,这就是效率的差距。

最后一个是写入速度,这是CPU最后的工作环节,很多人说ARM寄存器数量多,所以速度快,这也是基本过时的看法了。ARM寄存器多,可惜现在内存速度和寄存器速度相比已经差不多了,寄存器多反而说明ARM在结构上有待提高,因为寄存器可是很贵的哦。

最最后一点就是个人的一点看法ARM的优势在低功耗而不是性能,2000毫安时的电池就能让ARM工作十几个小时这是X86比不来的,但是X86超高的性能也绝对是ARM学不来的,所以呢,两者完全没有可比性,如果ARM加上intel指令集去装Windows,那完全是以己之短攻敌之长,同样X86在移动平台上也是这个道理,如果不是intel有这个星球上最强悍的半导体技术atom凌动根本就不会出现,而且凌动的表现也确实说明了X86在功耗上的劣势,不过毕竟intel技术很逆天的,凌动多多少少也算是成功了吧。

以后别动不动就说我手机什么双核1.6的,比你电脑都强之类的,要知道1G主频的赛扬都能流畅解码720p视频,1.6双核ARM解码时那CPU使用率……

2 thoughts on “不要再纠结了:ARM与X86性能完全没有可比性

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>