我一直都觉得三星 Exynos 还是挺有趣的 SoC:我记得之前翻译 AnandTech 的苹果 A12 和三星 Exynos 9810 评测文章的时候,有句话我印象特别深刻:“采用 M3 核心的三星 Exynos 9810,能耗达到苹果 A11 的两倍,性能却落后了 55%(注意,是 A11)!”
尔后,AnandTech 通过魔改 Exynos 9810 系统层面调度机制的方案,达成了系统性能相较原版的一个显著提升。这些其实都表明,三星在移动 SoC 设计和制造上都可以认为是整体掉队的。所以也不难理解,三星为什么决定放弃自研 CPU 架构。Exynos 990 是三星最后一款采用自研架构的 SoC。
想必很多同学也已经听说了,这次 Exynos 990 相比竞争对手依然有差距的事实。这里我将 AnandTech 的一些评论和测试做了综合,分享给各位。本文的绝大部分数据和内容均来自 AnandTech,若需查看英文原文,可拉至本文末尾。我觉得这篇文章能够非常到位地阐释,为什么三星放弃了自研架构,因为无论从哪个层面来看,其自研架构不仅问题极多,而且还远远及不上 Arm 的架构。
请注意,注意区分本文的几个词汇:能耗 energy,是指跑测试消耗的能量,单位焦耳;功耗(或功率)power,是指单位时间内消耗的能量,单位瓦特;功效 power efficiency,一般是指每瓦性能;能效 energy efficiency,这里特别指每焦耳的性能——这个性能可以是跑的分值,也可以是游戏帧率。
这里需要强调一点,我们日常所说的“能效比”,或者“效率”指的其实是这里的 power efficiency。本文的能效,严格意义上都不是用的这个通俗的意义。
三星 LSI 的这颗旗舰 SoC 是在去年 10 月份宣布推出的:它在 CPU 大核心上采用了三星新一代的 M5 架构;中型规模的核心则升级到了 Cortex-A76;采用新的 Mali-G77 GPU。Exynos 990 采用 7nm LPP 制造,即芯片的某些部分采用 EUV 光刻。
Exynos 9820
这里看一下上一代的 Exynos 9820,,也就是 Galaxy S10 采用的 SoC。以此可了解 Exynos 990 做了怎样的提升和变化。
Exynos 9820 的大核心簇是三星定制的 M4 架构,它跟 Arm 公版架构的差异还是比较大的:从互联到缓存一致性,都采用三星的 Coherent Interconnect。Andrei Frumusanu(AnandTech 著名博士编辑)对这种结构有做核心到核心的延迟测试,起码它比 Arm 公版架构的延迟是要大出很多,当然也比骁龙 865 明显更糟糕。
Exynos 990
Exynos 990 相较 Exynos 9820 的改进其实还是比较多的。首先三星这次终于在小核心上,将 A55 的 L2 cache 推升到了 64KB。要知道 Exynos 9810 和 9820 在这方面就差一截,所以这两款 SoC 相比以前的骁龙 SoC,在效率上就有差距。不过 64KB L2 cache,这个容量仍然只有骁龙 865 的一半(128KB),三星在 Arm 核的 cache 配置上还是比较保守。
中核心从先前的 Arm Cortex-A75 升级到了 A76,频率也有提升,从 2.3GHz 提到了 2.5GHz,基于负载不同性能提升可达 38%-50%,也是 Exynos 990 大部分工作的主要动力来源。中核心的 L2 cache 仍然是每个核心 256KB,共享的 L3 cache 也是比较保守的 1MB。
大核心部分,早前代号为 Cheetah(猎豹)的 M4 这次升级到了代号为 Lion(狮子)的 M5——也就是三星的自研架构。其最高频率仍然是 2.73GHz,三星宣称会有 20% 的提升,应该主要是来自 IPC 提升。
外部可以观察到的最大变化,在于 M5 大核心不再享有各自的 L2 cache,而是 2MB 的核心共享 L2 cache。现如今,这样的微架构设计变化还是比较少见的。这一变化,从核心到核心的延迟降低能看得出来,毕竟这次的缓存一致性是在更低的 cache 层级发生的,和 CPU 也靠的近。
Exynos 990 采用三星 7LPP 工艺制造,部分采用了 EUV 光刻。TechInsights 提到,Exynos 990 是首个采用完整 7LPP PDK(Process Design Kit)设计的芯片,这一点和先前的 Exynos 9825 还是有不同的)。
三星宣称,7LPP 工艺相比之前的 8LPP 有 7% 的性能提升,应该也意味着同频功耗的降低。实际是个什么情况呢?我把 AnandTech 的内容做个概括:
Exynos 990 的 binning(可以理解为根据不同的芯片体质,对芯片进行等级分组)看起来是比较糟糕的,而且绝大部分芯片都位列相对较差的体质分组,甚至可能更糟,这表明这颗芯片的良率可能很不理想。
M5 的核心电压不是很乐观,不仅在同频下相比上一代 M4(8LPP)没有提升,而且随频率升高还表现更差了。M5 需要更高的电压,才能达到先前相同的频率:同样 2.75GHz 最高频率,M5 的峰值电压为 1118mV,而先前的 M4 为 1068mV。
从功耗与效率曲线来看,纵观性能变化周期内,M5 核心显然在效率上弱于 Cortex-A76(同一个 Exynos 990 SoC 上的);Exynos 990 A55 小核心的效率比先前的 Exynos 9820 要理想很多;
Exynos 9820 时期,三星引入了一种更为复杂的 scheduler,基于应用跑的 ISA(指令集结构)选择不同的功耗模型。这种机制会分别追踪 32bit 和 64bit app,然后根据不同 CPU 在不同执行模式下的微架构性能和功耗特性,做出调度决策。三星宣称这种机制能够提升效率,更多的工作可能会分派给 Arm 中核心——因为 A76 在 32bit 执行效率上会更好。
从 SPECint2006 的综合成绩来看,其实很难看出这种执行模式有什么大差别。但某些个别的测试子项,比如说 456.hmmer——这是个偏向执行能力的测试,就能看出 A76 核心的优势——A76 核在这个项目的成绩上的确领先于 M5 核。从这个角度来看,三星的调度策略是合理的。
另一个例子是,400.perbench 在 32bit 模式下,A76 核心同样优于 M5 核心,所用功耗还低了超过一半。不过更偏存储性能的负载,M5 在跑分上还是有优势的,这可能与两者的 cache size 差异有关。
AnandTech 在文章中提到,这是 AnandTech 首次针对 AArch32 和 AArch64 两种执行模式,分别公布跑分成绩。
在存储延迟测试方面,Exynos 990 相比 Exynos 9820 还是有提升的,但和骁龙 865 比起来却有差距。
下面这几张图是 Exynos 990 M5(大核心)、Exynos 990 A76(中核心)、Exynos 9820 M4,以及骁龙 865 A77(大核心)的存储子系统延迟对比。很显然,相比 Exynos 9820,可以看到 Exynos 990 的 L2 cache 在尺寸上变大。M5 核心当然还是会有一些优势,比如说 3 周期的 L1 延迟设计,Arm 核心都是 4 周期。
去年的 M4 核心其实就存在 TLB 问题(Translation Lookaside Buffer,一种页表的 cache,是一个内存管理单元,用于提升虚拟地址到物理地址转换速度),今年的 M5 这个问题并未得到合理解决。
这会导致一些比较无语的问题,比如说随机访问超过 2MB 的区块,可能还比 1MB 尺寸内的速度更快。相比 L2 cache 区域,L3 的 cache line 访问,TLB 未命中惩罚的访问延迟还更低…(这也可能是 16-64MB 区块内,Exynos 990 弱于 9820 的原因)。
而 A76 核心部分显然就比较符合预期了。A76 的 prefetcher 原本就有比较大的提升,在 Exynos 990 之上也有体现,两个 A76 中核心在某些数据访问模式上是优于 M5 核心的。实际上,三星自 M3 设计以来,在存储子系统方面就有比较大的问题,到 M5 也依旧未能解决。
从 SPECint2006 的测试结果来看,Galaxy S20 的两个不同 SoC 版本,骁龙 865 相比 Exynos 990,各方面都有优势。
主要表现在骁龙 865 显然在能效/功效方面有着比较大的提升。
早前 Arm 曾表示,A77 核心相比 A76 会在性能上有进步,但两者的功效(energy efficiency)其实是差不多的——也就意味着 A77 需要以功耗换性能。但骁龙 865 则显然超出了 Arm 的预期,不仅使用更少能耗(energy),而且功耗(power)也更低。
这可能和骁龙 865 相比上一代改用台积电 N7P 工艺有关,这或许表明 N7P 工艺相比 N7 的确有显著提升。
Exynos 990 相比上一代当然也有性能提升,但肯定比不上骁龙的步子。其中有一些成绩比较诡异,比如说 403.gcc 的成绩还不如上一代。更悲伤的是功耗(power)和能耗(energy)。Exynos 990 的能耗其实跟 Exynos 9820 很相近,有时略好,有时又略差。但在有性能提升的情况下,功耗却也明显发生了飙升。