如何找出内核函数中的当前执行流ID?我期望一个类似于blockIdx或threadIdx的预定义变量,但是找不到任何提及"streamId"的东西.还有另外一种方法吗?
在CUDA中,流是主机驱动程序工具 - 实际上只是一系列命令管道,驱动程序从中选择要在GPU上启动的任务.在"基本"CUDA架构中,GPU具有用于PCI Express总线上的存储器传输的"DMA引擎",以及用于执行内核代码的"执行引擎",就是这样.在Fermi上最多可以有两个"DMA引擎","执行引擎"似乎是主机驱动程序,可以允许多个内核执行.驱动程序将工作从一个或多个FIFO缓冲区(通过流API公开)推送到这些引擎上.但GPU本身并不知道有关流的任何信息,它们只是一个主机端设备.
如果您需要内核中的流ID,您可以随时将其作为参数传递给内核:
__global___
void kernel(int streamId) {
//...
}
void callKernel() {
cudaStream_t stream;
cudaStreamCreate(&stream);
kernel<<<1,1,0,stream>>>((int)stream);
}
Run Code Online (Sandbox Code Playgroud)