没看过上一篇请点这里:硬体控看过来,带你了解iPhone处理器为何这么强大? (Part2)
Apple从2013年九月iPhone 5S的心脏A7「Cyclone」开始迈进64位元的世界,也以此为起点,Apple Ax应用处理器开始展现惊世骇俗的效能优势,从2015年六月赶尽杀绝32位元应用程式,直到今年的iOS 11中止支援32位元处理器(意思就是只回朔支援到iPhone 5S),更是深具重大意义的里程碑。
64位元是为了破除高效能架构障碍
但64位元运算真的有这么神奇吗?当然不是,真正有举足轻重影响的,是ARM指令集扩充到64位元时,「顺便」带来的革新,特别是移除了打造高效能微架构的重大障碍。
要提高处理器效能,不外乎增加每个时脉周期可处理的指令数:
提高时脉,对于行动装置来说,这几乎是难以考虑的选项。
增加同时可以平行处理的指令数量,像硬体指令排程的超纯量(Superscalar)和编译器决定如何「一个萝卜一个坑」的超长指令集(VLIW)。
接着,提高管线效率,特别是当发生同时执行的指令,要存取相同暂存器而强碰时,就需要以「暂存器更名机制」为中心的「非循序指令执行」来解决。
前面有提到,电脑有别于计算器的最大差别,在于「条件判断的能力」。
你可将电脑程式的正常执行流程,想像成一个「棋盘」,以一个角落当做起点,对角线的角落作为终点,在棋盘上反覆移动,不限制前进或后退。如发生条件判断的分支(Branch),或无条件判断的跳跃(Jump),就会变更指令流,并且中断指令管线的运作,特别是必须先等待条件判断的执行结果,才能决定该分支是否发生的分支,对效能的伤害尤其明显。
所以某些指令集就具备了所谓「引述执行(Predicaton)」的能力,包含32位元的ARM指令集。一个在一般指令集的简单条件判断(相信各位一定看得懂):
beq ra, label // if (ra) = 0, branch to ‘label’
or rb, rb, rc // else move (rb) into rc
改用具备引述执行的条件搬移指令,一行就解决了,避开了分支指令,也无须启动分支预测机制。讲的直白一点,就是把所有相关工作打包起来送作堆,一次搞定。
cmovne ra, rb, rc
这对追求高度平行化的指令集,有着莫大的吸引力,所以也不外乎多数超长指令集(VLIW)电脑,都具备这样的能力,包含Intel的IA-64(Itanium),连x86从Pentium Pro开始也有cmov体系指令,只是因种种因素不那么实用,而逐渐边缘化了。
引述执行Predication的缺点
但天底下没有白吃的午餐,先不提「事后」才支援引述执行的困难度,引述执行不但会增加处理器的工作量,更会提高指令管线前端的复杂度,不仅不利于提升时脉,更会影响非循序指令执行引擎的设计,因为暂存器重新更名机制要「替身」的资料就更多了。很讽刺的,原本寄望可以提高指令平行化的引述执行,竟然反过来变成了打造高效能微架构的麻烦制造者。
64位元的ARMv8-A取消4位元引述执行(Predication)码,将省下的指令编码位元数,挪为倍增资料暂存器之用,不但降低了发生暂存器相依的机率,一并解除实作更高效率非循序指令集执行的紧箍咒,更是「在指令集扩充之路上,设法搬移未来微架构路障」的经典案例,这远比整数逻辑运算暂存器和记忆体平面定址空间扩充到64位元还重要上百倍。
苹果看到的64位元大未来
基于未来性,Apple也很早就把重心放在64位元效能,根据某些实际的指令排程输出率测试,Apple兼具32/64位元相容性的Ax应用处理器,64位元的指令输出量,就几乎是32位元的足足两倍,例如每个时脉可输出6个64位元指令,32位元就会腰斩。当然,Apple自家晶片亦具备极度优异的记忆体效能,A10X改弦易彻走向大型化L2快取,也隐约透露出些有趣的弦外之音,这就有赖前P.A.Semi团队的功力了。
问题又来了,那为何A11会强到破表?
有没有想起来,iOS 11已纯粹对应64位元环境?那A11为何还要硬扛着相容32位元ARM指令集的包袱呢?伺服器导向的Qualcomm Centriq 2400就是「纯64位元」ARM处理器。少了后顾之忧,自然就可以把所有电晶体预算砸到刀口上,效能自然好,这就是Apple同时掌握全部软硬体的天然优势。
最后,不提A11,光A10每个时脉最多可同时输出4个整数、2个浮点和2个记忆体载入,就已经很接近IBM Power7的水准,几乎是其他ARM对手的两倍,真是吓死人了。 A11有多可怕?我们以后再研究,谢谢收看。
Follow 我们的Page,每天追踪科技新闻!
想看更多英文版文章吗? 点我进去~