【问题标题】:Can a CUDA parent kernel launch a child kernel with more threads than the parent?CUDA 父内核可以启动比父内核具有更多线程的子内核吗?
【发布时间】:2021-11-29 02:37:44
【问题描述】:

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

【问题讨论】:

    标签: cuda dynamic-parallelism


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 2012-08-18
      • 2014-04-06
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2012-08-23
      相关资源
      最近更新 更多