技術

tex1D と tex1Dfetch の使い分け

私が思うCUDAの微妙な点の一つとして、tex1D と tex1Dfetchという2つのテクセルフェッチ関数の存在がある。

tex1D はCUDA arrayをバックエンドに持つテクスチャリファレンス用。
tex1Dfetch は線形メモリをバックエンドに持つテクスチャリファレンス用。

これは公式のドキュメントに明記されてるので、そういう意味では問題ないけど、
万一これを取り違えてしまうとおかしなデータが読み出されることになり、正しい結果は出なくなる。
コンパイルエラーや実行時エラーは発生しないので、原因の特定に以外と時間を食ったりする。

それだけならまだマシなんだけど、環境・デバイスによっては tex1Dfetch でバックエンドが何だろうが正常に読み出せてしまったりするので、同じソース同じCUDAバージョンなのに、マシンによって結果が違うなんてことも起こりうる。
実際にうちではMac + Geforce 9400Mの環境で tex1Dfetch がCUDA arrayをバックエンドに持つテクスチャリファレンスにも使えていた。
そのおかげで、他の環境にソースを持って行って結果がおかしくなったときに、OSが違うからか?とか見当はずれの部分を調べてしまって、結構時間を無駄にした。

コメントを残す

メールアドレスが公開されることはありません。



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください