动态并行是 CUDA 编程模型的扩展,使 CUDA 内核能够直接在 GPU 上创建新工作并与其同步。 在程序中任何需要的地方动态创建并行性都提供了令人兴奋的功能。
直接从 GPU 创建工作的能力可以减少在主机和设备之间传输执行控制和数据的需要,因为现在可以由在设备上执行的线程在运行时做出启动配置决策。 此外,可以在运行时在内核内内联生成依赖于数据的并行工作,动态利用 GPU 的硬件调度程序和负载平衡器,并根据数据驱动的决策或工作负载进行调整。 以前需要修改以消除递归、不规则循环结构或其他不适合平面、单级并行性的构造的算法和编程模式可以更透明地表达。
本文档描述了支持动态并行性的 CUDA 扩展功能,包括利用这些功能所需的对 CUDA 编程模型的修改和添加,以及利用这种附加功能的指南和最佳实践。
动态并行仅受计算能力 3.5 及更高版本的设备支持。
网格是线程的集合。 网格中的线程执行内核函数并被划分为线程块。
线程块是在同一多处理器 (SM) 上执行的一组线程。 线程块中的线程可以访问共享内存并且可以显式同步。
内核函数是一个隐式并行子例程,它在 CUDA 执行和内存模型下为网格中的每个线程执行。