ARM SoC性能的复杂性演变
SoC系统一般包含处理器、缓存、互连、系统控制器和外部接口(如内存和I/O),ARM SoC则从智能手机到高性能服务器,无处不在。Arm一般提供处理器和系统IP(如互连,SMMUs,GIC),第三方提供的外部接口的功能IP(如DDR内存控制器和PCIe接口)。
下图是一个大约在1990年代ARM7的SoC计算子系统。
另外一个是2023年的SoC计算子系统的框图。
在1990年代,计算子系统通常包含一个单一的Arm Core——ARM7TDMI。相比之下,到了2023年,计算子系统则复杂得多,包括多个Arm Neoverse N2 Core,以及一个系统控制处理器(SCP)和一个管理控制处理器(MCP),这些均采用Arm M类核心实现。此外,最新的SoC架构都支持多个Core,在1990年代一般只有一个Core。而且新的SoC架构中多个I/O加速器会同时连接在一个mesh中。现代计算子系统的IC设计也变得复杂,而且也难以测试验证SoC的性能是否满足需求。
现代SoC计算子系统通常包括:
一个或多个处理器核心,通常包括内存管理单元(MMU),设备可以运行操作系统(如Linux) 一个主存控制器,对动态随机存取存储器(DRAM)进行读取和写入 一个中断控制器(GIC) 一个互连(mesh),将所有组件连接在一起 功能性组件,如实时时钟(RTC)和通用输入/输出(GPIO) 时钟和电源管理 SoC启动机制
在图1.1所示的1990年代设计中,Arm处理器处于SoC计算子系统的”核心“位置。而在2023年的架构中,互联则处于”核心“位置。Mesh作为一种庞大且复杂的IP,贯穿于整个SoC之中。互连IP不仅拥有广泛的连接,还提供了多种配置选项。越来越多的SoC都会使用定制化的互联网络,如图形处理器(GPU)、AI/ML加速器。
过去二十多年,SOC计算子系统的变化是显而易见的,Core的复杂度也显著提升。每一代新架构都引入了更长的执行流水线以提高性能,这也对系统的其他部分带来了影响。提升时钟频率变得越来越困难且功耗增加,增加Core数量成为了一种新的解决方案。增加Core数量也是为了利用如GPU和神经处理单元(NPU)这样的优化加速,可以在提高性能的同时大幅减少能耗。
在1990年代,系统性能主要取决于处理器架构、时钟速度以及与之相连的存储系统。通过增加时钟频率就可以提升性能,并且新系统的性能相对容易预测,仅需进行少量的优化与分析即可。
2023年,如图1.2所示,由于计算子系统中包含的各种加速器、多个内存控制器、多级缓存系统以及系统各方面配置能力的增强,测试系统性能变得更加复杂。每一个系统用例可能会涉及到不同的加速器负载组合,这些工作负载通过mesh在缓存系统中产生内存流量模式——这些模式中的内存副本是可以共享的——从而形成混合的内存访问。在这些流量负载下,SoC各组件的行为和性能也变得难以预测。
过去10年引入了许多架构方面的先进技术,如Arm的big.LITTLE、AMBA® CHI、分布式虚拟内存(DVM)、内存标记扩展(MTE)、内存分区与管理(MPAM)、系统级缓存、AMBA CHI Chip-to-Chip,Chiplet技术等,当这些技术叠加众多复杂IP的集成,系统性能的分析显得尤为重要,也变得愈加困难。
SoC内存层次结构:从SRAM到DDR
内存层次结构:速度/容量/成本的平衡
在计算机架构中,内存系统的性能直接决定了整个系统的响应速度和处理能力。然而,内存技术面临着一个基本的挑战:如何在速度和容量之间找到平衡点。高端应用需要快速访问小量数据,而大容量数据则更注重成本效益。
常见的内存层次结构如下图所示:
寄存器(Registers)
处理器的算术或者逻辑运算的数据,在短时间内多次使用。将这些值存储在动态随机存取存储器(DRAM)中会非常慢且效率低下,所以处理器会配备了一定数量的内部“寄存器”,这些寄存器可以直接被处理器指令访问。如ARM Core中的通用寄存器,程序程序状态寄存器。
这些寄存器一般和处理器工作在相同频率,一般在GHz量级。处理器可以在一个时钟周期内访问寄存器,但与外部DRAM相比,每比特数据的功耗也更大。其速度快,容量很小,提升容量的成本也越高。