CUDA コアを含む CUDA GPU にマルチプロセッサがあることを知っています。私の職場では、512 個の CUDA コア、16 個のマルチプロセッサを含み、ワープ サイズが 32 の GTX 590 を使用しています。つまり、これは、各マルチプロセッサに 32 個の CUDA コアがあり、同じワープの同じコードで正確に動作することを意味します。 . 最後に、ブロック サイズあたりの最大スレッド数は 1024 です。
私の質問は、ブロック サイズとマルチプロセッサ カウント - ワープ サイズがどのように正確に関連しているかです。状況についての私の理解を教えてください: たとえば、GTX 590 で最大 threadPerBlock サイズが 1024 の N ブロックを割り当てます。CUDA プログラミング ガイドおよび他のソースから理解する限り、ブロックは最初にハードウェアによって列挙されます。 . この場合、N 個のブロックのうち 16 個が異なるマルチプロセッサに割り当てられます。各ブロックには 1024 のスレッドが含まれ、ハードウェア スケジューラはこれらのスレッドのうち 32 を単一のマルチプロセッサの 32 のコアに割り当てます。同じマルチプロセッサ (ワープ) 内のスレッドは、コードの同じ行を処理し、現在のマルチプロセッサの共有メモリを使用します。現在の 32 個のスレッドがメモリの読み取り/書き込みなどのオフチップ操作に遭遇した場合、それらは、現在のブロックからの 32 個のスレッドの別のグループに置き換えられます。したがって、実際には 1 つのブロックに 32 のスレッドがあり、最後に、ブロックがマルチプロセッサによって完全に処理されると、N 個のスレッド ブロックのリストから新しいスレッド ブロックが現在のマルチプロセッサにプラグインされます。最後に、CUDA カーネルの実行中に、合計 512 のスレッドが GPU で並行して実行されます。(ブロックが 1 つのマルチプロセッサで使用できるよりも多くのレジスタを使用する場合、2 つのマルチプロセッサで動作するように分割されることはわかっていますが、この場合、各ブロックが 1 つのマルチプロセッサに収まると仮定します。)
では、CUDA 並列実行のモデルは正しいのでしょうか? そうでない場合、何が間違っているか、または不足していますか? 現在取り組んでいるプロジェクトを微調整したいので、全体の中で最も正確な作業モデルが必要です。