OpenCL 执行内核

通过前面教程的学习,我们分别创建了关联选定设备的上下文、命令对象、程序对象以及内核对象,OpenCL代码在设备上执行的前期准备都已准备好,本文讲述如何让内核函数在设备上执行。利用命令队列使将在设备上执行的内核排队,是通过如下函数完成的:

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 sizse_t *local_work_size,
                                    cl_uint num_events_in_wait_list,
                                    const cl_event *event_wait_list,
                                    cl_event *event)
  • 参数command_queue为提交内核执行任务的命令队列,命令队列创建时关联了指定的设备,command_queue关联的设备就是最后执行内核函数的设备。

  • 参数kernel为在设备上执行的内核函数。

  • 参数work_dim指定设备上执行内核函数的全局工作项的维度。最小为值1,最大值为CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS。

  • 参数global_work_offset为全局工作项ID的偏移量。如果global_work_offset为NULL,则偏移量为0。在目前的大多数设备上,此参数必须设置为NULL。

  • 参数global_work_size指定全局工作项的大小。

  • 参数local_work_size为一个工作组内工作项的大小。[插图]参 数work_dim、global_work_offset、global_work_size和local_work_sizse的 用 法。

  • 参数num_events_in_wait_list和event_wait_list指定了在执行内核操作之前,需要等待num_evetns_in_wait_list各event_wait_list中的事件执行完成。
  • 参数event指向这个命令生成的一个事件对象。后续的命令或主机可以使用这个事件的状态来控制其他操作。
赞(0)
未经允许不得转载:极客笔记 » OpenCL 执行内核
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址