在苹果iPhone 5s的64位处理器一炮打响之后,手机似乎在一夜之间发生了大跃进。厂商们纷纷推出自家的64位手机处理器,64位手机已经不是纸面上的概念,而是能买到的实实在在的产品。 要知道,当年家用电脑可是花了十多年才从32位进化到64位,智能手机这才短短几年,变化就如此迅速,64位处理器对手机而言究竟有何含义?64位会快很多吗?64位手机值不值得买?现在我们就以手机上的64位为话题,带你剖开现象看本质。 什么是64位? 先回答最基本的问题,什么是64位?衡量一个人的智商水平要看他的大脑,同样,判断手机是不是64位,也要看手机的“大脑”,这个大脑就是手机的CPU(中央处理器)。我们所说的64位手机,实际上是指使用了64位处理器的手机。 具体到处理器的内部,64位处理器指逻辑算数单元、寄存器、总线宽度都是64位(8个字节)的处理器。相比32位,64位能一次性处理更长的指令。有很多手机处理器都达到了这个标准,比如高通骁龙410/615/810,苹果的A7、A8,英特尔Atom等。 处理器的工作就是运行指令,因此,我们还必须提到“指令集”这个概念。处理器的计算和控制都是通过各种指令完成的,每款处理器在设计时就规定了一系列与其硬件电路相配合的指令系统,这套指令的集合统称指令集——你可以把它理解为处理器与外界沟通的语言。市面上有许多不同处理器指令集,就好比有些人的母语是英语,有些人的母语则是中文。 目前大多数64位手机处理器都使用ARM公司的ARMv8 64位指令集,只有英特尔的Atom处理器是例外,它采用了x86-64指令集,但英特尔在手机市场上的份额小得可怜,我们今天就直接略过它,专门来讲讲主流的ARMv8 64位手机。 ARMv8指令集是ARM公司专门针对手机、移动和嵌入式设备推出的64位指令集,它包含了AArch64、AArch32两种主要执行状态。看名字你就知道了,AArch64专注于64位处理,AArch32则用来支持现有的32位ARM指令集。从这个角度来看ARMv8是一套不错的指令集,它既支持未来的64位程序,也向下兼容现有32位程序。有了ARMv8的支撑,以后的64位手机操作系统,如Android L 64bit都可以简单、高效地支持现有的32位App,你不用担心兼容性问题。
为了帮助合作伙伴们更好更快的拿出有竞争力的产品,ARM还专门制作了两个支持ARMv8指令集的处理器参考架构:Cortex-A53和Cortex-A57。如果说ARMv8指令集是一门语言,Cortex-A53和Cortex-A57就是基于这门语言的习题册,ARM这位“老师”利用ARMv8布置了一道道“题目”,厂商们只要照着做,就能生产出处理器成品了。 64真的比32位快一倍? 这是一个经常被提起的问题,64位真的要比32位快一倍吗?答案当然是NO,但原因很少有人讲得清楚。记住下面这三条理由,下次跟朋友聊手机时你的逼格会提升很多。 首先,指令集不是1+1=2这么简单,指令的长度并不直接等于性能。尽管从数字上看,64位指令的确要比32位指令更长,但很多时候我们并不需要那么复杂的指令。一个应用程序(App)拥有成千上万行代码,CPU在执行每条代码时又会把它分割成无数条指令,编译器会自动决定怎样将指令组合起来最高效,它们并非都需要64位的字长。 一个典型的例子就是ARMv8指令集的数据模型。ARM在官方白皮书中指出,即使在纯64位模式下,ARMv8指令集数据模型中也并非每个指令都要求64位格式。另外,官方白皮书还提到,ARMv8指令集架构定义的指令长度并非64位,而是标准的32位定长。这些事实告诉我们,指令集并非越长越好。
其次,唯处理器论性能,太片面了。比如,玩大型3D游戏,GPU(图形处理器)会更加影响帧数;而拍摄高清照片/4K视频时,DSP(可编程信号处理器)则事关重大。手机的SoC是包含CPU、GPU、DSP、通讯模块等大量功能的集合体,不同的应用场景会侧重于不同部件,单独以CPU一个部件来衡量性能未免太过片面。 最后,64位确实好,但程序本身的支持更重要。前面我已经提到,ARMv8 64位指令集包含AArch64、AArch32两种主要执行状态,如果不针对AArch64重新编写程序,那么程序默认就会在AArch32状态下运行——也就是说,现在的App都是32位的,跟64位一毛钱关系都没有,在64位处理器上运行32位程序,性能不会有任何提升。 |