从 for 循环内调用 CUDA 内核

标签 cuda

我有一个从 for 循环中调用的 CUDA 内核。类似的东西

for(i=0; i<10; i++) {
   myKernel<<<1000,256>>>(A,i);
}

现在假设我有一张带有 15 个流多处理器 (SM) 的 NVIDIA 卡。 为简单起见,还假设只有一个 block 可以映射到 SM,这基本上意味着大多数时候,我将在设备上执行 15 个 block 。 由于内核执行是异步的,基本上 i=1 的调用将在第一个内核(i=0 的那个)启动后立即排队执行。

我的问题是这样的:在执行第一个内核(i=0)时的某个时刻,将只有 14 个 SM 忙碌,然后只有 13 个,然后只有 12 个,然后只有 11 个,等等。

一旦有一个 SM 可用,i=1 的内核就会被发送到设备上执行,还是等到所有 SM 处理完第一个内核(i= 的那个内核)后才启动第二个内核? 0)?

还假设我正在一个 CUDA 流中工作。

最佳答案

同一流中的内核启动是序列化的。如果有足够的资源(SM、共享内存等),来自不同流的内核调用可能会重叠

关于从 for 循环内调用 CUDA 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874244/

相关文章:

image-processing - 如何在 cuda 中管理大型二维 FFT

cuda - 如何让 nvcc CUDA 编译器进行更多优化?

cuda - 在内核调用中使用断言

c - CUDA 中的简单缩减程序

c++ - 二维数组CUDA问题

performance - 如何计算 GPU 程序的加速比?

cuda - 从设备函数调用 Thrust device_vector

debugging - CUDA 调试,或者如何在不禁用优化的情况下获取 cuda-gdb 中的源代码行?

c++ - 在 C++ 项目中使用基于 CUDA 的库代码

c++ - CUDA:内存限定符的非法组合