是否可以在CUDA中的另一个内核函数中调用内核函数?

时间:2015-10-22 21:29:55

标签: c++ cuda

我们是否可以在另一个__global__函数中调用__global__函数,该函数也是CUDA中的内核(__global__)?

例如:

    __global__ void func()
    {
            .
            .
    }

    __global__ void foo()
    {
            .
            .
            func //this is a "func" function that has defination on the kernel
    }

    int main(void)
    {
            .
            .
            func <<<1, 1 >>>()
            foo <<<1, 1 >>>()
    }

是否可以在__global__函数中使用推力库中的任何函数?

1 个答案:

答案 0 :(得分:2)

计算能力3.5和更新的硬件支持所谓的Dynamic Parallelism,这使他们能够通过在GPU上运行内核来启动内核,而无需任何主机API调用。

较旧的硬件支持可以从内核调用的函数(这些函数表示为__device__而不是__global__)并且仅在线程范围内执行,因此不会启动新内核。

自从Thrust 1.8发布以来,引入了serial execution policy,它允许推进算法被现有运行内核中的线程调用,就像__device__函数一样。 Thrust还应该通过支持硬件上的thrust::device执行策略来支持动态并行。