【发布时间】:2011-11-23 10:05:01
【问题描述】:
如何在内核函数中找出当前的执行流 ID?我希望有一个类似于 blockIdx 或 threadIdx 的预定义变量,但找不到任何提及“streamId”的内容。还有其他方法吗?
【问题讨论】:
标签: cuda
如何在内核函数中找出当前的执行流 ID?我希望有一个类似于 blockIdx 或 threadIdx 的预定义变量,但找不到任何提及“streamId”的内容。还有其他方法吗?
【问题讨论】:
标签: cuda
在 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);
}
【讨论】:
typedef int cudaStream_t 看起来他们在更新的版本中更改了它,或者文档不正确