一、创建命令队列
在OpenCL中,命令队列用cl_command_queue结构来表示,通过调用函数clCreateCommandQueue来创建。
函数原型如下:
clCreateCommandQueue(cl_context context, cl_device_id device, cl_command_queue_properties properties, cl_int *err);
其中cl_command_queue_properties在以下两个枚举值之中取值。
1. CL_QUEUE_PROFILING_ENABLE--使能性能分析事件。
2. CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE--使能命令队列的乱序执行。
cl_command_queue queue;
queue = clCreateCommandQueue(context, devices[0], 0, &err);
if (err < 0)
{
cout << "Failed to create command queue." << err << endl;
return err;
}
二、内核执行命令入列
OpenCL中以clEnqueue开头的函数都是通过命令队列向设备发送命令,其中以clEnqueueTask最为简单。
函数原型如下:
clEnqueueTask(cl_command_queue queue, cl_kernel kernel, cl_uint num_events,
const cl_event *wait_list, cl_event *event);
err = clEnqueueTask(queue, found_kernel, 0, NULL, NULL);
if (err < 0)
{
cout << "Failed to enqueue task." << err << endl;
return err;
}