CUDA内核从内部调用for循环

use*_*099 5 cuda

我有一个从for循环中调用的CUDA内核.就像是

for(i=0; i<10; i++) {
   myKernel<<<1000,256>>>(A,i);
}
Run Code Online (Sandbox Code Playgroud)

现在假设我有一个带有15个流多处理器(SM)的NVIDIA卡.同样假设,为了简单起见,只有一个块可以映射到SM,这基本上说大多数时候,我将在设备上执行15个块.由于内核执行是异步的,基本上i = 1的调用将在第一个内核启动后立即执行(i = 0).

我的问题是:在执行第一个内核(i = 0)的某个时刻,只有14个SM忙,然后只有13个,然后只有12个,那么只有11个等等.

只要有一个SM可用,就会将i = 1的内核发送到设备上执行,或者第二个内核的启动是否会等到所有SM完成处理第一个内核(i = 0的内核)?

还假设我在一个CUDA流中工作.

Eug*_*ene 4

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