5

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ストリーム内で作業していると仮定します。

4

1 に答える 1

4

同じストリームでのカーネルの起動はシリアル化されます。十分なリソース (SM、共有メモリなど) があれば、異なるストリームからのカーネル呼び出しが重複する可能性があります。

于 2012-08-08T23:20:43.623 に答える