理解してください、でも英語がわかりません。
私のコンピューティング環境は
- CPU:Intel Xeon x5690 3.46Ghz * 2EA
- OS:CentOS 5.8
- VGA:Nvidia Geforce GTX580(CCは2.0)
CUDACプログラミングガイドの「合体メモリアクセス」に関するドキュメントをすでに読みました。しかし、私の場合は適用できません。
私は32x32ブロック/グリッドと16x16スレッド/ブロックを持っています。それは次のコードを意味します。
dim3 grid(32, 32);
dim3 block(16,16);
kernel<<<grid, block>>>(...);
次に、その合体したメモリアクセスをどのように使用できますか?
以下のカーネルのコードを使用しました。
int i = blockIdx.x*16 + threadIdx.x;
int j = blockIdx.y*16 + threadIdx.y;
...
global_memory[i*512+j] = ...;
スレッドの総数が512x512スレッドであるため、定数512を使用しました。これはgrid_sizexblock_sizeです。
しかし、Visual Profilerからは、「グローバルメモリストアの効率が低い[平均9.7%、コンピューティングの100%を占めるカーネルの場合]」を見ました。
ヘルパーは、合体したメモリアクセスを使用すると言います。しかし、メモリのインデックスコンテキストを何に使用すればよいかわかりません。
詳細コードの詳細については、CUDAOccupancyCalculatorとは異なる実験の結果