OpenCL clEnqueueNDRangeKernel work_dim VS global_work数组元素

时间:2015-11-08 19:42:32

标签: opencl gpu

我是OpenCL的新手,我试图理解这段代码:

size_t global_work1[3]  = {BLOCK_SIZE, 1, 1};
size_t local_work1[3]  = {BLOCK_SIZE, 1, 1};

err = clEnqueueNDRangeKernel(cmd_queue, diag, 2, NULL, global_work1, local_work1, 0, 0, 0);

因此,在指定内核的clEnqueueNDRangeKernel 2维(work_dim字段)中,这意味着:

  • 维度0内核有多个线程等于BLOCK_SIZE并且只有一个组(我猜这些组的数量可以用这种方式计算=> ( global_work1[0] ) / ( local_work1[0] ))。
  • 维度1内核获得的线程数等于1且只有一个组。

以及当{3}是global_work1local_work1中的元素时,在队列指令中指定维度2的原因。

1 个答案:

答案 0 :(得分:0)

你告诉CL: "使用2D和这些全局/本地大小"

在此队列中运行此内核

CL只是获得参数的前2个维度,而忽略了第3个维度。

关于1D和2D之间的区别。空无一人。由于OpenID内核作为1D启动,因此get_global_id(1)get_global_id(2)调用不会失败。它们只会返回0.所以除了提示内核可能支持第二维参数的更大尺寸(即:512x128)之外,没有任何区别