カーネル起動操作の仕組みに関する情報はあまり見つかりません。APIは、 CudaProgGuideを参照すると言います。そして、私もそこに多くを見つけていません。
カーネルの実行は非同期であり、一部のマシンは同時実行をサポートしているため、カーネルのキューがあると思われます。
Host code:
1. malloc(hostArry, ......);
2. cudaMalloc(deviceArry, .....);
3. cudaMemcpy(deviceArry, hostArry, ... hostToDevice);
4. kernelA<<<1,300>>>(int, int);
5. kernelB<<<10,2>>>(float, int));
6. cudaMemcpy(hostArry, deviceArry, ... deviceToHost);
7. cudaFree(deviceArry);
3 行目は同期です。4 行目と 5 行目は非同期で、マシンは同時実行をサポートしています。したがって、ある時点で、これらのカーネルは両方とも GPU 上で実行されます。(kernelA が終了する前に、kernelB が開始および終了する可能性があります。) これが発生している間、ホストは行 6 を実行しています。 kernelB が終了しました。
1) GPU にカーネル キューはありますか? (GPU はホストをブロック/ストールしますか?
)