我有一个从 for 循环中调用的 CUDA 内核。就像是
for(i=0; i<10; i++) {
myKernel<<<1000,256>>>(A,i);
}
现在假设我有一张带有 15 个流多处理器 (SM) 的 NVIDIA 卡。为简单起见,还假设只有一个块可以映射到 SM,这基本上是说大多数时候,我将在设备上执行 15 个块。由于内核执行是异步的,基本上 i=1 的调用将在第一个内核启动后排队执行(i=0 的那个)。
我的问题是:在执行第一个内核(i=0)时,只有 14 个 SM 忙,然后只有 13 个,然后只有 12 个,然后只有 11 个,等等。
是否会在一个 SM 可用时立即发送 i=1 的内核在设备上执行,或者第二个内核的启动会等到所有 SM 完成处理第一个内核(i=0 的那个)?
还假设我在一个 CUDA 流中工作。