0

私はCUDAの問題に苦しんでいます。再帰カーネルを作成しました (最新では許可されています)。.cu ファイルは、多数のオブジェクトを含む大きなプロジェクトの一部です。カーネルのパラメーターの 1 つは、次のような Piece オブジェクト ( Piece.cpp ) です。

parallelKernel (Piece* piece, vector upcomingPieces)

再帰呼び出しを取得する必要があるときは、次のピース インデックスを作成するので、次のように記述します。

Piece *nextPiece = upcomingPieces[nextPieceIndex];
parallelKernel (nextPiece, upcomingPieces);

しかし、コンパイル時にエラーが発生します:

error: cannot pass an argument with a user-provided copy-constructor to a device-side kernel launch

今、私はコピーコンストラクターを書き込もうとしていますが、うまくいかないようです。誰でもこれについてより多くの洞察を提供できますか??

4

1 に答える 1

1

CUDAは、特定のC ++コンストラクター、主にグローバル/共有メモリーのコンストラクター(およびコピーコンストラクター)をサポートできません。問題は、コンストラクターを誰が実行するのかということです。すべてのスレッド?たった1つのスレッド?自分のためのすべてのスレッド?

たとえば、これらは無効です。

__shared__ int x = 0;
__shared__ MyClassWithNontrivialConstructor obj;

私はあなたが同様の問題にぶつかっていると思います。

万が一upcomingPieces、共有メモリまたはグローバルメモリのどこかにありますか?その場合は、パラメーターをconst-referenceまたはポインターを介して渡すことを検討してください。

于 2012-11-23T12:49:57.690 に答える