2

私はOpenCLにかなり慣れていないので、ご容赦ください。

コードの最初の反復では、大規模なデータセットに基本的なメモリバッファーを使用し、それらをグローバルとして宣言しました。しかし、タイミングを改善しようとしているので、これにはテクスチャメモリを使用したいと思いました。CUDAバージョンでは、cudaBindTextureとtex1Dfetchを使用して、大きな1Dフロート配列のデータを取得します。私の仕様の理解からすると、テクスチャメモリは画像メモリと同じものです。ただし、最大の高さと幅を持つ2Dおよび3Dの画像オブジェクトしかないため、いくつかの問題が発生します。配列が最大の高さ/幅よりも大きいが、最大の高さ*最大の幅ではない。1D配列を2Dに変換する必要がありますか?それともそれを行うためのより良い方法はありますか?

それとも私は完全にオフですか?

http://forums.nvidia.com/index.php?showtopic=151743http://forums.nvidia.com/index.php?showtopic=150454を読みましたが、テクスチャメモリかどうかについては正確には決定的ではありませんでした。ベストプラクティスとプログラミングガイドで言及されているのは、実際には画像オブジェクトでした。

ありがとう、そしてどんな助け/提案も大歓迎です!

4

3 に答える 3

3

私はここでNVidiaのフォーラムへの私の投稿への返信として最良の答えを見つけました。

于 2009-12-31T17:23:16.457 に答える
1

配列が最大の高さ/幅よりも大きいが、最大の高さ*最大の幅ではない。1D配列を2Dに変換する必要がありますか?

はい、テクスチャハードウェアには最大インデックス値に制約があります。これらの値を超える場合は、複数のインデックス値を使用するように変換する必要があります。

とはいえ、テクスチャアクセスに変換することでプログラムが高速化されることを意味しているわけではありません。

于 2009-12-30T16:51:50.010 に答える
1

OpenCL1.2は1Dテクスチャをサポートしています。問題は、NVIDIAがAMDやIntelとは異なりOpenCL1.1のみをサポートしていることです...

于 2014-01-31T00:53:34.737 に答える