From de56f15a5a6d3285782ec52eb3d38515928513cd Mon Sep 17 00:00:00 2001 From: Junyan He Date: Wed, 27 Apr 2016 18:17:13 +0800 Subject: add info --- libclapi/cl_kernel.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'libclapi') 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: -- cgit v1.2.3