内存墙早已不再只是理论层面的隐患,而是当前人工智能、车载、数据中心SoC最核心的性能瓶颈。CPU 运行在吉赫兹主频下,单周期仅几纳秒;但 DRAM 存取延迟始终居高不下,稳定维持在 60 至 100 纳秒。而经由复杂片上网络(NoC)访问片内加速器的内存映射 I/O(MMIO)操作,耗时甚至更长。
随着SoC集成更多加速器、更大内存子系统与更复杂互联架构,每一次缓存缺失、每一回设备寄存器访问带来的性能损耗都在持续放大。单一架构特性无法彻底解决该问题,必须采用多维度优化方案。
本文分享我们基于Andes AX46MPV RISC-V 内核,使用谷歌 FlatBuffers 库对内存子系统开展压力测试的实践经验。实测结果证实:在内存访问相互独立时,充足未完成事务能力最高可带来 39% 的性能提升;但在指针遍历访问模式下,强数据依赖阻断并行执行,性能提升仅 6%。
这一结果直观说明,单一优化思路存在明显局限性。Andes AX46MPV 从多个维度缓解内存延迟问题:支持大量未完成事务,在访问模式允许时充分挖掘内存级并行;搭载硬件预取,预判内核所需数据并提前加载至缓存;同时配套软件预取接口,让开发人员可主动调度、掩盖访问延迟。
以上三项能力共同构成一套完整的延迟容错体系——无论瓶颈来自可缓存 DRAM 访问,还是SoC中不可缓存的 MMIO 交互,都能保障 CPU 稳定发挥性能。
人工智能推理、数据库、图分析等现代业务负载均属于内存受限型负载。前文提到,如今 CPU 主频达吉赫兹,单周期仅数纳秒,而 DRAM 延迟仍高达 60~100 纳秒。这一差距就是业内熟知的 “内存墙”:单次缓存缺失就会让处理器停滞数百个周期,昂贵的计算单元全程闲置。
高带宽内存(HBM)、DDR5 等产品主打超高带宽,但想要充分释放带宽,CPU/GPU 必须同时维持数百个未完成内存请求。若请求流水线深度不足,两次传输之间内存总线处于空闲状态,硬件设计的带宽优势白白浪费。简言之,内存带宽的实际利用率,完全取决于处理器能否持续填满内存通道。
内存墙问题并非仅存在于数据中心业务。车载SoC中,DRAM 常直接焊接在印制电路板上抵御车辆震动;这种焊接方式叠加布线限制,会拉长信号路径、进一步抬高 DRAM 访问延迟。因此,CPU 批量处理可缓存未完成请求的能力,在车载系统中同样至关重要。
内存墙的影响范围不止可缓存 DRAM,还包括不可缓存的 MMIO 访问。现代SoC集成大量外设与加速器,例如 AI 引擎、神经网络处理单元、DMA 控制器;CPU 通过 MMIO 寄存器读写完成设备配置与数据交互。
每一次 MMIO 访问均无法缓存,必须经由片上总线传输。倘若 CPU 同一时间仅能发起一条 MMIO 事务,批量配置加速器寄存器的过程会极度缓慢。当 CPU 统筹多颗加速器、需要快速下发 DMA 传输指令、启动推理任务或轮询状态寄存器时,该问题会成为实打实的性能卡点。
真实案例:Meta MTIA 加速器
Meta 自研 MTIA 训练推理加速器就是典型实例,其每个处理单元(PE)内部搭载Andes RISC-V 内核。芯片内,内核通过片上 AXI 互联总线访问系统寄存器与远端处理单元资源,全部采用无缓存 MMIO 访问;访问延迟取决于网格内两点物理距离。

图 1 MTIA 平台实拍,首款面向 Meta 推荐系统流片产品
随着 AI 芯片尺寸扩大、架构复杂度提升,各加速器模块在裸片上分布更加分散,依靠片上网络完成互联。访问片上网络远端模块的 MMIO 操作,仅路由耗时就要 50~200 个周期以上,网络拥塞时耗时更久。由此可见,CPU 并发处理多条 MMIO 事务的能力,直接影响整机系统吞吐。
我们选用谷歌 FlatBuffers 库,并非将其作为标准 AI 业务负载,而是专门用来施压 CPU 内存子系统。FlatBuffers 是一款开源跨平台序列化库,主打零拷贝数据读取,无需单独反序列化即可原位读取序列化数据。尽管该库本身设计高效,但其生成的内存访问模式,对 CPU 缓存与内存子系统压力极大。
FlatBuffers 造成高压力的底层原因
FlatBuffers 采用基于偏移量的间接寻址逻辑:读取任意字段时,需先读取偏移值、计算目标地址,再跳转读取真实数据。单次字段查询会触发多组存在依赖关系的内存访问。
其中读取流程是典型的指针遍历场景:下一次访问地址依赖上一次读取结果。遍历深度可自定义,最高支持 2000 层跳转,单次数据遍历覆盖的数据范围远超单条缓存行容量。
最终造成缓存缺失频发、且无规律可循:每次仅读取少量字节,随即跳转到完全无关的缓存行。再搭配大量字段读取小型函数调用,FlatBuffers 会同时重压指令缓存、分支预测单元与整套内存子系统。

图 2 FlatBuffers 读取流程存在指针遍历逻辑
划定性能基准下限
在这种刻意制造的严苛访问场景下完成测试,能够确定 CPU 性能的基准下限。现实业务负载通常访问规律更强、空间局部性更好,内核各类延迟容错架构能发挥更大优化效果。
我们基于Andes AX46MPV RISC-V 内核开展测试,发现未完成事务架构带来的性能提升幅度,极大取决于内存访问模式,而非单纯的缓存缺失率。
场景一:FlatBuffers 写入构建 —— 访问相互独立,性能提升显著
FlatBuffers 写入构建运算中,CPU 分配缓存、写入字段、组装序列化数据结构,绝大多数内存访问彼此独立,后序写入地址不依赖前序读取结果。 即便 DRAM 访问占总指令比例仅 0.23%(共享缓存缺失率),依靠未完成事务架构,内核依旧实现 20%~39% 的性能提升。
区间差异来自最坏场景建模方式:39% 上限假设每次 DRAM 访问都会完全阻塞流水线、无任何指令并行,属于极度保守悲观模型;20% 下限假设内存阻塞期间仍能穿插执行部分指令,DRAM 等待周期等效减半。
实际提升幅度落在该区间内;即便取保守下限 20%,也足以证明:独立缓存缺失场景下,硬件可并发下发多条请求,等待内存返回时同步执行其他运算。这是内存级并行的理想适用场景:缓存缺失次数少、彼此无依赖,等待延迟可完全重叠掩盖。
场景二:FlatBuffers 读取 —— 指针遍历,优化收益有限
FlatBuffers 读取运算的负载特征完全相反,以指针遍历操作为核心:读取偏移量→解引用计算下一级地址→读取地址内容→获取新偏移量,循环往复。每一次内存访问都依赖上一步运算结果,形成强数据依赖链。
即便 DRAM 访问占比高达 1.99%,未完成事务架构仅带来 6% 性能提升。小幅优化仅来自极短的并行窗口:解析完基础指针后,可并行读取同一个 FlatBuffers 对象内多条互不相关字段。但整体指针遍历逻辑,从根源上限制了硬件掩盖延迟的空间。
核心观点:缓存缺失不能一概而论
两种场景的巨大反差,给芯片架构师与业务研发人员关键启发:未完成事务架构的价值,不取决于缓存缺失总次数,而在于缺失请求是否相互独立、能否并行下发。 内存访问可并行、无关联的负载,优化收益极高;访问串行、强数据依赖的负载,无论硬件支持多少并发事务,性能提升都十分有限。
未完成事务在独立缓存缺失场景下效果最优,但并非所有业务都具备这类访问特征。当访问存在一定规律、却无充足并行度时,仅靠未完成事务不足以缓解延迟,预取机制可提供补充优化。
Andes AX46MPV 同时搭载硬件预取与软件预取功能: 硬件预取自动识别连续、步长递增等规律访问,在内核发起请求前,预判并将数据预载入缓存; 软件预取指令交由开发人员主动控制,针对硬件预取器无法预判的访问逻辑,可在代码关键位置插入预取提示。
预取机制搭配未完成事务,形成多层级内存延迟防护体系,分别对应不同类型的访问瓶颈。
现代SoC出现缓存缺失时,无论访问对象是可缓存 DRAM,还是复杂互联架构另一端不可缓存的 MMIO 设备寄存器,由此产生的延迟是多维度难题,不存在单一万能解决方案。
Andes AX46MPV 架构从多角度同步应对该挑战:
大量未完成事务:访问模式允许时充分挖掘内存级并行;
硬件预取:提前预判、预加载内核所需数据;
软件预取:为开发者提供额外手段,部分掩盖访问延迟。
FlatBuffers 实测数据直观印证这套方案的价值:独立缓存缺失场景优化 20%~39%,指针遍历场景仅优化 6%。对SoC设计人员而言,这揭示一条实操准则:吃透业务负载的内存访问特征,与硬件架构特性同等重要。
对于下一代人工智能、车载、数据中心平台研发团队而言,这套完整、多维度的延迟容错架构绝非锦上添花,而是刚需配置。
本文转自媒体报道或网络平台,系作者个人立场或观点。我方转载仅为分享,不代表我方赞成或认同。若来源标注错误或侵犯了您的合法权益,请及时联系客服,我们作为中立的平台服务者将及时更正、删除或依法处理。
