中的应用)
MLIR在自动驾驶芯片(如NVIDIA Orin)中的应用从一次死锁说起去年冬天,我在调试Orin上的一段端到端感知管线。模型编译通过,推理跑起来,但每跑三四个batch,整个pipeline就卡死——不是OOM,不是段错误,是那种CPU占用率掉到0、GPU空闲、DLA(深度学习加速器)也停摆的诡异死锁。翻遍NVIDIA的文档,查了CUDA graph的提交顺序,最后发现是MLIR生成的调度代码里,一个barrier的依赖关系写错了。Orin的硬件有多个计算单元:GPU、DLA、PVA(可编程视觉加速器)、CPU集群。MLIR在把高层IR降级到硬件特定指令时,对DLA和GPU之间的同步原语生成了错误的依赖边。这个bug在x86模拟器上根本复现不了,因为模拟器不模拟硬件同步单元的时序。那次之后我意识到,MLIR在自动驾驶芯片上的应用,远不止“编译优化”四个字能概括。它直接决定了你能否把Orin的7个Cortex-A78、Ampere架构GPU、两个DLA引擎、一个PVA全部喂饱,而不是让它们互相等待。Orin的异构地狱NVIDIA Orin的硬件拓扑,用一句话形容:一个共享内存域上的多异构集群。GPU有自己的L2缓存和显存控制器,DLA有独立的SRAM和DMA引擎,PVA有专用的向量处理单元。它们通过CCIX(缓存一致性互连)连接,但一致性只在CPU和GPU之间保证——DLA和PVA的本地内存需要显式同步。传统做法是手写CUDA kernel + DLA固件 + PVA汇编