処理するデータがいくつかあり、各ブロックがデータの特定のサブセットを担当しています。
私のアプリケーションの性質上、このデータをテクスチャメモリに配置したいと思います。ただし、データが大きすぎて1つのテクスチャ参照に収まりません。
正しく理解していれば、複数のテクスチャ参照を持つことはできますが、テクスチャ参照の配列を持つことはできません。
各ブロックのデータの異なるサブセットを処理する必要があるため、(カーネルで)次のようなことを行うことを考えていました。
while(counter < 10000) {
if(blockIdx.x == 0)
foo = tex2D(tex0, x, y);
else if(blockIdx.x == 1)
foo = tex2D(tex1, x, y);
...
}
しかし、これは見た目が悪いだけでなく、発散の問題が発生しないかどうかもわかりません。
のようなことをする
texture<int, 2, cudaReadModeElementType> ref;
(..)
/* kernel code from now on */
if(blockIdx.x == 0)
ref = tex0;
else if(blockIdx.x == 1)
ref = tex1;
...
while(counter < 10000)
foo = tex2D(ref, x, y)
また、テクスチャ参照はグローバルであり、スレッドにプライベートではないと私は信じているので、まったく正しくないようです。
他に選択肢はありますか?ありがとうございました。