4
我有一个从for循环中调用的CUDA内核。类似于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流中工作。
对同一个流上的操作进行序列化。在流中的先前工作完成之前,GPU不能读取pushbuffer中的下一个条目。 CC2.x-3.0可以支持16个并发内核(如果从不同的流发布,并且没有错误的依赖性或显着的状态改变)。 GPU将按照内核通过驱动程序提交的顺序将工作分配给SM。这意味着并发工作可能无序完成,但总是按顺序进行分配。有关更多信息,请参阅http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf – 2012-08-09 04:57:40