「科普」自研SoC行不行?Google Tensor测试与分析

sw

因为上一代用骁龙765G的骚操作,在大家心目当中,GooglePixel系列算是断更一代。而Pixel6系列就不同了,有Google自研SoC——GoogleTensor(Tensor是张量的意思,名字就很AI,很ML)、追上时代的相机硬件,也有相对厚道的价格。


重回旗舰市场的计算摄影大佬,终于肯用现代的CMOS了!机圈立即奔走相告,直到国外用户拿到真机,Anandtech放出GoogleTensor的测试成绩和分析……

在不改变Anandtech原意的情况下,我们对这颗如此重要和有趣的SoC的内容进行整理和编译,原文

全自研还是魔改(半定制)?

Google表示GoogleTensor是迈向新型工作负载探索之旅的起点,现有芯片方案无法实现他们说的目标。凭借多年来的机器学习研究经验,Google把Tensor做成一款以机器学习作为差异化的SoC,据说其让Pixel能实现很多独特的新功能。

关于GoogleTensor的第一个争议是,它是全自研?还是魔改(半定制)?这里主要看你对“自研”的定义,Google和三星看似密切的合作,模糊了传统的自研和半定制之间的界限。

在Google内部,GoogleTensor代号是GS101,可能是GoogleSoC或GoogleSilicon的意思。而之前爆料说的Whitechapel(白教堂),还没有任何证据表明其是真实存在的芯片。


而GoogleTensor基本遵循三星Exynos的命名规则,其ID是“0x09845000”,拆解后能看到丝印是S5P9845(编者:原文发布之初,认为ID对应S5E9845,但经TechInsights拆解,确认是S5P9845)。作为参考,三星Exynos2100的ID是S5E9840,Exynos1080是S5E9815。

几年前就有报道说三星开始提供半定制的芯片服务,当时就有三星与思科、Google的合作消息。ETNews在2020年8月的文章中提到,三星会根据客户需求提供“定制”技术和功能,甚至从芯片设计阶段就开始提供。

三星不再是简单的芯片制造商,而是完全参与芯片设计,这都可以和ASIC设计服务相提并论了。但这是个很特殊的情况,毕竟三星不但有台积电那样的芯片代工业务,它也有自己的自研SoC。

GoogleTensor和三星Exynos高度同源,除了大家常说的CPU、GPU、NPU等高级结构外,芯片中的基本结构很多都是同源的。虽然纸面上,三星、联发科、海思,甚至高通(只有CPU方面),用的都是arm的CortexCPU和MaliGPU公版架构,但它们的底层架构还是非常不同的。

GoogleTensor使用的是三星Exynos的框架,不但有相同的时钟和电源管理架构,它们的存储控制器、外部接口的PHYIP等高级块,甚至连ISP和媒体编解码器等较大的IP功能块都很相似。有趣的是,Github上已经有GS101的公开信息,可以1:1地比较它和Exynos的结构组成。

不过,虽然用了Exynos的基础模块和框架,但SoC的定义确实由Google控制,结构和IP块之间的连接设计上,GoogleTensor和三星Exynos都是不同的。

例如Exynos上,CPU是用总线连起来的,而GoogleTensor的CPU集群是被集成在一个更大的CCI里面。从外部看,可能是用了不同的总线设计,也可能是完全不同的IP。另外,像内存控制器的连接方式,它们也是不太一样的。

狂野的性能规格

单看CPU就知道GoogleTensor和大路货不一样,2xX1+2xA76+4xA55,这个“2+2+4”结构在三星Exynos9820和Exynos990都出现过。但当今Android旗舰SoC中,1+3+4才是绝对的主流。而且敢堆2颗X1的,仅Google一家。


理论上有两颗X1超大核,其CPU多核性能会比单颗X1的产品更强。而频率上,GoogleTensor的X1都是2.8GHz,略低于骁龙888的2.84GHz和Exynos2100的2.91Hhz。此外,Google还和骁龙888一样给了1MBL2缓存,比Exynos2100的512KB残血X1更猛。

大核(编者:你喜欢叫中核也行)这边,Google选择了古早的A76架构,这是件很有争议性的事(2.25GHz,256KB的L2缓存)。毕竟这并不合理,因为A77和A78的性能和能效比都更高。连Anandtech都没从Google那里得到明确的解释。

他们猜测可能是几年前设计芯片的时候,三星手上也没有更新的IP供Google选择。也可能是在超大核换成X1的时候,没有时间连大核也一起换了。但Google应该不是特意选用A76的,因为从下面的测试可以发现,A76真的是跟不上时代了。

小核这边,4个1.8GHz的A55。Google选择了128KB的L2缓存,而不是三星Exynos自己用的64KB,这让这个CPU更像骁龙888了。但比较奇怪的是,Google把集群的L3缓存频率和A55绑定,这会导致延迟和功耗问题。另外,这也和Exynos2100的L3频率是不同的。

GoogleTensor的GPU是Mali-G78MP20,规模仅次于麒麟9000的G78MP24(编者:G78的极限)。大家最开始以为Google会用低点的频率来提升能效比。但结果Google竟然把着色器频率推到845MHz,把tiler和L2频率推到996MHz,简直癫狂。另外,它也是第一个用上G78分离频率特性的产品。

作为参考,Exynos2100的G78MP14也“只是”854MHz,后者的峰值功耗已经很高了。结果Google增加42%的核心,却依然维持高频。因此它的峰值性能很让人期待,但峰值功耗也会很猛。而内存控制器似乎和Exynos2100相同,支持4x16bit的LPDDR5,理论带宽51.2GB/s。

它也用了8MB的系统缓存,但还不清楚是否用了和三星Exynos2100一样的IP,因为它们的架构和行为方式都不太一样。Google大量使用SLC来提升SoC性能(包括他们自己的定制模块)。这个SLC允许自分区,将SRAM专门分给SoC上特定的IP块,使它们在不同用例下,能对全部或部分缓存进行独占访问。

ISP与TPU:谷歌的光辉

大家说SoC集成的ISP时,经常把它们描述为单个IP。但实际上,ISP是不同的专业IP块的组合,每个IP块处理成像管线中的不同任务。而GoogleTensor非常有趣,因为它将三星用在Exynos芯片上的一些片段整合到了一起,同时还将自己开发的定制模块整合到了流水线中——正如Google在展示SoC时所说的那样。

成像系统部分和Exynos是一样的,如相位检测处理单元、反差对焦处理单元、图像缩放器、畸变校正处理块和纹理遮挡函数处理块等。比Exynos少的部分,可能是三星的一些图像后处理模块。

谷歌在ISP中加入自己的3AA模块(自动曝光,自动白平衡,自动对焦),以及一对自己的时域降噪IP模块(用于对齐和合并图像)。这些很可能就是谷歌所说的那些有助于加速图像处理的模块,这些是Pixel系列计算摄影的一部分,毋容置疑地地代表了图像处理流水线中非常重要的部分。


TPU是让GoogleTensor被称为Tensor的地方。Google已经用自研TPU好几年了,在驱动层面,Google把Tensor的TPU称作EdgeTPU(端侧边缘TPU)。这是相当有趣的信号,因为它应该和Google2018年发布的EdgeTPU有关,后者是Google为边缘推理而设计的ASIC芯片(官网/edge-tpu)。

当年的EdgeTPU宣称在2W功耗下可以提供4TOPS的算力,但Google并未公布Tensor的TPU性能指标,但是在一些测试中可以看到它的最大功率是5W左右。因此如果它们确实是有关联的,考虑到这几年的制程和IP上的进步,GoogleTensor的TPU性能应该有明显提升了。

这个TPU是谷歌芯片团队的骄傲,它正在使用最新的机器学习处理架构,这个架构针对Google内部运行机器学习的方式进行过优化,并且表示它可以允许开发新的、独特的用例,这是Google做定制SoC的主要目标和出发点之一。在后面的测试中,这个TPU的性能指标确实也是令人印象深刻的。因为TPU的信息不多,我们只能基于它的驱动程序做简单猜测,它可能包含四核心的Cortex-A32CPU。

在媒体编码器方面,GoogleTensor使用了三星的多功能编解码器(与Exynos系列同款),还有一个看起来像是用于AV1解码的自研IP块。这有点奇怪,因为三星的宣传中,Exynos2100是有AV1解码功能的,而且这个功能貌似也在内核驱动程序里面。但在GalaxyS21系列中,这个AV1解码功能从未在Android的层面实现过。

谷歌加入的这个专用的AV1解码器被他们称做“BigOcean”,它能让Android系统具备AV1硬解能力。但非常奇怪的是,它真的就只负责AV1,其他格式编解码还是由三星的MFC负责。

GoogleTensor的音频子系统也不同,Google用自己设计的IP块代替了三星的低功耗音频解码子系统,它们可以在无需全部唤醒SoC的情况下进行低功耗的音频播放。我们认为这部分也是当协处理器用的,这也是GoogleTensor和Exynos不同的地方。

Google还用了一种称为EmeraldHill的硬件内存压缩器,对内存页面进行LZ77压缩加速,反过来也可以用来加速交换中的ZRAM的卸载过程。现在还不确定Pixel系列是否已经启用这个模块,但能确认在“/sys/block/zram0/comp_algorithm”目录中有“lz77eh”。作为课外资料,三星早在5年前,就在SoC里集成了类似的硬件压缩IP模块。但出于某些原因,这些模块从未被启用过,也许是能效比并没有他们预想中的高。


图源PBKreviews

另外,Google还用三星的Exynos基带,做出了第一台非高通的毫米波手机。Pixel6系列用的是三星的Exynos5123基带(译者:为遵循国内的习惯,这里把调制解调器称为基带)。三星在2019年就提到自己的毫米波射频和天线模块,说2020年会出现在量产机上(不知道当时是否计划让Pixel6在2020年上市)。Pixel6系列的峰值速度可以达到3200Mbps,但很多测试中,它的网速只有高通产品的一半左右。

虽然是同一个基带,但它不是像Exynos2100那样集成在SoC里,而是外挂的。可能是因为GoogleTensor的GPU和CPU规模太大了,而且TPU的规模也是未知数。毕竟就算是把基带外挂出去,GoogleTensor的规模也是相当大了,即便是和对比Exynos2100的情况下。

总的来看,Google确实设计和定义了Tensor,同时有很多Google特有的设计,是整体的芯片上的差异化。但从更底层的角度看,Tensor和Exynos有很多共通之处,用了很多三星特有的基础模块,因此叫它“半定制”或许会更合适。

实际性能表现:不尽如人意


测试中,GoogleTensor的DRAM延迟较高,还不如Exynos2100,和骁龙888比就更差了。Google改过了内存控制器,它会根据负载和内核的内存失速百分比来控制MC和DRAM速度,这部分是和三星不同的,其实际利用率也不如三星的内存控制器高。现在不知道是CPU的问题,还是整个SoC内部的问题,但这确切地影响了下面的测试。

它的L3延迟也相当高,比Exynos2100和骁龙888高得多。Google没有给DSU和CPUL3缓存设定特定的频率,而是把它和A55小核的频率关联。奇怪的是,即便X1或A76满载,A55和L3却在低频“摸鱼”。同样情况下Exynos2100和骁龙888都是会提高L3频率的。

在系统缓存测试中,能看到11-13MB的延迟情况(1MBL2+4MBL3+8MBSLC),在正常的内存访问中,Tensor也是比Exynos要慢的,可能和被改过的个别缓存管线有关。


因为L3和A55的频率捆绑,且频率高,所以GoogleTensor的A55小核是几个SoC里L3延迟最低的,彷如没有异步时钟桥一般。

CPU部分,GoogleTensor更像是骁龙888,而不是Exynos2100。虽然GoogleTensor的L2缓存是Exynos2100的2倍,但频率低了3.7%(110MhHz)。


Tensor的弱点是内存延迟,导致SPEC测试中很多子项目都比骁龙888和Exynos2100慢,但能耗却更高(CPU在干等内存)。SPEC总分上,Tensor的表现比Exynos2100略差,对比骁龙888的落后幅度达到12.2%,由于跑完测试的时间更长,最终耗电还多了13.8%。折算回来,相对骁龙888的差距应该是1.4%左右。

它也有和Exynos2100一样的降频问题,只是相对没有那么严重。如果冷却得当,性能会高5%-9%左右(上图的测试结果是在11度的环境下得到的)。

可怜的A76大核,骁龙888的A78比它强46%,还更省电,实际IPC差距在34%,这倒符合两个构架之间的差距。如果真是为了省电,完全可以做个低频的A78,但结果Google放了两颗频率又高、又耗电、性能还不行的A76,只能推断Google是没得选,而不是有意而为之。


越接近右下角,能效比越低;越接近左上角,能效比越高↑

A55小核这边也不行,性能只是比同频的骁龙888的A55高11%(感谢L3和SLC),但却几乎是2倍的功耗,俨然就是继承了Exynos高功耗A55的血统,能效比甚至比自己的A76大核还拉胯。看看联发科天玑1200的A55,再看看A14的能效核心,这真是个残酷的世界。


GoogleTensor因为拉胯的A76性能表现,就算有2颗X2都无力回天,拖低了整体分数。X1本身也比对手稍慢一些,大部分时间的能效比都和Exynos2100的X1一致。但A76实在落后时代太多了(无论是性能还是能效比),而A55又继承三星低能效的传统,一言难尽就是了。






GPU这边规模大,频率高,但3DMarkWildLife测试的峰值性能只比Exynos2100高21%。在GFXBench的Aztec场景测试中,领先Exynos210014%,小幅领先骁龙888。虽然采用了分频设计,但貌似瓶颈在GPU的其他地方。

Tensor的GPU峰值功率高达9-10W,手机一跑就降频(一轮测试都没跑完啊……),拖低了整体功耗,所以才会有7.28W的平均功耗。Pixel6系列没有热管,散热配置和机身结构更像是iPhone,而不是猛堆散热的安卓旗舰。它跑起来时,左侧的SoC45度,但右侧只有30-33度,散热确实是弱。

让人不解的是,今年这批SoC都设定了高得不切实际的GPU频率,一跑就降频。可能是为了应对突发的GPU负载?或者是其他什么原因?但无论怎么样,实际能效比是受累了。

而Tensor的功耗问题,外加Pixel6Pro虽然也是LTPO屏幕,但表现和三星旗舰明显不同,全屏激发亮度750nit,远低于S21U的942nit,实际正常基础功耗可能会更高。多种不利因素,最终让Pixel6Pro的续航并不好看,反倒是90Hz的Pixel6续航表现还不错:



TPU:极强的推理性能

这是GoogleTensor挽回颜面的地方。MLPerf测试中,Pixel是在NNAPI跑的,其他厂商是各自的库,高通是SNPE(最近优化了,提升了成绩)、三星是EDEN,联发科是Neuron,而苹果没有coreML加速,所以吃亏。


在图像分类、目标检测和图像分割工作负载中,Tensor成绩低于高通,但强于三星。而在语言处理(MobileBERT模型),GoogleTensor提供了骁龙8883倍的性能,推理部分强得很。Google在宣传里,确实也提到过实时转录、翻译等使用场景是其差异化所在。



还没发布的GeekBenchML测试,用是TensorFlow模型,代表的是GPU的机器学习性能。这时候GoogleTensor就弱于Exynos2100。如果用NNAPI模型,此时是CPU+GPU+NPU的混合工作,GoogleTensor就可以大幅领先骁龙888。

除了绝对性能,跑AI测试时,Pixel6Pro的整机功耗和Exynos2100的GalaxyS21Ultra接近。单独进行推理任务时,Exynos2100的爆发功率达到14W,骁龙888也有12W。但因为GoogleTensor的AI性能更高,所以最终能效比要更高一些。

不过Google还没有计划推出相关的SDK让开发者去更好地利用这颗强大的TPU。但再看看三星,它的NPU发布都2年了,现在都没有SDK……现在TPU的强大性能,主要集中体现在官方app里,像是给摄像头加入更多的机器学习功能,以及各种翻译功能。

总结

Google表示,他们搞自研SoC的主要原因是现有的SoC在机器学习上的性能和能效比太低。而Tensor的机器学习性能和能效,被用来支撑新的用例和体验,例如我们在Pixel6系列上看到的很多机器学习特性。像是实时转录、实时翻译和图像处理等算法,所有这些都是运行在Tensor的TPU上的。

虽然Google可能不想承认或者谈论,但GoogleTensor确实就是和三星合作的产物,大部分都源自Exynos,并继承了三星在能效比方面的弱点。CPU被古老的A76拖后腿,规模庞大的GPU被散热拖后腿,但TPU确实表现很好,特别是自然语言处理方面,远远抛离所有竞品。

但总的来说,我们认为Google已经通过Tensor实现了最初的目标。我们不知道Google下一代的SoC会走什么样的路线,但我们很有兴趣等等看。

文章版权声明:除非注明,否则均为纵投光影网原创文章,转载或复制请以超链接形式并注明出处。

上一个 锐取信息:如何保养和清洗录播镜头

下一个 「图文+视频」C4D野教程:实景照片合成动画制作案例