変更する権限がないオブジェクトで構成されるコードがあります。一方で、いくつかの計算を行うために CUDA カーネルを作成する必要があります。現時点では、必要な情報を配列または構造体に変換して渡しています。オブジェクトをそのままCUDAカーネルに渡すことは可能ですか?CUDAカーネルがクラスのプライベートメンバーにアクセスする方法はありますか? 何人かの人々は私にスラストを提案しました.
質問する
4895 次
1 に答える
4
CUDA コードで C++ 機能を使用できます。いくつかの追加要件があります。たとえば、カーネル関数はクラスのメンバーになれません。使用するには、データ構造を所有しており、いくつかの要件に適合する必要があります。
- デバイス コードで使用する必要があるメンバーには、次のように注釈を付ける必要があります。
__device__
__device__
コンストラクターを実装する必要があります。- 構造体がポインタをカプセル化する場合、これはデバイス メモリに割り当てる必要があります。
- テンプレートは使用できますが、仮想関数を持つクラスは使用できません。
プログラミング ガイドの付録 D. C/C++ 言語サポートで、c++ データ構造の例をいくつか見ることができます。
あなたの具体的な質問については:
- はい、カーネルでオブジェクトを渡すことができます。
__device__
そのためのコピーコンストラクターを実装する必要があります。 - クラス メソッドでプライベート メンバーにアクセスできます。
__device__
クラス外で使用するには、アクセサメソッドを実装する必要があります。ただし、カーネル呼び出しを介してプライベート メンバーを持つクラスを渡すことはできません。
于 2012-06-24T20:45:41.757 に答える