【问题标题】:Multiple Child Kernels running in Parallel in CUDA多个子内核在 CUDA 中并行运行
【发布时间】:2013-11-25 00:34:36
【问题描述】:
    _global__ ChildKernel1(void* data){
        //Operate on data
    }


_global__ ChildKernel2(void* data){
        //Operate on data
    }


_global__ ChildKernel3(void* data){
        //Operate on data
    }

__global__ ParentKernel(void *data){
        ChildKernel1<<<16, 2>>>(data);
        ChildKernel2<<<64, 3>>>(data);
        ChildKernel3<<<32, 4>>>(data);
        ChildKernel4<<<16, 5>>>(data);

    }
    // In Host Code
    ParentKernel<<<256, 64>>(data);

我想并行运行所有子内核。那我该怎么办?

【问题讨论】:

  • 反对票也应该伴随着原因。
  • 我没有投反对票。问题是什么 ?如果您可以发布一个小型复制器并描述问题所在,那将会很有帮助。我假设您知道动态并行需要 CC3.5 GPU。
  • 投反对票的基本原因是将鼠标悬停在投反对票按钮上。 “这个问题没有表现出任何研究努力,目前还不清楚......”你的问题是否表明已经研究过该主题以发现可能的答案?此外,上面的评论指出“有什么问题?”这可能表明问题不清楚。

标签: cuda gpu nvidia


【解决方案1】:

你读过编程指南的dynamic parallelism section吗?

正如您所展示的,ParentKernel 中的每个线程都将执行由对子内核的 4 次调用组成的代码。这使答案变得复杂。

所以,就各个线程而言,是的,各种内核可以在线程之间并行运行。

但请记住,由给定线程发布到同一流中的 cuda 内核将被序列化。因此,对于ParentKernel 中的每个单独线程,从该线程启动的单独子内核将被序列化。

要让单个线程中的内核能够并行运行,请将它们启动到单独的streams

最后,最大的警告:就像从主机启动的asynchronous concurrent execution of kernels 一样,设备端内核只能在资源允许的情况下“并行”运行。不保证内核的并行执行。

【讨论】:

    猜你喜欢
    • 2013-01-31
    • 2021-05-15
    • 2015-09-28
    • 1970-01-01
    • 2011-05-19
    • 2020-06-01
    • 2011-05-01
    • 1970-01-01
    • 2012-06-15
    相关资源
    最近更新 更多