正文
对M4大核心进行一个简单回顾:
采用6条指令发射宽度,尽可能拉宽流水线,对比同期A76核心,其发射宽度为4 条指令。拉宽了流水线发射端,自然需要更多的资源来保证乱序执行的正常进行,其ROB(reorder buffer)提升至228条表项,已经达到同期英特尔的X86高性能桌面处理器的级别。
一级缓存为64KB的指令缓存+64KB的数据缓存结构,二级缓存增大至1MB。
相应的,其访存相关的BTB(Branchtarget buffer,分支目标缓冲器,用于存储预判分支指令的目标地址)设计进行了改进,micro-BTB提升为128条表项容量,main BTB为4K容量。
而二级缓存,则为32K的表
项
容量。
为了提升分支预测的精度和性能,近几年神经网络技术也被广泛应用到分支预测器的设计中,9820也毫不意外采用了神经网络结构进行分支预测。
对于乱序超标量处理器架构,提高流水线宽度可以显著提升单位时间内处理器所能执行的操作,但一味的增加发射宽度,又会带来新的问题,一个是功耗问题,同一时间段可以同时执行多个指令了,执行单元数目要增加,功耗自然增加。另一个是为了防止不同指令在执行时不会相互打架,抢夺资源,因此在调度逻辑,以及最后的顺序退休逻辑,会变得更加复杂,设计成本明显提升。
在移动处理器里,有两种代表性的设计思路,一个是剑走偏锋,尽可能拉大宽度,代表公司为苹果家的A系处理器,其性能也是最强,但其架构限制了多核核数,苹果处理器的风格是走少而精的路线。而另一种是考虑到性能与功耗,成本之间的平衡折衷,以3-4的发射宽度为最佳设计点,代表作为ARM的公版架构,走的是多核结构,小马拉大车。
(2)接着是流水线的执行级:execution stage
执行级是决定处理器性能的最关键部分,这里面的计算单元ALU,乘法单元MUL,除法单元DIV,访存单元Load/store单元,直接影响到处理器的运算能力。而执行级按照处理数据的不同,划分为两条并行线,一个是整数部分(Integer),一个是带小数计算的浮点部分FP(floating point)。
M4核心的整数流水线部分如下图所示,共包含4组算逻辑算单元ALU,两个常规ALU,两个复杂ALU,一个包含乘法功能(ALU+MUL),一个包含乘除功能(ALU+MUL+DIV)。访存部分,相较于上一代M3核心,增加了一组LSU。
(3)性能跑分
与上代M3核心, 同期A76公版的各项跑分对比。跑分结果很“三星”,适合跑分,但实际应用中总是出现各种翻车。
三星自研处理器长期存在一个问题,跑分很好看,实际使用体验很差。
观察其架构框图,以及版图中结构,不难找到原因。
三星的处理器始终没有处理好自研核心与公版核心之间的互联总线问题,使得处理器整体性能无法得到有效发挥。
究其原因,不过“总线”二字。两个M4核心采用了Ring-bus总线互联,而其他公版核心采用了ARM的标准总线。互联总线问题一直是限制三星过往几代处理器性能的瓶颈所在,M系列自研核心确实优秀,功能强悍,但总线问题却限制了其整体性能。回顾三星前两代产品9810和8890,均采用四大核(自研核心)+四小核(公版核心)的结构。四大核也是采用Ring-bus总线,而与小核的总线之间总是有兼容性问题。如下图所示为18年初发布的9810处理器结构,采用10nm LPP工艺实现,4个M3核心(基于A75的改进型)采用瓦片形的并排排布。