我是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] )
)。以及当{3}是global_work1
和local_work1
中的元素时,在队列指令中指定维度2的原因。
答案 0 :(得分:0)
你告诉CL: "使用2D和这些全局/本地大小"
在此队列中运行此内核CL只是获得参数的前2个维度,而忽略了第3个维度。
关于1D和2D之间的区别。空无一人。由于OpenID内核作为1D启动,因此get_global_id(1)
和get_global_id(2)
调用不会失败。它们只会返回0.所以除了提示内核可能支持第二维参数的更大尺寸(即:512x128)之外,没有任何区别