diff options
author | Junyan He <junyan.he@intel.com> | 2016-04-27 18:17:13 +0800 |
---|---|---|
committer | Junyan He <junyan.he@intel.com> | 2016-04-27 18:17:13 +0800 |
commit | de56f15a5a6d3285782ec52eb3d38515928513cd (patch) | |
tree | 35cdad6d5a8bb27ac03f236c66dfe45592739bee | |
parent | 6eaaaaeed4cee6c5d9e5e345162864c79a1de751 (diff) |
add info
-rw-r--r-- | libclapi/cl_kernel.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/libclapi/cl_kernel.c b/libclapi/cl_kernel.c index 1fc0f785..ecccb1f6 100644 --- a/libclapi/cl_kernel.c +++ b/libclapi/cl_kernel.c @@ -792,6 +792,25 @@ static cl_int cl_enqueue_ND_range(cl_command_queue queue, cl_kernel kernel, cons goto error; } + /* Set arg enqueued to this device if is buffer. */ + for (i = 0; i < kernel->arg_num; ++i) { + if (kernel->args[i]->type == CL_KERNEL_ARG_GLOBAL_PTR || + kernel->args[i]->type == CL_KERNEL_ARG_IMAGE || + kernel->args[i]->type == CL_KERNEL_ARG_CONST_PTR) { + CL_MUTEX_LOCK(&kernel->args[i]->mem->lock); + if (kernel->args[i]->mem->enqueued_device && + kernel->args[i]->mem->enqueued_device != queue->device) { + CL_MUTEX_UNLOCK(&kernel->args[i]->mem->lock); + err = CL_INVALID_OPERATION; + goto error; + } else if (kernel->args[i]->mem->enqueued_device == NULL) { + cl_retain_device_id(queue->device); + kernel->args[i]->mem->enqueued_device = queue->device; + } + CL_MUTEX_UNLOCK(&kernel->args[i]->mem->lock); + } + } + err = queue->device->driver->enqueue_nd_range_kernel(queue, kernel, work_dim, global_wk_off, global_wk_sz, local_wk_sz, it); if (err != CL_SUCCESS) { @@ -817,18 +836,6 @@ static cl_int cl_enqueue_ND_range(cl_command_queue queue, cl_kernel kernel, cons if (event_ret) *event_ret = event; - /* Set arg enqueued if is buffer. */ - for (i = 0; i < kernel->arg_num; ++i) { - if (kernel->args[i]->type == CL_KERNEL_ARG_GLOBAL_PTR || - kernel->args[i]->type == CL_KERNEL_ARG_IMAGE || - kernel->args[i]->type == CL_KERNEL_ARG_CONST_PTR) { - cl_int index = cl_context_get_device_index(queue->ctx, queue->device); - CL_MUTEX_LOCK(&kernel->args[i]->mem->lock); - kernel->args[i]->mem->enqueued_devices[index] = CL_TRUE; - CL_MUTEX_UNLOCK(&kernel->args[i]->mem->lock); - } - } - return err; error: |