我有一个CUDA核函数,被在for循环内调用。大概是这样的:
假设我有一张带有15个流多处理器(SMs)的NVIDIA卡。为简单起见,假设只能将一个块映射到一个SM上,这基本上意味着大部分时间,我会在设备上执行15个块。由于内核执行是异步的,因此i=1的调用将在第一个内核启动后立即排队等待执行(即i=0的那个内核)。
我的问题是:当执行第一个内核(i=0)时,SMs中将只有14个繁忙,然后只有13个,然后只有12个,然后只有11个等等。内核i=1是否会在一个SM可用时立即被发送到设备上执行,还是会等待所有SMs完成处理第一个内核(i=0)?
同时假设我正在一个CUDA流中工作。
for(i=0; i<10; i++) {
myKernel<<<1000,256>>>(A,i);
}
假设我有一张带有15个流多处理器(SMs)的NVIDIA卡。为简单起见,假设只能将一个块映射到一个SM上,这基本上意味着大部分时间,我会在设备上执行15个块。由于内核执行是异步的,因此i=1的调用将在第一个内核启动后立即排队等待执行(即i=0的那个内核)。
我的问题是:当执行第一个内核(i=0)时,SMs中将只有14个繁忙,然后只有13个,然后只有12个,然后只有11个等等。内核i=1是否会在一个SM可用时立即被发送到设备上执行,还是会等待所有SMs完成处理第一个内核(i=0)?
同时假设我正在一个CUDA流中工作。