以下が分かりません。
カーネルを起動して、たとえば thread 0
in block0
を呼び出した後、__syncthreads()
他のすべてのブロック内の他のすべてのスレッドは0
、 block 内のスレッドによってグローバル メモリに加えられた変更を確認でき0
ますか?
私の推測ではノーです。実際、CUDA C プログラミング ガイドの同期関数セクションでは、次のように述べられています。
void __syncthreads();
スレッド ブロック内のすべてのスレッドがこのポイントに到達し、これらのスレッドによって以前に行われたすべてのグローバルおよび共有メモリ アクセスが、ブロック内のすべてのスレッド__syncthreads()
から見えるように なるまで待機します。
ただし、動的並列処理におけるグローバル メモリの一貫性について話す場合、CUDA C プログラミング ガイドには次のように記載されています。
これらの変更は、2 回目の呼び出し後にのみ、親グリッドの他のスレッドで使用できるようになります。
__syncthreads()
__syncthreads()
動的並列処理が関係している場合、ブロック全体で変更を利用できるようにしますか?
ありがとう