POPPUR爱换

标题: [转自魅族论坛]ARM与X86不具备可比性 性能差距可大上千倍 [打印本页]

作者: dk8870    时间: 2012-1-5 17:42
标题: [转自魅族论坛]ARM与X86不具备可比性 性能差距可大上千倍
这里就不去管细节,简单来谈一下,ARM和X86之间为什么不太具有可比性的问题。要搞清楚这个问题首先要明白什么是架构,之前也有很多人提到了架构不同,但架构是什么意思?它是一个比较抽象的概念,不太容易用几句话就解释清楚。
我们要明白CPU是一个执行部件,它之所以能执行,也是因为人们在里面制作了执行各种功能的硬件电路,然后再用一定的逻辑让它按照一定的顺序工作,这样就能完成人们给它的任务。也就是说,如果把CPU看作一个人,首先它要有正常的工作能力(既执行能力),然后又有足够的逻辑能力(能明白做事的顺序),最后还要听的懂别人的话(既指令集),才能正常工作。而这些集中在一起就构成了所谓的“架构”,它可以理解为一套“工具”、“方法”和“规范”的集合。不同的架构之间,工具可能不同,方法可能不同,规范也可能不同,这也造成了它们之间的不兼容——你给一个意大利泥瓦匠看一份中文写成的烹饪指南,他当然不知道应该干什么了。

如果还看不懂,没关系,我们继续。从CPU发明到现在,有非常多种架构,从我们熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它们之间的差距都非常大。但是如果从最基本的逻辑角度来分类的话,它们可以被分为两大类,即所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。属于这两种类中的各种架构之间最大的区别,在于它们的设计者考虑问题方式的不同。我们可以继续举个例子,比如说我们要命令一个人吃饭,那么我们应该怎么命令呢?我们可以直接对他下达“吃饭”的命令,也可以命令他“先拿勺子,然后舀起一勺饭,然后张嘴,然后送到嘴里,最后咽下去”。从这里可以看到,对于命令别人做事这样一件事情,不同的人有不同的理解,有人认为,如果我首先给接受命令的人以足够的训练,让他掌握各种复杂技能(即在硬件中实现对应的复杂功能),那么以后就可以用非常简单的命令让他去做很复杂的事情——比如只要说一句“吃饭”,他就会吃饭。但是也有人认为这样会让事情变的太复杂,毕竟接受命令的人要做的事情很复杂,如果你这时候想让他吃菜怎么办?难道继续训练他吃菜的方法?我们为什么不可以把事情分为许多非常基本的步骤,这样只需要接受命令的人懂得很少的基本技能,就可以完成同样的工作,无非是下达命令的人稍微累一点——比如现在我要他吃菜,只需要把刚刚吃饭命令里的“舀起一勺饭”改成“舀起一勺菜”,问题就解决了,多么简单。

这就是“复杂指令集”和“精简指令集”的逻辑区别。可能有人说,明显是精简指令集好啊,但是我们不好去判断它们之间到底谁好谁坏,因为目前他们两种指令集都在蓬勃发展,而且都很成功——X86是复杂指令集(CISC)的代表,而ARM则是精简指令集(RISC)的代表,甚至ARM的名字就直接表明了它的技术:Advanced RISC Machine——高级RISC机。

到了这里你就应该明白为什么RISC和CISC之间不好直接比较性能了,因为它们之间的设计思路差异太大。这样的思路导致了CISC和RISC分道扬镳——前者更加专注于高性能但同时高功耗的实现,而后者则专注于小尺寸低功耗领域。实际上也有很多事情CISC更加合适,而另外一些事情则是RISC更加合适,比如在执行高密度的运算任务的时候CISC就更具备优势,而在执行简单重复劳动的时候RISC就能占到上风,比如假设我们是在举办吃饭大赛,那么CISC只需要不停的喊“吃饭吃饭吃饭”就行了,而RISC则要一遍一遍重复吃饭流程,负责喊话的人如果嘴巴不够快(即内存带宽不够大),那么RISC就很难吃的过CISC。但是如果我们只是要两个人把饭舀出来,那么CISC就麻烦得多,因为CISC里没有这么简单的舀饭动作,而RISC就只需要不停喊“舀饭舀饭舀饭”就OK。

这就是CISC和RISC之间的区别。但是在实际情况中问题要比这复杂许许多多,因为各个阵营的设计者都想要提升自家架构的性能。这里面最普遍的就是所谓的“发射”概念。什么叫发射?发射就是同时可以执行多少指令的意思,例如双发射就意味着CPU可以同时拾取两条指令,三发射则自然就是三条了。现代高级处理器已经很少有单发射的实现,例如Cortex A8和A9都是双发射的RISC,而Cortex A15则是三发射。ATOM是双发射CISC,Core系列甚至做到了四发射——这个方面大家倒是不相上下,但是不要忘了CISC的指令更加复杂,也就意味着指令更加强大,还是吃饭的例子,CISC只需要1个指令,而RISC需要5个,那么在内存带宽相同的情况下,CISC能达到的性能是要超过RISC的(就吃饭而言是5倍),而实际中CISC的Core i处理器内存带宽已经超过了100GB/s,而ARM还在为10GB/s而苦苦奋斗,一个更加吃带宽的架构,带宽却只有别人的十分之一,性能自然会受到非常大的制约。为什么说ARM和X86不好比,这也是很重要的一个原因,因为不同的应用对带宽需求是不同的。一旦遇到带宽瓶颈,哪怕ARM处理器已经达到了很高的运算性能,实际上根本发挥不出来,自然也就会落败了。

说到这儿大家应该也已经明白CISC和RISC的区别和特色了。简而言之,CISC实际上是以增加处理器本身复杂度作为代价,去换取更高的性能,而RISC则是将复杂度交给了编译器,牺牲了程序大小和指令带宽,换取了简单和低功耗的硬件实现。但如果事情就这样发展下去,为了提升性能,CISC的处理器将越来越大,而RISC需要的内存带宽则会突破天际,这都是受到技术限制的。所以进十多年来,关于CISC和RISC的区分已经慢慢的在模糊,例如自P6体系(即Pentium Pro)以来,作为CISC代表的X86架构引入了微码概念,与此对应的,处理器内部也增加了所谓的译码器,负责将传统的CISC指令“拆包”为更加短小的微码(uOPs)。一条CISC指令进来以后,会被译码器拆分为数量不等的微码,然后送入处理器的执行管线——这实际上可以理解为RISC内核+CISC解码器。而RISC也引入了指令集这个就逻辑角度而言非常不精简的东西,来增加运算性能。正常而言,一条X86指令会被拆解为2~4个uOPs,平均来看就是3个,因此同样的指令密度下,目前X86的实际指令执行能力应该大约是ARM的3倍左右。不过不要忘了这是基于“同样指令密度”下的一个假设,实际上X86可以达到的指令密度是十倍甚至百倍于ARM的。

最后一个需要考虑的地方就是指令集。这个东西的引入,是为了加速处理器在某些特定应用上性能而设计的,已经有了几十年的历史了。而实际上在目前的应用环境内,起到决定作用的很多时候是指令集而不是CPU核心。X86架构的强大,很多时候也源于指令集的强大,比如我们知道的ATOM,虽然它的X86核心非常羸弱,但是由于它支持SSE3,在很多时候性能甚至可以超过核心性能远远强大于它的Pentium M,这就是指令集的威力。目前X86指令集已经从MMX,发展到了SSE,AVX,而ARM依然还只有简单而基础的NEON。它们之间不成比例的差距造成了实际应用中成百上千倍的性能落差,例如即便是现今最强大的ARM内核依然还在为软解1080p H.264而奋斗,但一颗普通的中端Core i处理器却可以用接近十倍播放速度的速度去压缩1080p H.264视频。至少在这点上,说PC处理器的性能百倍于ARM是无可辩驳的,而实际中这样的例子比比皆是。这也是为什么我在之前说平均下来ARM只有X86几十分之一的性能的原因。

打了这么多字,其实就是为了说明一点,虽然现在ARM很强大,但它距离X86还是非常遥远,并没有因为这几年的进步而缩短,实际上反而在被更快的拉大。毕竟它们设计的出发点不一样,因此根本不具备多少可比性,X86无法做到ARM的功耗,而ARM也无法做到X86的性能。这也是为什么ATOM一直以来都不成功的原因所在——Intel试图用自己的短处去和别人的长处对抗,结果自然是不太好的,要不是Intel拥有这个星球上最先进的半导体工艺,ATOM根本都不可能出现。而ARM如果尝试去和X86拼性能,那结果自然也好不到哪儿去,原因刚刚也解释过了。不过这也不意味着ARM以后就只能占据低端,毕竟任何架构都有其优点,一旦有应用针对其进行优化,那么就可以扬长避短。X86的繁荣也正是因为整个世界的资源都针对它进行了优化所致。只要能为ARM找到合适的应用与适合的领域,未来ARM也未必不可以进入更高的层次。


作者: goldman948    时间: 2012-1-5 18:02
以PC桌面来说,其实现在CPU的角色不是很吃重,主要还是在GPU上.
也就是ARM只要到拿某一个水平基本上就够了,不需要一定跟INTEL顶级
CPU比较.
以移动设备来说,X86也可以用INTELNB工艺加不顾一切降低性能换功耗,
也不见得搞不起来,但主要还是目前做ARM太多,大家又怕INTEL来垄断,
X86想走移动我觉得也不一定能顺畅.
作者: CC9K    时间: 2012-1-5 18:15
扯蛋的文章居然能写这么多
作者: jasonkarl    时间: 2012-1-5 18:50
买了魅族必然后悔……M9用户有感……
作者: gzpony    时间: 2012-1-5 19:35
嘿嘿,奇文共欣赏了。
其实多说无益,过3,5年事实会说明一切
作者: eternal0    时间: 2012-1-5 19:47
goldman948 发表于 2012-1-5 18:02
以PC桌面来说,其实现在CPU的角色不是很吃重,主要还是在GPU上.
也就是ARM只要到拿某一个水平基本上就够了,不 ...

您的第一句话让市场占有率第一的显卡情何以堪啊。

ARM要想追上低端x86,不把单核性能、内存带宽这两个问题解决是绝对不可能的。想追上2600K这种主流U的性能还要很久。

x86走移动路线确实不行,做到手机上近两年没戏,而平板电脑方面,与其说平板电脑火倒不如说是iPad火,安卓平板基本只有低端的命。
作者: Edison    时间: 2012-1-5 20:00
乱七八糟的比喻。
作者: wuxiaoyong    时间: 2012-1-5 20:43
看了  又懂了 些东西
作者: doocoo    时间: 2012-1-5 21:58
还是那句话:应用面不一样。
不过移动应用也未必就是低端哦。
作者: zergzx    时间: 2012-1-5 22:09
个人感觉还是有些道理。
作者: Tempestglen    时间: 2012-1-6 07:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: kinno    时间: 2012-1-6 08:49
标记,1000倍?开玩笑呢,arm那性能接近0的废柴,就1000倍?
普通上网,2600K和G530性能相等,视频渲染什么的,2600K应该能达到G530的2倍,让arm做个看看?
作者: eternal0    时间: 2012-1-6 09:10
kinno 发表于 2012-1-6 08:49
标记,1000倍?开玩笑呢,arm那性能接近0的废柴,就1000倍?
普通上网,2600K和G530性能相等,视频渲染什么 ...

2600K默认都不止G530的2倍,普通上网也明显更流畅(前提是网速不瓶颈)。

软解1080p H264的性能,x86肯定达不到ARM的1000倍。
作者: 66666    时间: 2012-1-6 09:56
指令集跟性能直接挂钩这种傻逼到极点的观点谁发明的?
作者: sjlhq    时间: 2012-1-6 10:22
其实ARM的性能只是手机方面勉强够用,X86再强大的性能在手机上也发挥不出来。
作者: 飞鸟真    时间: 2012-1-6 10:28
本帖最后由 飞鸟真 于 2012-1-6 10:29 编辑

寒假党,写作业去吧,别来pci浪费资源。

CISC指令还在,x86处理器已死(不知道还有没有别的cisc)

简单说 现在的x86 是 x86解码翻译器 + 特殊risc核心

x86解码对intel工程师和电池来讲都是噩梦



作者: gzpony    时间: 2012-1-6 10:28
66666 发表于 2012-1-6 09:56
指令集跟性能直接挂钩这种傻逼到极点的观点谁发明的?

所以说是奇文啊。
上面还有说有道理的。。。倒。。。
作者: darkangel308    时间: 2012-1-6 11:24
intel牛X的是架构和工艺啊
作者: sffgah    时间: 2012-1-6 11:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: gzpony    时间: 2012-1-6 11:48
sffgah 发表于 2012-1-6 11:38
说话不要太狂,指令集绝对跟性能是有直接联系的,最简单的比方,就比如跑虚拟机要用到的vt-x,以前一条指 ...

这个只是把处理过程硬件化,做到了cpu电路中,类似现在喜欢说的硬解软解。
这样做不是没有代价的,也就是CISC和RISC的主要区别。
如果这奇文的观点正确,那么CISC性能超越所有的RISC也有上千倍,因为RISC的指令集也是和ARM一样简单。
作者: sffgah    时间: 2012-1-6 11:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: 66666    时间: 2012-1-6 12:17
sffgah 发表于 2012-1-6 11:38
说话不要太狂,指令集绝对跟性能是有直接联系的,最简单的比方,就比如跑虚拟机要用到的vt-x,以前一条 ...

我说你还洗什么地,同构架下你说的话还有点道理。不同构架不同指令集跟性能有个狗屁关系。

FX 8120跑AVX优化软件性能还不如1090T,1090T压根就不支持AVX。

ARM还有64/128bit NEON矢量指令集,难道性能就跟目前支持SSE的X86比了吗?
作者: sffgah    时间: 2012-1-6 12:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: 66666    时间: 2012-1-6 12:23
sffgah 发表于 2012-1-6 12:20
我帖的那个链接你看了么?E5200和E7400的对比,这是同一个架构么?说话那么冲,满嘴喷粪你几岁了?

新指令集CPU干不过老的你怎么不贴呢?

不同构架不同指令集跟性能挂钩这你要说出去,铁定给人当白痴一样
作者: sffgah    时间: 2012-1-6 12:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: 66666    时间: 2012-1-6 12:31
sffgah 发表于 2012-1-6 12:26
自己满嘴喷粪,E5200跟E7400还不是同一架构?不要选择性无视,E2140和E6550不是同一架构?这两个都是在 ...

两个当然是同一微构架,我说了在同构架下你说的话才有一些道理。

楼主转帖那文连微构架都不一样,还拿指令集当个宝,这种话给人喷活该。
作者: nom8393    时间: 2012-1-6 13:00
CISC的内置指令集不能无限扩充,这是硬伤。
作者: sd-iori    时间: 2012-1-6 13:04
其实在对比性能的时候,,

以日常应用来对比好了

硬件+OS,,作为一个整体去对比,,就OK了

初步印象,,好像大家目前都差不多吧
作者: raini    时间: 2012-1-6 15:13
比较本来就是在相同的条件下,不管条件是什么,即便是体验也可以。那arm架构和x86架构天生就不同,还有啥可比的,那又怎么得出差xx倍的结论呢?
作者: slice    时间: 2012-1-6 20:41
本帖最后由 slice 于 2012-1-6 20:45 编辑

Win8一出来,瞬间ARM和x86就有很多共同点可以放一起比较了。
或许目前的x86程序无法直接使用,但以后会运行这相同的Metro程序,甚至相同的游戏,或者相同功能相同版本软件的ARM版。
性能,功耗,价格?凌动和ARM就要正面交锋了。
作者: SubaRu    时间: 2012-1-6 21:10
slice 发表于 2012-1-6 20:41
Win8一出来,瞬间ARM和x86就有很多共同点可以放一起比较了。
或许目前的x86程序无法直接使用,但以后会运行 ...

好像X86版WIN8和ARM版的软件互不兼容的哦····

只是界面一样
作者: wxjiank    时间: 2012-1-6 21:48
文章其实还不错了,就是容易被曲解
作者: lptt3    时间: 2012-1-6 22:04
吃饭舀饭吃饭舀饭吃饭舀饭
作者: 54230859    时间: 2012-1-6 22:32
软件暂时不兼容 但是看资料 似乎以后arm x86的win8软件
可能用类似模拟方式统一运用  就好比曾经很热的java ?
作者: Tempestglen    时间: 2012-1-7 00:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: sunman110    时间: 2012-1-7 03:31
楼主属于读书读傻了吧。。。
你写1000万字的废话也不如简简单单的拿两个CPU具体测试一下。
真为某些人类的智商感到悲哀
作者: eternal0    时间: 2012-1-7 08:06
54230859 发表于 2012-1-6 22:32
软件暂时不兼容 但是看资料 似乎以后arm x86的win8软件
可能用类似模拟方式统一运用  就好比曾经很热的jav ...

显然这不可能,两种不同的指令集要想模拟就只有一句一句翻译二进制代码,这个效率可想而知。如果让ARM硬件上支持x86就违背ARM的初衷了。而且还需要一整套x86的运行库,这也会让ARM版Windows更加臃肿。

至于说.NET和Java,本来就有跨平台的能力,但是程序不多的说。
作者: nom8393    时间: 2012-1-7 08:07
slice 发表于 2012-1-6 20:41
Win8一出来,瞬间ARM和x86就有很多共同点可以放一起比较了。
或许目前的x86程序无法直接使用,但以后会运行 ...

底层不一样,所有的X86程序需要重新编译和优化才能在ARM版的Win8上运行。
作者: irio    时间: 2012-1-7 08:23
看到转帖出处就知道是娱乐帖了
作者: acqwer    时间: 2012-1-7 10:28
Tempestglen 发表于 2012-1-7 00:13
ios5 出来后,浏览网页没有马赛克,也更流畅了。

IPad居然上网没有马赛克了啊,真是历史的进步,人类的希望。
作者: slice    时间: 2012-1-7 15:33
本帖最后由 slice 于 2012-1-7 15:34 编辑
nom8393 发表于 2012-1-7 08:07
底层不一样,所有的X86程序需要重新编译和优化才能在ARM版的Win8上运行。

或许目前的x86程序无法直接使用,但以后会运行这相同的基于WinRT的Metro程序,甚至相同的游戏,或者相同功能相同版本软件的ARM版。

至少可以直接对比的地方就很多了,例如同样是IE10去跑HTML5测试1000条鱼啥的,看凌动平板还是4核ARM平板厉害。
作者: eternal0    时间: 2012-1-7 15:41
slice 发表于 2012-1-7 15:33
或许目前的x86程序无法直接使用,但以后会运行这相同的基于WinRT的Metro程序,甚至相同的游戏,或者相同功 ...

不管是否开启GPU加速,鱼箱那个测试都是单线程的,16核ARM一样是渣
作者: Minovsky    时间: 2012-1-7 17:12
SubaRu 发表于 2012-1-6 21:10
好像X86版WIN8和ARM版的软件互不兼容的哦····

只是界面一样

是不兼容,不过,对于程序员来说,哪里有钱赚才去哪里。
或许ARM和X86,某一方是强势,但是如果没相关程序出现,还是没用。
作者: xinshiji168    时间: 2012-1-7 17:32
jasonkarl 发表于 2012-1-5 18:50
买了魅族必然后悔……M9用户有感……

我见过同事拿的M9,屏幕暗淡无光,我的G11感觉要比他的屏幕好些。
作者: jasonkarl    时间: 2012-1-7 17:42
xinshiji168 发表于 2012-1-7 17:32
我见过同事拿的M9,屏幕暗淡无光,我的G11感觉要比他的屏幕好些。

魅族水军太牛了,你敢说魅族的坏话,直接口水淹死你~~我M9有点毛病都不敢说出来
作者: nom8393    时间: 2012-1-7 18:02
slice 发表于 2012-1-7 15:33
或许目前的x86程序无法直接使用,但以后会运行这相同的基于WinRT的Metro程序,甚至相同的游戏,或者相同功 ...

嗯,如果是基于.NET的程序基本上只需要做很少的工作就能把程序无缝迁移到ARM上了。
作者: slice    时间: 2012-1-8 11:26
nom8393 发表于 2012-1-7 18:02
嗯,如果是基于.NET的程序基本上只需要做很少的工作就能把程序无缝迁移到ARM上了。

XAML和HTML+javascript的基于WinRT的Metro程序应该是无需任何迁移工作。
作者: nom8393    时间: 2012-1-8 12:22
slice 发表于 2012-1-8 11:26
XAML和HTML+javascript的基于WinRT的Metro程序应该是无需任何迁移工作。

这种高级语言都是底层无关的。但是低层语言开发的应用很难直接迁移,比如很多用C写的游戏。
作者: slice    时间: 2012-1-8 20:59
本帖最后由 slice 于 2012-1-8 21:06 编辑
nom8393 发表于 2012-1-8 12:22
这种高级语言都是底层无关的。但是低层语言开发的应用很难直接迁移,比如很多用C写的游戏。

底层的也不见得就一定难以移植。
如果X86和ARM的Windows提供了一致的接口,那么ARM和X86也不过是最后编译的区别而已,你C语言的实现,或许改用C#去实现是大工程,但从X86变成ARM或许只是重新编译下而已,代码的调整可能很少 。
当然Metro的程序(XAML和HTML+JS)可以做到同样的binary就在不同平台上运行,也就是说无论X86还是ARM都会进同样的商店下载同样的程序。

作者: nom8393    时间: 2012-1-8 22:00
slice 发表于 2012-1-8 20:59
底层的也不见得就一定难以移植。
如果X86和ARM的Windows提供了一致的接口,那么ARM和X86也不过是最后编译 ...

即使只是重新编译,也会因为指令集的巨大差异导致编译时候选择不同类库进行编译;毕竟底层机器码差异太大了。更何况很多类库都要完全重写,这部分工作量还没算进去呢。

Win8带来的接口一致只能反映在类似于.NET的高级语言层面。虽然高级接口一致了,不过高级语言做出来的程序的指令效能可就不高了。你看看Future Mark的图形测试程序从来就不用C#或者JAVA。
作者: gjj2828    时间: 2012-1-9 22:10
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4