1

変更する権限がないオブジェクトで構成されるコードがあります。一方で、いくつかの計算を行うために CUDA カーネルを作成する必要があります。現時点では、必要な情報を配列または構造体に変換して渡しています。オブジェクトをそのままCUDAカーネルに渡すことは可能ですか?CUDAカーネルがクラスのプライベートメンバーにアクセスする方法はありますか? 何人かの人々は私にスラストを提案しました.

4

1 に答える 1

4

CUDA コードで C++ 機能を使用できます。いくつかの追加要件があります。たとえば、カーネル関数はクラスのメンバーになれません。使用するには、データ構造を所有しており、いくつかの要件に適合する必要があります。

  • デバイス コードで使用する必要があるメンバーには、次のように注釈を付ける必要があります。__device__
  • __device__コンストラクターを実装する必要があります。
  • 構造体がポインタをカプセル化する場合、これはデバイス メモリに割り当てる必要があります。
  • テンプレートは使用できますが、仮想関数を持つクラスは使用できません。

プログラミング ガイドの付録 D. C/C++ 言語サポートで、c++ データ構造の例をいくつか見ることができます。

あなたの具体的な質問については:

  1. はい、カーネルでオブジェクトを渡すことができます。__device__そのためのコピーコンストラクターを実装する必要があります。
  2. クラス メソッドでプライベート メンバーにアクセスできます。__device__クラス外で使用するには、アクセサメソッドを実装する必要があります。ただし、カーネル呼び出しを介してプライベート メンバーを持つクラスを渡すことはできません。
于 2012-06-24T20:45:41.757 に答える