CUDA内核从内部调用for循环

时间:2012-08-08 22:39:39

标签: cuda

我有一个从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 = i) 0)?

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

1 个答案:

答案 0 :(得分:4)

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