【发布时间】:2020-03-15 16:21:03
【问题描述】:
对于 CUDA,我知道它们是在向默认流(空流)发出启动命令后异步执行的,那么在 OpenCL 中呢?示例代码如下:
cl_context context;
cl_device_id device_id;
cl_int err;
...
cl_kernel kernel1;
cl_kernel kernel2;
cl_command_queue Q = clCreateCommandQueue(context, device_id, 0, &err);
...
size_t global_w_offset[3] = {0,0,0};
size_t global_w_size[3] = {16,16,1};
size_t local_w_size[3] = {16,16,1};
err = clEnqueueNDRangeKernel(Q, kernel1, 3, global_w_offset, global_w_size,
local_w_size, 0, nullptr, nullptr);
err = clEnqueueNDRangeKernel(Q, kernel2, 3, global_w_offset, global_w_size,
local_w_size, 0, nullptr, nullptr);
clFinish(Q);
kernel1 和 kernel2 在命令入队后会异步执行吗?(即执行重叠)
更新
根据OpenCL Reference,似乎在clCreateCommandQueue 中设置properties 为CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE 可以满足我的需要。但是,out_of_order 是否意味着异步?
【问题讨论】:
标签: c++ asynchronous opencl gpgpu