VIP20
本课程属于:012-CUDA核函数 AI算力与GPU工程 · 共 20 门相关课程,组合学习更完整。
查看所属VIP全部课程 →
← 返回所属目录 咨询 / 购买

GPU核函数显存溢出排查指南

📚 共计 30 章节
01
显存溢出初探
什么是显存溢出(OOM)· 典型表现 · 为什么GPU核函数容易引发OOM
概念入门
02
GPU内存模型速览
全局/共享/寄存器/本地/常量/纹理内存 · 容量与特性
内存模型基础
03
显存分配与释放
cudaMalloc/cudaFree · 内存泄漏场景 · cudaMallocManaged陷阱
API泄漏
04
核函数中的临时变量
局部变量与寄存器 · 寄存器溢出(register spilling)检测与影响
寄存器性能
05
共享内存使用规范
动态/静态共享内存 · bank conflict · 容量限制与过度申请
共享内存优化
06
线程块与网格配置
blockDim/gridDim设置 · 线程块数量与显存占用 · occupancy优化
配置occupancy
07
内存访问模式
合并访问与非合并访问 · 对齐要求 · 对显存占用的间接影响
访存效率
08
显存碎片化问题
频繁分配释放导致碎片 · cudaMalloc底层行为 · 避免碎片化
碎片内存管理
09
工具篇:nvidia-smi
监控显存 · nvidia-smi topo -m · 实时显存使用率解读
工具监控
10
工具篇:CUDA-MEMCHECK
检测越界访问与内存泄漏 · 实战案例分析
检查调试
11
工具篇:Nsight Systems
显存跟踪 · 时间线分析 · 识别显存瓶颈
profiling时间线
12
工具篇:Nsight Compute
核函数分析 · 寄存器与共享内存使用统计
分析寄存器
13
工具篇:cuda-memtest
检测硬件显存错误 · 长期稳定性测试
硬件稳定性
14
常见错误:未初始化/野指针
未初始化指针、野指针、悬空指针导致的OOM假象
指针错误
15
常见错误:循环内重复分配
循环内重复分配显存 · 忘记释放 · 内存池管理不当
泄漏循环
16
常见错误:核函数内动态分配
cudaMalloc inside kernel · 性能与风险
动态分配风险
17
常见错误:过度使用私有数组
寄存器溢出进而占用本地内存 · 性能下降
寄存器溢出本地内存
18
常见错误:共享/全局混用
共享内存与全局内存混用不当 · 同步问题引发隐性OOM
同步隐性OOM
19
常见错误:递归核函数
栈溢出与显存异常增长
递归栈溢出
20
常见错误:多流并发竞争
多流(stream)并发时的显存竞争 · 流同步不当
多流并发
21
常见错误:动态并行
dynamic parallelism显存管理 · 子核函数内存泄漏
动态并行子核
22
常见错误:第三方库泄漏
PyTorch/TensorFlow显存缓存机制 · 库泄漏
框架缓存
23
排查方法论:二分法定位
逐步注释核函数 · 最小复现用例构建
方法论调试
24
排查方法论:显存估算
显存使用量估算公式 · 手动计算与工具对比 · 误差分析
估算公式
25
排查方法论:日志与断点
printf调试 · cudaError_t检查
日志断点
26
排查方法论:自动化脚本
编写显存检查脚本 · 集成到CI/CD流程
CI/CD自动化
27
优化策略:减少全局访问
使用共享内存缓存 · 数据复用
优化共享内存
28
优化策略:调整线程块
提高occupancy · 减少寄存器使用
occupancy线程块
29
优化策略:内存池与UMA
cudaMemPool · 统一内存(UMA)适用场景
内存池UMA
30
综合案例实战
从OOM到稳定运行 · 完整排查过程 · 代码重构前后对比
实战重构