从GPU到CPU到5nm,并附带购买建议和小彩蛋。
发布会从CPU到GPU都绝口不提相比前代的提升,在苹果A系芯片的历史上怕是第一次。因而从上个月iPad Air4发布会结束后,A14的前景就蒙上一层阴影。有些充满信仰的人(包括我)先是推测可能有良率问题,再是对性能不抱希望以后转而期待功耗表现。如今吊了一个月胃口的A14总算随着首批iPhone 12和iPad Air4来到了大家手中,那么A14的表现究竟如何呢?
闲话不多说,总之是你们都知道我买了个iPhone12,然后丧心病狂地做了一大堆测试,之前也陆续放出了一些测试结果。昨晚开启冰箱模式后又有了些新的进展。于是在这里做个汇总,在专业但总是姗姗来迟的Andrei Review之前,做一点试探性的分析。
GPU
这次GPU的问题相对更大,在5nm密度增加的同时维持了原有的4核规模,性能几乎原地踏步,这种表现,加上发布会宣称A14相比A13有高达33亿晶体管的规模增加,使我们曾经认为是TSMC良率翻车导致不得不屏蔽原有的5核或者6核设计——毕竟从A13的规模看这次神经引擎规模翻倍也只需要吃掉大概4亿多晶体管,而单个GPU核心的晶体管数也只有差不多3亿,虽然增加的晶体管数不可能全在CPU、GPU、NE和SLC上,但33亿里面只有不到10亿在这几大件上似乎有些说不过去。
图2:近四代A系SoC规模对比
当然这个猜想目前仍然没有得到证实或证伪,只能等一波DieShot来看看究竟发生了什么。
真机到手后几经周折终于连上了GFX的服务器,于是我在10月24日发布了如下图的测试结果。
图3:曾在微博发布过的A14GPU测试数据
图中可见:
① A14的峰值性能相比A13提升微乎其微,除了Manhattan两项达到了10%以外剩下都在5%附近,而更糟糕的是,即使在改换了5nm制程的情况下,与这几乎可以忽略不计的性能提升相对应的是能效的原地踏步——就算架构没有改进,工艺的进步去哪里了?(以前这种在GPU上把工艺进步做没了的操作我们似乎只在菊系Mali身上见过,难道去年还被奉为天顶星的Apple GPU团队已经沦落至此?)
② 开启低电量模式后,翻天覆地——该模式在4%的平均功耗增加下获得了高达23%的平均性能提升,可以说完全达到了正常的“代差”的标准,特别是,这颗被我们戏称为“A14 Max-Q”的GPU,用后者一半的功耗达到甚至小幅超越了上代安卓旗舰骁龙865(587MHz版本)的性能……
图4:移动端GFXBench成绩汇总 by @暂时不叫这名了
③ 后来我去数据库里找到了A13在几项低水平测试(低水平测试在GFX中是ALU、驱动、纹理等子项的统称,尽管因为只测试某一部分,这些测试对AP的总压力较低,但测试中每一项都是跑到了极限性能的)中的表现,结果是Driver Overhead和Fill相比A13几乎没有区别(数据库中Fill项有几个高出平均13%的A13数据,可靠性存疑在此不作考虑),而ALU测试则是有约8%的性能提升(——考虑到A14仍然维持了4核心的规模,难道…又艹频了?…不会吧……)
图5:A14 GPU 功耗-性能曲线估计
④ 后来我还给出了如上所示的一张图(此图已经过冰箱数据修正,详见下文讨论),这个曲线可以更明确地反映高频部分功耗是怎样爆炸的——若以低电量模式(左起第4个点)为基准,峰值性能在仅仅提高了60%的情况下,功耗增加了240%之多……尽管高频部分功耗暴涨是半导体芯片一个正常的特性,也是大规模低频率的GPU能效表现一般更好的原因,但这种幅度的暴涨和暴涨所处的位置,似乎还是略快了一点……这提示我们本次A14的翻车可能和TSMC的工艺有关(当然仅凭这组数据我们也可以批评是苹果把频率艹太高了),这一点我们最后再来讨论。
提示1:关于场效应晶体管的功耗,一个经典的估算公式是Power=k*V*freq^2,k为比例系数,而因为FET的工作原理,在高频区间电压V与频率f的关系是大于线性的,相反由于IC设计上的某些瓶颈,高频段性能与频率的关系是小于或等于线性的,因而在这一区间功耗-性能的关系常常是大于等于三次方的,这也就是我们所说的功耗墙。提示2:因为实际上在iOS端测试的时候我们并不能对GPU进行锁频,所以有必要详细解释一下此图的数据处理过程。首先,我们以比较通用的Manhattan 3.1在低电量模式下的表现为基准,计算峰值输出时的相对性能和功耗——以低电量模式为基准是因为相对于峰值性能,低电量模式的功耗不大,所以表现更稳定,在不同压力的子项之间跨项折算因发热降频导致的误差更小;然后,由于表中所列几个子项在OnScreen测试下的帧率统一受到屏幕刷新率的限制,但不同子项在输出统一帧率的情况下实际给到GPU的压力又不同,这样我们就相当于得到了几个不同性能输出的数据,把这些数据按照低电量模式下对应项目与Manhattan 3.1的帧率比值进行折算,就得到了基于后者的相对性能;最后,右图来源于表中第二组数据,这仅仅是将100%基准由低电量模式转换为满血模式,需要的只是一步简单的比例式计算。需要特别注意的是,在对OnScreen性能进行折算的时候,必须考虑GFXBench显示iPhone 12实际的渲染分辨率为2436*1125,而非OffScreen通用的1920*1080,因此帧数要进行折算,这一步已经在图3中给出。
本来我以为对GPU的测试到这里就结束了,不料昨晚受到一些提示后开启了冰箱大法。因为网络原因只进行了部分测试,结果如下。
图6:A14 GFXBench冰箱成绩与室温成绩对比
此前的测试尽管是室温下进行的,但这大秋天本扁的住处室温仅有24℃左右,并且测试过程已经加了外置风扇来散热,但结果表明我还是低估了高密度5nm的热密度和iPhone在散热堆料上的抠门:仅有的三项冰箱测试数据显示出了相比室温测试超过5%的性能提升,这三项相比A13的平均性能提升也因此由5%来到了11%,特别是Manhattan 3.1项目的代际提升已经达到了16%,在这个遍地是牙膏的时代已经勉强称得上是合格的表现了。然而,冰箱只是给了一个更有利于GPU进行性能输出的条件,并不能带来质的变化,因而随着性能的进一步增加,功耗的涨幅也齐刷刷地大于性能的涨幅,结果这三项平均下来相比于A13竟然还产生了2%的能效下降……
提示3:根据半导体的物理特性,低温的确可以在一定程度上降低半导体在同负载下的功耗,这或许是表中冰箱与室温的能效差距没有拉开很远的原因,但很显然,测试条件中这大约10℃给半导体功耗造成的影响并没有弥补频率提升带来的能效下降,所以总的能效仍然是下降的。提示4:对GPU(其实CPU也一样)进行性能测试的原理其实非常简单,就是对不同的GPU给予相同的画面,看各个GPU在全力输出的状态下能渲染到多高的帧率,以此作为性能的衡量标准。但在GFXBench的场景测试中,每一个测试场景由大约1分钟的动画构成,这1分钟内不同时刻动画画面的复杂度是不同的,因而如果细看测试数据会发现在不同时刻的瞬时帧率也会不同。下图展示了A14在进行Manhattan 3.1测试时的Frametimes图,Frametimes即渲染单帧需要的时间,用1秒除以Frametimes得到的就是那一时刻的瞬时帧率,由此可见在图示场景中后半段的画面复杂度要明显高于前半段。需要再次强调的是,因为OffScreen测试是以复杂度有变化的动态画面测试极限帧率,因而后半段Frametimes的升高并不一定意味着GPU发生了降频——通过对比降频可能微乎其微的低电量模式折线图,我们能更清晰地认识到这一点,而如果某次测试中Frametimes折线图的趋势相比低电量模式有较大差异,那么我们才能认为GPU在测试中表现出了性能的不稳定性。另外,从OnScreen图中可以看出,Frametimes平均值是非常稳定的,而这个稳定值正是1000ms/60FPS的结果,可见OnScreen的限制因素是屏幕刷新率,或者说由屏幕刷新率确定的渲染帧率,这是OnScreen测试和OffScreen测试的不同所在。
图7:Manhattan3.1测试详情
另外,在把iPad Air4和iPhone12系列这两款同样使用A14芯片的设备进行跨平台比较的时候,我们发现二者在Geekbench5的Compute GPU测试中表现出现了较大差距,并且Air4在该项目上的成绩甚至超过了A12Z。
图8:Geekbench5 Compute成绩对比
尽管笔者手中并没有Air4,因此无法测试Air4的GFXBench表现,但有一点是可以肯定的:Geekbench5的Compute测试是基于GPU的ALU运算性能测试,与图形渲染这一GPU的日常使用场景相差甚远,因此不能以Compute成绩来推断图形成绩。从A12的GPU到A14的GPU,尽管架构上稍有进步、工艺也从7nm换成了5nm,但对A12Z来说,双倍于移动端的核心规模和内存位宽才是它的核心竞争力,A14想在性能上与A12Z抗衡是完全不可能的。毕竟官方的数据不会骗人——
图9:苹果:A14 GPU性能提升30%——不好意思,是对比A12
至于能效,本来凭借5nm,A14似乎可以有比较大的优势,但考虑到5nm的高频部分似乎一言难尽,加上A12Z更高的性能可以赢得很大的降频换能效的空间……算了吧,Pro毕竟是Pro。你看,苹果为了拉开差距,甚至可以强行给iPad Air增加每边14像素(约1.35mm)的边框宽度,你还能指望一个翻车的、规模小一半的A14越级?
图10:iPad Air4与11寸iPad Pro真机对比
提示5:按本扁的测试数据进行指数拟合得到A12Z在输出本扁手上A14冰箱成绩的情况下功耗也在8W以内,与A14的功耗十分接近,而如果Air4进一步提频,由于A12Z所处的频率区间功耗增速低于A14的峰值区间,所以A14继续提频能效下降会更快——显然,5nm无法抹平一倍的规模差距。
CPU
对于笔者这种打死不玩手游的人,GPU表现其实多半是一个“我其实不怎么需要,但你不能没有”的指标,而CPU才是决定了一款手机体验是不是好、在手里能用几年的核心指标,即使续航这种看似与电池相关度更大的性能指标,其中CPU的影响也举足轻重(毕竟电池衰减了可以换,CPU不能)。(当然,决定手机能用几年的指标中,还有一项是iPhone特有的,那就是抠门抠到乔布斯故居的运行内存大小……)
图11:近四代iPhone CPU GB5成绩(堆积柱形图)
首先我们看到的自然是A11以来历代的跑分,然后发现果然令人失望,A14相比于A13的提升幅度并不大,与几个月前传闻的历史最大提升更是相去甚远。然后按照惯例,我们打开低电量模式,却发现了非常不寻常的结果:
图12:各代iPhone低电量模式GB5成绩对比
在iOS 14.1中,A14低电量模式下的大核频率仅为1.29GHz,不仅比A13的1.87GHz低了一大截,甚至也不如A11,于是在单核得分上被A13无情吊打就成了理所当然。然而,多核成绩却出奇地高,甚至只比正常模式低了900分——多核分数的降幅比单核还小,实在是匪夷所思。
结合前述GPU结果,在越来越多应用开始能利用多核负载的情况下,我们有下图结论:
图13:Max-Q万岁
至于为什么低电量模式的多核如此反常,得益于价值68块大洋的GB5 Pro(咳咳,为了做这期测试刚买的,你们还不打个赏表示一下?)
图14:我就跑个分你还要收我68块,呜呜呜
我们能自由地选择负载的核心数,进而计算每增加一个核心对多核性能的增益。
图15:A14正常模式GB5分核心成绩
图16:A14 Max-Q模式GB5分核心成绩
从中可以看到几个疑点:
① 正常模式下双核成绩仅为单核成绩的不足1.7倍,除非多线程效率崩了,否则很有可能表明大核心在多核负载的情况下发生了降频——而根据以往A系芯片的表现(A11和A12Z的结果见下图),多线程效率应该不至于崩得这么严重,所以推测双核负载时大核心频率似乎降到了2.6±0.1GHz。
图17:A11和A12Z的GB5分核心成绩
② 每增加一个小核多线程成绩的增量看上去十分稳定,但奇怪的是低电量模式下小核心对性能的贡献十分稳定地比正常模式下高出25%。
后来听说别人跑出了大约4300分的多核成绩,笔者感觉自己买到了雷,不服之下把手机丢进了满是香肠和豆制品的冰箱……然后,果然……
图18:A14冰箱模式成绩
冰箱中的A14双核成绩上升到单核的1.82倍,基于这个成绩本扁推测即使有降频应该也只是0.1G左右,不会像之前那样夸张。不过,第3到第6核产生的分数增量变得不再稳定,并且小核的成绩贡献也没有达到低电量模式下的贡献值,前一个问题我猜应该和负载调度有关,而后一个问题,笔者推测是受到系统缓存、内存和跨核心簇调度造成的延迟等各方面的影响,大核满血运行时,小核能吃到的外围资源就相对较少,因而提供的性能增益也较低,而在低电量模式下大核不像正常情况中那么吃资源,小核可以在调度上占据相对主导的地位,簇内通过L2交换的数据比例增加,也能吃到更多的外围资源,因而能提供更强的性能增益。如果这种推断合理,那么我们可以进一步预测,如果由小核心来跑单核测试,其性能将比低电量模式的6C-2C差值更高。同时按这个思路或许我们也能解释A55簇在部分SoC中GB5成绩“虚高”的现象:相对来说,在那些SoC中安卓大核吃的资源和输出的性能都相对更少,因而留给本是废柴的A55稍多一些的发挥空间,而苹果的小核虽然绝对性能强悍,但有两个大核占着资源大头,在大核正常工作时留给小核的发挥余地并不多——当然,如果论及输出性能的绝对值,仍然是“瘦死的骆驼比马大”。
我们再来看一个更清晰的对比图,下图同时也显示在正常模式中,室温下多线程性能的缩水基本来自于大核的降频,而小核成绩则相对稳定。
图19:A14不同模式下大小核心簇的GB5多核性能贡献
熟悉笔者的朋友们一定知道,苹果的小核自A11一来就是一大吹点,既是苹果在多核性能上以6胜8的关键,也是iPhone在电池容量相对较低的情况下赖以维持续航的法宝。而这一次,A14的小核似乎又进化了。
图20:几款A系CPU大小核心簇的GB5多核性能贡献
利用CPUDasher插件的粗略观察显示A14小核在低电量模式下的频率似乎是1824MHz,这一结果如果没有大的出入,那么基于低电量模式下小核簇的成绩贡献,可以推算出A14小核的性能至少是238.7/Core/GHz,而我们知道麒麟995上超大核A76的单核性能大约是271/GHz……
四发射小核果然诚不欺我么……
顺便一提,A55的成绩没找到,找到一个骁龙625上A53单核分数,按频率算下来是82/GHz,或者按多核算的话,62.6/Core/GHz……
——即便是2015年的小核A53,四个捆一起都能胜过A14的一个小核,我说苹果辣鸡你们没意见吧?(狗头)
图21:部分核心(簇)GB5单位GHz性能
由于iOS读取电流的刷新率实在是太低(20s一刷新),而Geekbench的负载又不如GFXBench那样稳定,所以CPU的功耗目前很难得出一个精确的结果,这一部分还是等Andrei的SPEC测试吧。我得到的以下数据仅供参考。
图22:iPhone 12典型功耗粗测
当然了,参考上述数据我们能大概得到一个结论就是,A14虽然已经被钦定为翻车一代,但在灵活的调(jiang)度(pin)策略下,其峰值功耗也并没有太高——事实上这也是苹果近几年的一贯作风了。而特别令人震惊的是低电量模式下的Geekbench5测试——如我们之前所说,这次低电量模式下小核可以说火力全开,并且根据上面测试的数据(图16),低电量模式下双大核应该是维持了稳定的1.29GHz频率而并未进一步下降,等于说全核心在平均3W左右、峰值不超过3.5W的功耗下跑出了一个k995的性能;而总输出性能超过半个S865的小核簇在其中所占的功耗甚至可能不足1W……
表情包again——
图23:再来一次
不过,不管调度多么灵活、Max-Q模式多么强悍,测试到现在有一句话我一定要说:在安卓机为了散热牺牲重量去堆水冷、热管和立体散热片的今天,不求苹果堆多少散热,好歹给个正常的散热结构吧……双层主板把SoC夹中间还不做导热,搞得做个测评整得跟化学实验似的,一会儿冰箱一会儿室温。或许明年苹果就要要求媒体在做性能测试的时候统一规定“标准状况”了吧?
虽然Geekbench5因为去掉了争议很大的内存分被更广泛地接受,但过高的整数比重和略奇葩的负载内容(以及收费的下载方式)让Geekbench4仍然没有淡出我们的视野,特别是Geekbench4中的三个内存子项测试,尽管存在较大漏洞且放在CPU成绩中并不合适,但在没有被作弊干扰的情况下其测试结果仍然有一定的参考价值。
图24:近四代iPhone CPU Geekbench4性能对比
上图是A11到A14的Geekbench4成绩对比(值得一提的是A14为了获得更高的成绩仍然被我丢进了冰箱,并因此的确获得了大约500分的多核性能增益)。图中可见:GB4的分数提升似乎比GB5更大,并且相比于A11到A13的两次迭代,A14的内存分数有了大幅进步。
除了每代固定大幅进化的AES外,在GB4中进步幅度最大的两个子项都来自浮点,一个是SGEMM,一个是Gaussian Blur,这与我们已知的A14架构在浮点上的升级密不可分。而内存的三个子项除了均匀进化外,内存带宽有了大幅度的进步——这并非因为A14搭配了什么新型内存(众所周知今年是原地踏步的LPDDR4x),事实上现代移动SoC上内存带宽限制更明显的往往是GPU,CPU相比之下常常并不能完全利用内存带宽,就像此处跑分所显示的,A14的内存带宽项目原始成绩达到了29.1GB/s,但从理论计算上看这个带宽早在iPhone8那年就达到了。这里A14在三个内存项目上的进步,应该与流水线的改进和时钟频率提升等有关。
图25:近四代iPhone CPU GB4内存子项目成绩对比
既然这次内存有如此大的进步,那么我们也可以把一些其他的奇奇怪怪的CPU拉来一起对比——下图中我们就能看出,尽管A10X本身拥有双倍的内存位宽,但(单颗)Hurricane的访存吞吐能力弱于FireStorm,而拥有4个Vortex的A12X/Z在多核Copy和Bandwidth上的优势则更加明显;延迟项上,Intel的Ringbus配上高时钟频率的Skylake和桌面级3000MHz DDR4内存,表示还能再战N年。
图26:GB4内存子项成绩跨平台对比
关于TSMC的第一代5nm
有关A14两大件的测试和分析到此为止,从目前的结果上来看,虽然在这个集体撞墙的大环境下远远算不上A10级别的翻车,但毫无疑问表现不尽如人意。我们调侃Max-Q强无敌其实也不完全是吹捧苹果堆料到丧心病狂的小核,另一个角度上也表现着对大核进步缓慢的无奈。
自iPad Air4发布会后,有一个问题就一直盘旋在A14之上:翻车的到底是Apple,还是TSMC?
此前由于33亿晶体管中至少有一半去向不明,一切疑云似乎都指向TSMC的良率,但饱受断供困扰的麒麟9000却能堆出153亿晶体管和达到ARM设计极限的24核G78——尽管的确有部分芯片应该是因为良率问题被砍成了22核的9000E,但既然华为能够堆出规模超过A14 30%的SoC,我们没理由认为A14的良率翻车到5核或者6核的GPU都要砍回4核——何况断供之后没了华为的竞价,Apple理应在与TSMC的价格谈判中占据更大的主动权才对。当然,A14量产时间早于K9000或许也会造成一定的影响,总之是否有内容被屏蔽在DieShot出来之前应该是没有什么可以验证的手段了。
前面关于GPU的测试和由此得到的功耗-性能曲线,似乎指向了5nm高频表现糟糕的事实。尽管我们很难得知苹果GPU的时钟频率,但来自K9000的数据或许可以作为参考。
虽然24核Mali G78是当前争议的焦点,峰值超过10W的浮点功耗和9W的GFXBench图形功耗似乎有点让人回想起当年1037MHz 718的恐怖。不过由于展示机无法冷却测试,目前跑出的GFXBench成绩均有一定程度的降频(参见前文对GFXBench测试机制的解释),所以我们并不能确定真实的能效情况如何,并且G78作为一个新的GPU架构,其可靠性也是个未知数。
可以作为参考的,其实是K9000的CPU,毕竟这颗“新麒麟”上搭载的A77对我们来说已经是十分熟悉的“老古董”了(狗头)。
图27:GPUGFLOPS CPU拷机数据汇总 by @暂时不叫这名了
即使不深入分析,我们或许也能看出上表中K9000那颗大核的功耗也实在是有点“鹤立鸡群”。而如果我们摘取表中所有A77的数据,按半导体工艺分类,作功耗-MIX2性能图的话,会得到下图所示的结果。
图28:A77拷机MIX2数据拟合
图中曲线全部采取指数拟合。如果你觉得左图中N5的曲线比N7P更靠上有些过去夸张,或者N7P是占了取样点频率更低的便宜,那么我们也可以按照右图所示的,把N5和N7P不加区分地拟合——似乎也没有哪里不对?
提示6:这里横轴是性能而不是频率,可以排除Cache等定制选项和其他因素对IPC的影响。
虽然现在就给5nm判定为“翻车”甚至“20nm翻版”有些过于草率,但以目前可以取得的信息来看,至少TSMC翻车的概率应该是大于Apple芯片设计翻车的概率的。。。
提示7:尽管我们常说,尺度更小的工艺制程往往不适合拉高频,但事实上在一定范围内,更短制程在频率上本来是具有先天优势的——这正是我们常说的“新一代半导体工艺性能提升xx%”所指。因此,在工艺跨代时要求约8~10%的频率提升并不算苛刻。所以就让我们拭目以待AnandTech的SPEC数据,看看2.99GHz的Firestorm相比于2.67GHz的Lightning功耗是增是减,某种意义上这或许可以用以判定是TSMC的5nm牛皮吹破,还是Apple艹频丧心病狂。
总结:iPhone 12到底值不值得/推不推荐买?
简单总结A14的话,笔者认为尽管其提升幅度不如预期,但总体表现还勉强不算翻车。截至本文写到这里时,我手上的iPhone 12在上一次完全充电后已经使用了24小时,其中亮屏时间6小时,仍然剩余18%的电量。考虑到其中大约35%的电量被我拿去做了2个小时的GFXBench和Geekbench冰箱测试,我认为这应该算是一个及格的续航成绩了。12的日常体验和充电续航测试我会陆续在微博更新,欢迎大家关注~
如果要让笔者在iPhone11和12之间给出推荐的话,考虑到5G和高通基带的加持以及体积重量的大幅减少,我会更偏向12一点,但如果你想捡个便宜买个11用上两年,考虑到5G的资费,倒也不是不行;而如果要让我推荐是否换机的话,我觉得手持A12以前的处理器用户大概是时候考虑换机了,而如果你手里是A12或者A13,那么A14的升级从目前看来似乎没有明确的必要,或者说今年就SoC来看并不是一个像2017年那样的换机黄金期。
至于买mini还是12还是Pro还是ProMax……我微博之前已经给出了一个(不正经的)表格,各位可以作为参考。
图29:选iPhone 12的N个理由
彩蛋:A11的省电模式到底出了什么bug?
有关A14的讨论早就完成了,但如果你看得仔细,在看到图12的时候很难不产生这样的疑问:2+4的核心配置并非A14特有,那么在A11和A13上,低电量模式的多核分数为什么会这么低?
图30:同图12
我抱着试试看的态度,在低电量模式下用GB5Pro又跑了2C到5C负载的成绩,6C成绩的反常下降促使我又把年事已高的小8丢进冰箱,得到了一组冰箱数据。两组数据汇总如下图,
图31:A11低电量模式GB5成绩分析
结果显示,A11的低电量模式下,第三个核心开始提供的性能增加就微乎其微。如果按这个思路,我们似乎会得到如下图所示的结论,即当A11开启低电量模式时小核提供的性能输出被压缩至几乎为零,而全靠两个低频大核来负载。
图32:推测
常识告诉我们这不符合“低电量模式”的根本目的——省电。同时,这一常识提示我们,正常的以省电为目的的调度中,应当优先给予能效更高的小核心负载(比如某省电精灵制造厂当年在4*A73+4*A53的CPU上就喜欢采用小核优先负载的调度策略)。
于是,我打开了Xcode,利用Instruments中的Time Profiler记录了低电量模式下iPhone 8运行GB5测试的核心负载情况,如下图所示。
图33:A11低电量模式下给定核心数运行GB5时的负载情况
图中清晰地显示了A11在低电量模式下的调度情况:由大核心承担单核和双核负载;由两个大核心和1个小核心承担三核负载;从四核负载开始,负载承担者开始向小核心偏移,在四核测试的后半段出现了大核心完全空载而仅由四个Mistral负载的情况(红色箭头所示位置);五核心和六核心负载的测试中则完全由小核占据主导,呈现4+1、4+2的调度模式,并且在末段都出现了大核心强制空载的情况(红圈所示位置),在六核心测试中大核的时间平均负载甚至要比五核心测试更低。另外,在静息状态下,A11还倾向于选择让两颗Monsoon完全离线(如图中红色虚线框所示),而由四颗Mistral在线承担待机任务。
由此,图31中一切疑惑全部得到了答案——A11低电量模式下3C至6C段成绩没有明显提升是大核心逐步离线所致,苹果用随着线程需求增加逐步由小核心替代大核心的调度方案保证了足够的能效,又用强制大核心离线的方式维持低电量模式下多核负载的总功耗不超过某个阈值。
同样地,下图显示了A14在单核心、6核心和4核心负载测试下的调度情况,显然,对A14来说低电量模式下仍然是大核优先负载的,在增加到第3个核心开始由小核承担负载,直至吃满6个核心,整个过程中大核心作为前两个承担负载的核心始终不离线,这与我们GB5分数的观测结果相一致。
图34:A14低电量模式下给定核心数运行GB5时的负载情况
至此,我们终于认识到,图12(或图30)中所示的A11、A13和A14在低电量模式下多核跑分天差地别是调度策略不同导致的。那么,苹果为什么会采取这种调度策略呢?
笔者猜测,对于年事已高的过气旗舰,苹果倾向于在低电量模式下放弃性能而提升能效,以尽可能获得更好的续航;而对于刚刚发售的新机,由于其续航表现相对更好,则低电量模式下就会优先满足用户对性能(流畅度)的需求,这样的策略使当代旗舰机无论在实际体验上还是性能测试上,都能输出很高的水平,并与过气旗舰尽可能地拉开差距。
上面的话说得有点绕了,说得简单一点其实就是:
过气旗舰不如狗,逼你买新的就对了。
图35:库克是真的会做生意
不过相比于当年的“省电精灵”,A系芯片更灵活的调度保证了在任务需要核心数较少的情况下,过气旗舰仍然能通过大核负载来获得性能,并且负载在大小核心之间的迁移相比于当年大小核簇的安卓旗舰要灵活得多。
当然,还有一个悬而未决的问题是,坐拥灵活调度的A14,为什么在省电模式单核负载的情况下不能睿频?毕竟理论上按照前述测试结果,在GB5中1.0~1.6W的单核功耗仍然有不小的睿频空间。对此笔者作如下猜测:
① Apple设置了一个功耗上限,并以压力最大的测试中功耗不超过该上限为标准确定了低电量模式的频率值,因此由于Firestorm的浮点加宽,就像Intel的AVX512一样在某些特定测试下同频功耗会飙得很高,于是拉低了这个设定的频率值;
② TSMC的5nm工艺严重翻车,以至于大核频率拉升至哪怕1.5GHz就足以使功耗超过Apple对低电量模式的预期;
③ 反正都是新机没人在意这个,就懒得写睿频了,直接按能最大化多核分数/能效的策略预设,等到12系变过气旗舰的时候再改回过气旗舰不如狗专属的调度模式。
总之,我本人表示非常期待看到iOS14.7或者15版本上A14的省电模式调度,不知道会不会……
图36:早晚都是要过气的
说到这里我不得不再次黑一把ARM的big.LITTLE及其进化版DynamIQ。
安卓阵营第一个big.LITTLE CPU诞生于2013年,那个时候本扁甚至还不懂什么叫CPU架构。
提示8:2013Q2,Exynos 5410是第一款双四核CPU;2013Q4由联发科发布了MT6592,是第一款“真八核”CPU。
四年后的2017年,ARM发布了DynamIQ技术,首次在同一个核心簇(Cluster)内允许不同架构、超过四个CPU核心存在。为了实现这一操作,ARM将原本每个核心簇簇内共享的L2 Cache变更为整个CPU簇共享的L3 Cache,并在每个核心中加入了独立的L2 Cache,这就是后来在技术测评中常常看到的“pL2”(private L2)和“sL3”(shared L3),并且在CPU外部增加了一级可选的系统缓存(即SLC=System Level Cache),构成了一个复杂度很高的四级缓存系统(或许正是这一点搞得高通在内存延迟上连年“翻车”)。
或许是由于早年有异步多核(aSMP)的技术基础,高通成为了DynamIQ跟进最快、玩得最好的厂商,其1+3+4的核心配置,把“通过削减缓存节省成本同时降低中核心功耗、又能维持单个大核心高频跑分”这一套玩得轻车熟路,相比之下海思在缓存配置上就显得“敦厚老实”许多,在相当一段时间内并没有找到DynamIQ的“精髓”,并且核心调度的灵活性也不如高通CPU。而三星,作为误入歧途选择自研超大核架构的“苹果追随者”,则在自研架构翻车的同时连续搞出了数代不配pL2的高频A55小核……
为什么谈到DynamIQ的“精髓”,要带个引号呢?因为DynamIQ纸面发布的时间是2017年上半年,那个时候安卓阵营还沉浸在嘲讽苹果A10的快乐之中——后者集胶水双核、高频功耗爆炸、低频漏电严重导致同频能效开倒车、小核形同虚设只能待机等一系列翻车点于一身,时至今日仍然是苹果SoC之耻——就像高通的810、820,三星的9810、9820一样。
然而仅仅过了半年,A11拿出了沿用至今的2+4配置,其中无论是调度的灵活性、睿频策略,还是小核的性能和能效,三年后的今天安卓仍然无人能及……
一个有趣的事实是:ARM今年给乱序4发射的A78提供了32K/64K可选的L1-I/D和最大4M的sL3;而苹果给同样乱序4发射的Icestorm配置了128K的L1-I、64K的L1-D,和4M的L2……
——我是该夸ARM用指令缓存、流水线优化和更大规模的后端在同发射同缓存下获得了更好的性能呢,还是该骂他们家大核跟别人小核一个等级呢……
马上1202年了,苹果用A55的功耗快做出A76的IPC了,苹果睿频玩了四年了,安卓还挂着四个待机核说自己八核处理器,还抱着1+3高低频的跑分专用设定不放(菊厂那边甚至有越来越喊香的趋势,好在高通马上要上异构的X1+A78了)……安卓玩了八年大小核,苹果玩到第五年,然后安卓在大小核上的水平似乎还停留在苹果第二年的水平以下……
不过话说回来,A14也只是个勉强及格的水平。不仅今年的安卓阵营,甚至今年整个移动SoC市场,现在看来还是寄希望于三星的5LPE不要步TSMC N5后尘吧,那样至少875还能在工艺上吃点优势,压住(据传闻是)2.84GHz的5发射“性能怪兽”Cortex-X1。
本文作者为微博用户:小扁蓝(致敬这位技术分析大牛!)