0

我正在尝试学习如何使用 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 个线程吗?还是父内核必须将其线程分配给子内核?

4

1 回答 1

3

子内核启动就像您从主机代码启动了一个新内核一样。没有基于控制子内核网格大小的父内核的限制。

您的子内核将运行 2 个每个 256 个线程的块,就像您从主机代码启动它一样。这些都将在我能想到的任何 GPU 上“并行”运行。

于 2021-10-10T20:56:22.203 回答