内核中的CUDA流ID

时间:2011-11-23 10:05:02

标签: cuda

如何找出内核函数中的当前执行流ID?我期望一个类似于blockIdx或threadIdx的预定义变量,但是找不到任何提及“streamId”的东西。还有另一种方式吗?

2 个答案:

答案 0 :(得分:7)

在CUDA中,流是主机驱动程序工具 - 实际上只是一系列命令管道,驱动程序从中选择要在GPU上启动的任务。在“基本”CUDA架构中,GPU具有用于PCI Express总线上的存储器传输的“DMA引擎”,以及用于执行内核代码的“执行引擎”,就是这样。在Fermi上最多可以有两个“DMA引擎”,而“执行引擎”似乎是主机驱动程序,可以允许多个内核执行。驱动程序将工作从一个或多个FIFO缓冲区(通过流API公开)推送到这些引擎上。但GPU本身并不知道有关流的任何信息,它们只是一个主机端设备。

答案 1 :(得分:6)

如果您需要内核中的流ID,您可以随时将其作为参数传递给内核:

__global___
void kernel(int streamId) {
    //...
}

void callKernel() {
    cudaStream_t stream;
    cudaStreamCreate(&stream);

    kernel<<<1,1,0,stream>>>((int)stream);
}