我们是否可以在另一个__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__
函数中使用推力库中的任何函数?
答案 0 :(得分:2)
计算能力3.5和更新的硬件支持所谓的Dynamic Parallelism,这使他们能够通过在GPU上运行内核来启动内核,而无需任何主机API调用。
较旧的硬件支持可以从内核调用的函数(这些函数表示为__device__
而不是__global__
)并且仅在线程范围内执行,因此不会启动新内核。
自从Thrust 1.8发布以来,引入了serial execution policy,它允许推进算法被现有运行内核中的线程调用,就像__device__
函数一样。 Thrust还应该通过支持硬件上的thrust::device
执行策略来支持动态并行。