3. GPU架构与编程模型

在自动驾驶异构计算部署中,GPU承担着感知模型推理、点云处理、BEV特征提取与部分后处理等高并行负载。理解GPU的架构与编程模型,是判断“算子能否高效映射、显存是否够用、并发能否重叠”的前提。本节从SIMT执行模型出发,逐层展开CUDA核心与Tensor Core、显存层次、流与并发,并落到典型自动驾驶GPU平台的工程选型。

一、SIMT执行模型:以线程束为调度单位

GPU采用SIMT(Single Instruction, Multiple Threads)执行模型。程序员以线程(Thread)为粒度编写代码,硬件则以32个线程组成的线程束(Warp)为基本调度单位。同一Warp内的线程执行同一条指令,但可持有不同的寄存器数据,因此天然适合处理“同一算子作用于大量元素”的场景,例如卷积、矩阵乘、逐元素激活。

SIMT的关键约束是分支发散:当同一Warp内线程走不同分支时,硬件会串行执行各分支路径,未命中的线程被屏蔽,导致有效吞吐下降。因此在高性能算子中,通常让相邻线程处理连续且行为一致的数据,避免在Warp内出现条件分支。另一个重要概念是占用率(Occupancy),即每个SM上活跃Warp数与硬件上限的比值。占用率过低无法掩盖访存延迟,过高则可能因寄存器压力导致溢出,需要结合具体算子调优。

工程判断:若某算子线程间行为高度一致、数据连续,SIMT效率高;若存在大量不规则分支或稀疏访问,应优先考虑数据重排或改用其他计算单元。

二、CUDA核心与Tensor Core:两种算力的分工

CUDA核心是通用标量/向量浮点与整数运算单元,适合逐元素运算、归约、索引计算、控制逻辑以及非规则计算。Tensor Core是专用于矩阵乘加(MMA)的加速单元,在单条指令内完成小矩阵块的乘累加,显著提升FP16、BF16、INT8等低精度矩阵运算吞吐,是Transformer、卷积等深度学习算子的核心算力来源。

两者并非替代关系,而是分工协作:卷积或全连接层的主体矩阵乘交给Tensor Core,偏置、激活、归一化、坐标变换等由CUDA核心完成。自动驾驶模型常包含大量小算子与动态形状,若全部依赖Tensor Core,反而会因频繁的kernel启动与数据搬运而降低整体效率。因此,算子融合与图优化是部署中的常见手段。

// 典型MMA片段(示意)
// A: 16x16 FP16, B: 16x16 FP16, C/D: 16x16 FP32
mma.sync.aligned.m16n8k16.row.col.f32.f16.f16.f32
    {d0,d1,d2,d3}, {a0,a1,a2,a3}, {b0,b1}, {c0,c1,c2,c3};

三、显存层次:带宽与容量的双重约束

GPU显存层次从寄存器、共享内存/L1、L2到全局显存(HBM/GDDR),容量递增、带宽递减、延迟递增。寄存器访问最快但数量有限;共享内存由线程块内线程共享,适合做数据复用与块内通信;L2为全芯片共享缓存;全局显存容量最大,是模型权重、激活与中间张量的主要存放位置。

自动驾驶部署中,显存压力主要来自三方面:模型权重、激活张量以及多路摄像头/激光雷达的输入缓存。若显存不足,会触发换页或直接OOM;若带宽不足,则表现为算子利用率低、kernel等待数据。优化方向包括:使用低精度权重、减少中间张量驻留、提高共享内存复用率、合并小规模访存。

层次典型容量访问速度主要用途
寄存器每线程数十~255个最快线程私有变量、累加器
共享内存/L1每SM数十~上百KB很快块内数据复用、Tile缓存
L2缓存数MB~数十MB较快跨SM数据共享、访存合并
全局显存8GB~80GB+相对慢权重、激活、输入输出张量

四、流与并发:让计算与搬运重叠

CUDA流(Stream)是一组按顺序执行的异步操作队列。不同流之间可并发执行,从而实现kernel与拷贝、kernel与kernel的重叠。在自动驾驶流水线中,典型做法是:将图像预处理、推理、后处理分配到不同流,并用事件(Event)做依赖同步,使前一帧的后处理与下一帧的推理并行,提升端到端吞吐。

并发能否真正发生,取决于硬件资源是否充足。若单个kernel已占满SM与显存带宽,多流并发收益有限;若kernel规模较小、资源占用低,多流可显著提升利用率。此外,使用CUDA Graph可将多次kernel启动与依赖固化为一张图,减少启动开销,适合推理服务中固定拓扑的重复执行。

实践建议:先用Nsight Systems观察时间线上是否存在空闲间隙,再决定是否引入多流或CUDA Graph,避免盲目并发导致资源争抢。

五、典型自动驾驶GPU平台与选型

自动驾驶GPU平台通常分为车载嵌入式与数据中心/训练两类。车载平台强调功耗、散热与功能安全,常见如NVIDIA Orin系列,集成GPU与AI加速器,支持多路摄像头与激光雷达接入;数据中心平台如A100/H100,强调大显存与高带宽,用于模型训练与大规模仿真。选型时需综合算力(FP16/INT8 TOPS)、显存容量与带宽、功耗、接口与软件栈成熟度。

# 查看GPU与显存信息
nvidia-smi --query-gpu=name,memory.total,memory.used,utilization.gpu --format=csv
# 查看CUDA版本与驱动
nvcc --version

六、常见误区与复盘

  • 误区一:认为Tensor Core越多越好。实际受限于数据搬运与算子形状,小矩阵或动态形状下Tensor Core利用率可能很低。
  • 误区二:忽略显存带宽。很多推理瓶颈不在算力,而在权重与激活的反复读写。
  • 误区三:盲目多流并发。资源已饱和时,多流只会增加调度开销与上下文切换。
  • 复盘要点:先定位瓶颈属于计算、访存还是调度,再选择优化手段;用Nsight工具验证,而非凭经验猜测。
GPU架构与编程模型:从线程到平台 SIMT 执行模型 Thread → Warp(32) → Block → Grid 分支发散 · 占用率 · 延迟隐藏 适合规则、连续、高并行数据 计算单元分工 CUDA Core:标量/向量、归约、控制 Tensor Core:MMA、FP16/BF16/INT8 算子融合 · 图优化 · 低精度 显存层次 寄存器 → 共享内存/L1 → L2 → HBM 容量递增 · 带宽递减 · 延迟递增 权重/激活/输入缓存的主要压力源 流与并发 Stream:异步操作队列,流间可并发 Event:跨流依赖同步 CUDA Graph:固化拓扑,降低启动开销 典型自动驾驶GPU平台 车载:Orin 系列,低功耗、多传感器接入 数据中心:A100/H100,大显存、高带宽 选型:算力 · 显存 · 功耗 · 软件栈 部署判断链 规则并行 → SIMT效率高;矩阵密集 → Tensor Core;显存受限 → 降精度/复用/融合; 时间线有空隙 → 多流/CUDA Graph;平台选型 → 算力、显存、功耗与工具链综合权衡

综上,GPU部署的核心在于把算法特征映射到合适的执行单元与存储层次,并用流与图调度隐藏延迟。只有同时理解SIMT、Tensor Core、显存层次与并发机制,才能在自动驾驶场景中做出稳定、可复现的性能决策。