【CUDA】テクスチャメモリの使用方法 その2

CUDA入門
マウスコンピューター/G-Tune

テクスチャメモリ(TextureMemory)の使用方法のパターンその2を解説します。
こちらで解説する方法だと、動的にテクスチャのオブジェクトを生成したり、その他の設定ができます。

その1はこちら

【CUDA】テクスチャメモリの使用方法 その1
テクスチャメモリ(TextureMemory)の解説を行います。 スレッド内で連続したメモリ領域にアクセスした場合、 キャッシュが効くので グローバルメモリよりも高速化できる可能性があります。

コード

2Dで呼び出す場合のコード例を示します。

以下はカーネル呼び出し側のコードです。

カーネルはこのようになります。

このコードでは、カーネル内で配列範囲外が読み込まれますが、ソフトが落ちるということはありません。

設定

cudaTextureDesc  

addressMode : テクスチャの範囲外を指定したときの読み出しモード
 ・cudaAddressModeClamp : 直近の有効な要素の値にする 座標が正規化されていないこと
 ・cudaAddressModeBorder : 範囲外なら0を返す? 座標が正規化されていないこと

filterMode : テクスチャ読み出し時のフィルタモード
 ・ cudaFilterModePoint : 最近傍の座標の値を読み出す
 ・ cudaFilterModeLinear:座標で小数点以下を指定したとき線形補完した値を読み出す
  これを選択するとreadMode で正規化する必要がありそう

readMode : テクスチャ読み出し時のモード
 ・ cudaReadModeElementType: 通常通り読み出す
 ・ cudaReadModeNormalizedFloat:0~1に正規化して読み出す。
  1要素が1Byteなら255を掛ける必要がある

読み出しモードなどを変えたとき、カーネルでtex2D<BYTE> を tex2D<FLOAT>などに変えてやる必要があるので注意してください。

マウスコンピューター/G-Tune