|
@@ -1,7 +1,7 @@
|
|
/* StarPU --- Runtime system for heterogeneous multicore architectures.
|
|
/* StarPU --- Runtime system for heterogeneous multicore architectures.
|
|
*
|
|
*
|
|
* Copyright (C) 2010-2012 Université de Bordeaux 1
|
|
* Copyright (C) 2010-2012 Université de Bordeaux 1
|
|
- * Copyright (C) 2010, 2011, 2012 Centre National de la Recherche Scientifique
|
|
|
|
|
|
+ * Copyright (C) 2010, 2011, 2012, 2013 Centre National de la Recherche Scientifique
|
|
*
|
|
*
|
|
* StarPU is free software; you can redistribute it and/or modify
|
|
* StarPU is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
@@ -332,35 +332,36 @@ static int copy_ram_to_opencl_async(void *src_interface, unsigned src_node STARP
|
|
struct starpu_variable_interface *dst_variable = dst_interface;
|
|
struct starpu_variable_interface *dst_variable = dst_interface;
|
|
int err,ret;
|
|
int err,ret;
|
|
|
|
|
|
- int devid = _starpu_memory_node_to_devid(dst_node);
|
|
|
|
- cl_device_type dt = _starpu_opencl_get_device_type(devid);
|
|
|
|
|
|
+ int devid = _starpu_memory_node_to_devid(dst_node);
|
|
|
|
+ cl_device_type dt = _starpu_opencl_get_device_type(devid);
|
|
|
|
|
|
- if (starpu_cpu_worker_get_count() == 0 && dt == CL_DEVICE_TYPE_CPU) {
|
|
|
|
- cl_mem dst = (cl_mem)dst_variable->ptr;
|
|
|
|
- cl_context ctx;
|
|
|
|
- starpu_opencl_get_context(devid, &ctx);;
|
|
|
|
|
|
+ if (starpu_cpu_worker_get_count() == 0 && dt == CL_DEVICE_TYPE_CPU)
|
|
|
|
+ {
|
|
|
|
+ cl_mem dst = (cl_mem)dst_variable->ptr;
|
|
|
|
+ cl_context ctx;
|
|
|
|
+ starpu_opencl_get_context(devid, &ctx);;
|
|
|
|
|
|
- err = clGetMemObjectInfo(dst, CL_MEM_CONTEXT, sizeof(ctx), &ctx, NULL);
|
|
|
|
- if (STARPU_UNLIKELY(err))
|
|
|
|
- STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
|
|
+ err = clGetMemObjectInfo(dst, CL_MEM_CONTEXT, sizeof(ctx), &ctx, NULL);
|
|
|
|
+ if (STARPU_UNLIKELY(err))
|
|
|
|
+ STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
|
|
clReleaseMemObject(dst);
|
|
clReleaseMemObject(dst);
|
|
dst_variable->ptr = (uintptr_t)clCreateBuffer(ctx, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, src_variable->elemsize, (void*)src_variable->ptr, &err);
|
|
dst_variable->ptr = (uintptr_t)clCreateBuffer(ctx, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, src_variable->elemsize, (void*)src_variable->ptr, &err);
|
|
|
|
|
|
- if (event != NULL)
|
|
|
|
- *event = NULL;
|
|
|
|
|
|
+ if (event != NULL)
|
|
|
|
+ *event = NULL;
|
|
}
|
|
}
|
|
- else {
|
|
|
|
- assert(src_variable->ptr != NULL);
|
|
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ assert(src_variable->ptr != NULL);
|
|
|
|
|
|
err = starpu_opencl_copy_ram_to_opencl((void*)src_variable->ptr, src_node, (cl_mem)dst_variable->ptr, dst_node, src_variable->elemsize,
|
|
err = starpu_opencl_copy_ram_to_opencl((void*)src_variable->ptr, src_node, (cl_mem)dst_variable->ptr, dst_node, src_variable->elemsize,
|
|
0, event, &ret);
|
|
0, event, &ret);
|
|
|
|
+ if (STARPU_UNLIKELY(err))
|
|
|
|
+ STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
|
|
- if (STARPU_UNLIKELY(err))
|
|
|
|
- STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
-
|
|
|
|
- _STARPU_TRACE_DATA_COPY(src_node, dst_node, src_variable->elemsize);
|
|
|
|
- }
|
|
|
|
|
|
+ _STARPU_TRACE_DATA_COPY(src_node, dst_node, src_variable->elemsize);
|
|
|
|
+ }
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
@@ -371,32 +372,32 @@ static int copy_opencl_to_ram_async(void *src_interface, unsigned src_node, void
|
|
struct starpu_variable_interface *dst_variable = dst_interface;
|
|
struct starpu_variable_interface *dst_variable = dst_interface;
|
|
int err, ret;
|
|
int err, ret;
|
|
|
|
|
|
- int devid = _starpu_memory_node_to_devid(src_node);
|
|
|
|
- cl_device_type dt = _starpu_opencl_get_device_type(devid);
|
|
|
|
-
|
|
|
|
- if (starpu_cpu_worker_get_count() == 0 && dt == CL_DEVICE_TYPE_CPU) {
|
|
|
|
- cl_mem dst = (cl_mem)src_variable->ptr;
|
|
|
|
- void * ptr;
|
|
|
|
|
|
+ int devid = _starpu_memory_node_to_devid(src_node);
|
|
|
|
+ cl_device_type dt = _starpu_opencl_get_device_type(devid);
|
|
|
|
|
|
- err = clGetMemObjectInfo(dst, CL_MEM_HOST_PTR, sizeof(ptr), &ptr, NULL);
|
|
|
|
- if (STARPU_UNLIKELY(err))
|
|
|
|
- STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
-
|
|
|
|
- dst_variable->ptr = (uintptr_t)ptr;
|
|
|
|
|
|
+ if (starpu_cpu_worker_get_count() == 0 && dt == CL_DEVICE_TYPE_CPU)
|
|
|
|
+ {
|
|
|
|
+ cl_mem dst = (cl_mem)src_variable->ptr;
|
|
|
|
+ void * ptr;
|
|
|
|
|
|
- if (event != NULL)
|
|
|
|
- *event = NULL;
|
|
|
|
|
|
+ err = clGetMemObjectInfo(dst, CL_MEM_HOST_PTR, sizeof(ptr), &ptr, NULL);
|
|
|
|
+ if (STARPU_UNLIKELY(err))
|
|
|
|
+ STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- err = starpu_opencl_copy_opencl_to_ram((cl_mem)src_variable->ptr, src_node, (void*)dst_variable->ptr, dst_node, src_variable->elemsize,
|
|
|
|
- 0, event, &ret);
|
|
|
|
|
|
+ dst_variable->ptr = (uintptr_t)ptr;
|
|
|
|
|
|
- if (STARPU_UNLIKELY(err))
|
|
|
|
- STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
|
|
+ if (event != NULL)
|
|
|
|
+ *event = NULL;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ err = starpu_opencl_copy_opencl_to_ram((cl_mem)src_variable->ptr, src_node, (void*)dst_variable->ptr, dst_node, src_variable->elemsize,
|
|
|
|
+ 0, event, &ret);
|
|
|
|
+ if (STARPU_UNLIKELY(err))
|
|
|
|
+ STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
|
|
|
- _STARPU_TRACE_DATA_COPY(src_node, dst_node, src_variable->elemsize);
|
|
|
|
- }
|
|
|
|
|
|
+ _STARPU_TRACE_DATA_COPY(src_node, dst_node, src_variable->elemsize);
|
|
|
|
+ }
|
|
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|