たとえば、ブロックが 1 つだけで、このブロック内にスレッドが 1 つしかない CUDA カーネルを呼び出しています。
カーネル<<<1、1>>>
このカーネルは、指定された単一のCUDA コアでのみ実行されますか? たとえば、GPU に 128 個のコアがある場合、128 個のうち 1 個だけが機能するのでしょうか?
どうもありがとう!
たとえば、ブロックが 1 つだけで、このブロック内にスレッドが 1 つしかない CUDA カーネルを呼び出しています。
カーネル<<<1、1>>>
このカーネルは、指定された単一のCUDA コアでのみ実行されますか? たとえば、GPU に 128 個のコアがある場合、128 個のうち 1 個だけが機能するのでしょうか?
どうもありがとう!
いいえ。CUDA は SIMD スタイルのアーキテクチャであり、基本的な実行ユニットはワープです。つまり、ハードウェア上でロック ステップごとに実行される 32 のスレッドのグループです。1 つのスレッドを含む 1 つのブロックを起動すると、ハードウェアは 32 のスレッドの 1 つのワープを実行し、そのうち 31 はマスクされ、noops のストリームに相当するものを実行します。特定のワープは単一のストリーミング マルチプロセッサで実行され、使用しているハードウェアの世代に応じて、ワープが実行される SM の 8、16、または 32 コアが必要になる場合があります。
各 CUDA コアは、SM の SIMD のレーンです。カーネルは 1 つの SM のみをアクティブにし、レーンの 1 つを利用します。そのため、カーネル <<<1,1>>> は非常に非効率的で、1 つの SM の 1 つのレーンしか使用しません。