2017-03-07 116 views
1

是否有任何理由让OpenCL标准选择使用参数类型const size_t *而不是仅在clEnqueueNDRangeKernel函数中传递const size_t为什么OpenCL的clEnqueueNDRangeKernel使用const size_t *作为参数?

这个决定背后的推理是什么?

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

谢谢

+0

也许它可以让你在排队后但在执行实际命令之前改变全局范围。没有这一点,它将在入队时保持不变。或者,当你将null留给本地范围时,它会进行自动调整,也许它将该值放在那个地方,但我没有试图检查它。 –

回答

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); 
+0

这使得总体感觉。谢谢!下次我需要更仔细地阅读手册。我只想象work_dim = 1的情况。 – user27653

相关问题