我是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字段)中,这意味着:
BLOCK_SIZE,并且只有一个组(我猜可以用这种方式计算组数=> ( global_work1[0] ) / ( local_work1[0] ) )。以及为什么当三个维度是global_work1和local_work1中的元素时,队列指令中指定的维度为2。
发布于 2015-11-09 11:16:14
您正在告诉CL:“在这个队列中,使用2D和这些全局/本地大小运行这个内核”
CL只是得到了论点的前两个维度,而忽略了第三个维度。
关于一维和二维的区别。根本就没有。由于OpenCL内核作为1D启动,在get_global_id(1)和get_global_id(2)调用中不会失败。他们只会返回0。因此,除了暗示内核可能支持更大的二维参数(即: 512x128)之外,没有任何区别。
https://stackoverflow.com/questions/33598204
复制相似问题