1

インスタンスごとのテクスチャでクラスを定義しようとしています。はい、そのクラスのインスタンス数は少なくなります。CUDA テクスチャはグローバル変数でなければならないという制限を回避するために、次のアプローチを試しました。

  • テクスチャのグローバル テーブルを定義します。
  • インスタンス ID データ メンバーをクラスに追加します。
  • クラス メソッドで ID を使用してテーブルからテクスチャを選択し、それを引数として CUDA カーネルに渡します。

うまくいきません。テクスチャは引数として渡すことはできず (ポインターや参照によっても)、カーネルは配列名を認識せず、インデックスで渡すことはできません。おそらくswitchステートメントでそれを行うことができますが、それは醜いです。助言がありますか?

4

2 に答える 2

2

Compute Capability >= 3.0 の GPU を使用している場合は、テクスチャ参照の代わりにテクスチャ オブジェクトを使用できます。その後、テクスチャ オブジェクトをカーネル/関数の引数として渡すか、クラス メンバーとして使用できます。Cuda Programming Guide セクション B.8 またはTexture objectsを参照してください。

CC 3.0以上のデバイスを持っていない場合、あなたは運が悪く、あなたが言ったように、いくつかの引数に応じて適切なテクスチャ参照を選択する「醜い」スイッチステートメントがカーネルに必要になると思います.

于 2014-03-01T10:58:15.177 に答える