ブロックごとの共有メモリ使用量に基づいて、 CUDA共有メモリとブロック実行で実行状態をクリアしたいと考えています。
州
ブロックごとに 48KB の共有メモリと 15 のストリーミング マルチプロセッサを備えた GTX480 nvidia カードをターゲットにしています。したがって、15 ブロックでカーネルを宣言すると、それぞれが 48KB の共有メモリを使用し、他の制限 (レジスタ、ブロックあたりの最大スレッド数など) に達しません。この場合、同じブロックのワープ間のスケジューリングのみが必要です。
質問
したがって、私の誤解のシナリオは次のとおり
です。各 SM に 2 つのブロックが存在するように、30 ブロックのカーネルを呼び出します。各 SM のスケジューラは、異なるブロックからのワープを処理する必要があります。ただし、共有メモリの全量 (SM あたり 48KB) を使用するため、一方のブロックの実行が終了した場合にのみ、他方のブロックのワープが SM 上で実行されます。これが起こらず、異なるブロックのワープが同じ SM での実行をスケジュールしている場合、1 つのブロックが共有メモリ内の別のブロックからロードされた値を読み取ることができるため、結果が間違っている可能性があります。私は正しいですか?