我正在尝试学习如何使用 CUDA 动态并行。
我有一个简单的 CUDA 内核,它可以创建一些工作,然后启动新内核来执行该工作。假设我只用 1 个线程的 1 个块启动父内核,如下所示:
int nItems = 100
parentKernel<<<1,1>>>(nItems);
现在,在我的父内核中,我创建了工作,然后启动了一个子内核,如下所示:
__global__ void parentKernel(int nItems)
{
// create some work
// invoke child kernel
childKernel<<<2, 256>>>();
}
请注意,子内核启动时使用的线程和块 (2x256) 比父内核提供的 (1x1) 多。
子内核真的会并行运行 512 个线程吗?还是父内核必须将其线程分配给子内核?