为什么OpenCL的clEnqueueNDRangeKernel使用const size_t *作为参数?

时间:2017-03-07 18:09:10

标签: opencl

有没有理由说OpenCL标准选择使用参数类型const size_t *而不只是在const size_t函数中传递clEnqueueNDRangeKernel

这个决定背后的原因是什么?

如果标准将clEnqueueNDRangeKernel定义为使用const size_t而不是const size_t *,那么效果或任何其他指标会有任何变化吗?

由于

1 个答案:

答案 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);