2011-07-14 18 views
0

このスレッドにはTurning off coalescingNvidia Forumが入りました。「これまではメモリポインタ/配列を「volatile」に設定すると大量のランダムアクセスが助長されています。パフォーマンス?!)」。CUDA:2次元配列のvolatileを使用しているエラー

私はCUDAを使用してGPU(Fermi)上で有限差分計算(3Dステンシル計算)を行っており、計算のパフォーマンスを向上させたいと考えています。 3D配列のz軸へのアクセスはランダムなので(3D配列はZ、Y、Xが遅いものから速いものに置かれます)、volatileを使う方が良い選択だと感じます。現在、私は私が

volatile float **plane = 2dplane; 

として揮発使用してみましたとき、私は[このエラーが

error: a value of type "float ()[16]" cannot be used to initialize an entity of type "volatile float *"

誰がどのように2次元配列上の揮発性を使用する方法を教えてもらえます取得共有メモリに

__shared__ float 2dplane[32][32] 

を使用していますコード例が参考になります]。さらに、パフォーマンスの向上がどれほど期待できるかを誰かが教えてくれれば幸いです。

答えて

4

共有メモリ配列は2Dではなく、volatileと宣言されていません。そのため、代入文は不正です。

NVIDIA掲示板からの激しい示唆は、ナンセンスなので、あなたが読んだものすべてを信じてはいけないと言うことができます(あなたが夢中なら、Google「スカイバック飛行」)。 volatileキーワードは、コンパイラがレジスタからメモリへの書き込みを強制するかどうかを制御します。メモリスループットに有益な効果はありません。

+1

「Google」スカイバックは「あなたが夢中なら」。 OMG、この男はばかだ! –