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