⚡ CUDA 动态并行 · 递归深潜
🧩 30 章 · 从入门到异构实战
🎒 友好色系 · 专业内核
01
动态并行初探
什么是CUDA动态并行?为什么需要它?与传统内核调用的区别。
02
环境与编译
支持动态并行的GPU架构 (Kepler+),编译选项 -rdc=true,运行时API。
03
第一个动态并行程序
在GPU上启动内核 (cudaLaunchDevice),父子内核概念。
04
设备端内核声明
__global__函数在设备端的调用限制,__device__修饰符的作用。
05
同步机制
cudaDeviceSynchronize在设备端的使用,隐式同步与显式同步。
06
递归基础
GPU递归的可行性,栈空间限制,递归深度与性能。
07
递归实现归约
使用动态并行实现树形归约,每个线程块处理子问题。
08
递归实现快速排序
GPU上的QuickSort,递归划分与基准选择。
09
递归实现八叉树
空间划分与动态并行,光线追踪中的应用。
10
动态并行中的内存管理
全局内存分配 (cudaMallocFromDevice),内存池。
11
父子内核数据传递
通过指针传递数据,共享内存的限制。
12
错误处理
设备端错误码 (cudaError_t),cudaGetLastError在设备端的使用。
13
性能分析
动态并行的开销,启动延迟,与CPU递归的对比。
14
避免死锁
动态并行中的死锁场景,循环依赖,资源耗尽。
15
嵌套深度限制
最大嵌套层数 (24层),如何检测与避免溢出。
16
动态并行与流
在设备端创建流 (cudaStreamCreate),多流并发。
17
事件与同步
设备端事件 (cudaEvent_t),记录事件与等待。
18
动态并行与纹理内存
在子内核中使用纹理,只读缓存优化。
19
动态并行与常量内存
常量内存的只读特性,在递归中的使用。
20
动态并行与原子操作
原子加、原子CAS在递归中的应用。
21
实战:BFS 广度优先搜索
图遍历,层级扩展,动态并行实现。
22
实战:DFS 深度优先搜索
递归回溯,路径记录,GPU加速。
23
实战:N体模拟 (Barnes-Hut)
树构建与遍历,动态并行加速。
24
实战:自适应网格细化 AMR
动态网格划分,递归加密。
25
实战:光线追踪 (BVH遍历)
BVH遍历,递归求交,动态并行。
26
调试技巧
使用cuda-gdb调试动态并行程序,断点设置。
27
工具与Profiler
NVIDIA Nsight分析动态并行,可视化嵌套调用。
28
常见陷阱
过度递归导致栈溢出,未同步导致数据竞争。
29
优化策略
减少启动次数,合并内存访问,使用共享内存。
30
总结与展望
动态并行的未来,与CUDA Graphs的结合,异构计算趋势。