1

我在 CUDA 中有一个 __global__ 函数。它可以自称吗?

这是我的例子:

__global__ void 
force_create_empty_nodes (struct NODE *Nodes, int topnode, int bits, int no, int x, int y, 
                          int z, struct topnode_data *TopNodes)
{
    /// * Some code *///
    force_create_empty_nodes <<<1, 8>>>(Nodes, topnode+1, bits+1, no+1, 
                                             x+1, y+1, z+1, TopNodes);
}

我收到的错误是:

error: kernel launch from __device__ or __global__ functions requires separate compilation mode

这是我的制作命令:

nvcc -c -arch compute_35 cudaForceNodes.cu -o obj/cudaForceNodes.o
4

1 回答 1

3

从另一个内核调用一个内核称为动态并行。它的文档在这里

这个需要:

  1. 计算能力 3.5 的设备。您可以通过运行 cuda deviceQuery 示例来查找设备的计算能力。
  2. compile 命令中的各种开关,包括为 cc3.5 架构指定编译和单独(设备)编译所需的开关,以及与设备运行时链接的开关。

由于您的 GT550M 不是 cc 3.5 设备,您将无法使用此功能。没有其他方法可以从内核中调用内核。

于 2013-09-19T21:15:46.490 回答