summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunyan He <junyan.he@intel.com>2016-04-27 18:17:13 +0800
committerJunyan He <junyan.he@intel.com>2016-04-27 18:17:13 +0800
commitde56f15a5a6d3285782ec52eb3d38515928513cd (patch)
tree35cdad6d5a8bb27ac03f236c66dfe45592739bee
parent6eaaaaeed4cee6c5d9e5e345162864c79a1de751 (diff)
add info
-rw-r--r--libclapi/cl_kernel.c31
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: