5

我有一个从 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 流中工作。

4

1 回答 1

4

同一流中的内核启动被序列化。给定足够的资源(SM、共享内存等),来自不同流的内核调用可能会重叠

于 2012-08-08T23:20:43.623 回答