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

これが私のmakeコマンドです:

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

1 に答える 1

3

別のカーネルからカーネルを呼び出すことは、動的並列処理と呼ばれます。そのドキュメントはhereです。

以下が必要です。

  1. コンピューティング機能 3.5 デバイス。cuda deviceQuery サンプルを実行すると、デバイスのコンピューティング機能を確認できます。
  2. コンパイル コマンドのさまざまなスイッチ。cc3.5 アーキテクチャのコンパイルを指定するスイッチ、個別の (デバイス) コンパイルに必要なスイッチ、デバイス ランタイムとのリンクなどがあります。

GT550M は cc 3.5 デバイスではないため、この機能を使用することはできません。カーネル内からカーネルを呼び出す方法は他にありません。

于 2013-09-19T21:15:46.490 に答える