有没有理由说OpenCL标准选择使用参数类型const size_t *
而不只是在const size_t
函数中传递clEnqueueNDRangeKernel
?
这个决定背后的原因是什么?
如果标准将clEnqueueNDRangeKernel
定义为使用const size_t
而不是const size_t *
,那么效果或任何其他指标会有任何变化吗?
由于
答案 0 :(得分:3)
manual中解释了所有内容。基本上const size_t *
参数用于传递数组。使用2和3维时,需要使用数组来传递工作项数。下面提取了一些重要的片段:
cl_int clEnqueueNDRangeKernel ( cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, const size_t *global_work_offset, const size_t *global_work_size, const size_t *local_work_size, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event)
global_work_offset - 当前必须是NULL值。在OpenCL的未来版本中,global_work_offset可用于指定work_dim无符号值的数组...
global_work_size - 指向work_dim无符号值数组,这些值描述将执行内核函数的work_dim维度中的全局工作项数...
local_work_size - 指向一组work_dim无符号值,这些值描述构成工作组的工作项数(也称为工作组的大小),它将执行内核指定的内核...
示例:
size_t global[2] = {1024, 1024};
size_t local[2] = {64, 64};
clEnqueueNDRangeKernel(queue, kernel, 2, NULL, global, local, 0, NULL, NULL);