CUDA相当于glDispatchComputeIndirect

时间:2018-06-07 06:04:56

标签: cuda

在Pascal以上的Cuda中调用OpenGL glDispatchComputeIndirect()的简单序列链的最接近和有效的等价是什么?调度/内核链动态地改变启动参数大小(块/线程等)。

glDispatchComputeIndirect()可能只是一个驱动程序端的API调用开销优化而不是真正的设备端机制吗?

glDispatchComputeIndirect()是否等效于嵌套并行性,顶级内核为1个块,1个线程执行子内核调用序列?

__device__ int blocks = 1;
__device__ int threads = 1;

__global__ void Parent()
{
 Child1<<<blocks, threads>>>(); // changes blocks/threads inside child
 cudaDeviceSynchronize();
 Child2<<<blocks, threads>>>(); // changes blocks/threads inside child
 cudaDeviceSynchronize();
...
}

1 个答案:

答案 0 :(得分:1)

  

glDispatchComputeIndirect()可能只是一个驱动程序端的API调用开销优化而不是真正的设备端机制吗?

几乎可以肯定。

  

glDispatchComputeIndirect()是否等效于嵌套并行性,顶级内核为1个块,1个线程执行子内核调用序列?

几乎肯定不会。

当然,您可以自由地使用动态并行作为此功能的代理。还可以使用映射内存或托管内存使GPU在内核启动之间回写到主机可访问内存。但据我所知,同样的“管道”式间接论证机制并不存在。