forループ内から呼び出されるCUDAカーネルがあります。何かのようなもの
for(i=0; i<10; i++) {
myKernel<<<1000,256>>>(A,i);
}
ここで、15個のストリームマルチプロセッサ(SM)を備えたNVIDIAカードを持っていると仮定します。また、簡単にするために、SMにマップできるブロックは1つだけであると想定します。これは、基本的に、ほとんどの場合、デバイスで15ブロックを実行することを意味します。カーネルの実行は非同期であるため、基本的にi = 1の呼び出しは、最初のカーネル(i = 0のカーネル)が起動された直後に実行のために整列されます。
私の質問はこれです:最初のカーネル(i = 0)が実行されるある時点で、ビジー状態のSMは14のみ、次に13のみ、次に12のみ、次に11のみなどになります。
1つのSMが使用可能になるとすぐに、i = 1のカーネルがデバイスで実行のために送信されますか、それともすべてのSMが最初のカーネル(i = 0のカーネル)の処理を終了するまで、この2番目のカーネルの起動が待機しますか?
また、私が1つのCUDAストリーム内で作業していると仮定します。