基本的に、ここで何が問題なのかを正確に理解するのに苦労しています。
デバッグ中に共有メモリがブロック排他的に動作しているようには見えません。コードを正常に実行すると、何も出力されません。しかし、デバッグしようとすると、共有メモリがブロック間で共有され、print ステートメントに到達します。
これは一例です。明らかに、これはそれほど有用なコードではありませんが、私のシステムで問題を再現しています。私は何か間違ったことをしていますか?これはバグですか、それともデバッガの予想される動作ですか?
__global__
void test()
{
__shared__ int result[1];
if (blockIdx.x == 0 && blockIdx.y == 0 && blockIdx.z == 0)
result[0] = 4444;
else
{
if (result[0] == 4444)
printf("This should never print if shared memory is unique\n");
}
}
そしてそれを起動するには:
test<<<dim3(8,8,1), dim3(8,8,1)>>>();
また、共有メモリを完全に誤解している可能性も十分にあります。
助けてくれてありがとう。
その他の情報: GTX 460 を使用しています。プロジェクトには Compute_20 と sm_20 が設定されています。nsight 3.0 プレビューを使用して Visual Studio 2010 でコードを書いています。