|
@@ -22,6 +22,7 @@
|
|
|
#include <common/fxt.h>
|
|
|
#include "copy_driver.h"
|
|
|
#include "memalloc.h"
|
|
|
+#include "starpu_opencl.h"
|
|
|
|
|
|
void _starpu_wake_all_blocked_workers_on_node(unsigned nodeid)
|
|
|
{
|
|
@@ -136,26 +137,26 @@ cudaStream_t *stream;
|
|
|
break;
|
|
|
#endif
|
|
|
#ifdef STARPU_USE_OPENCL
|
|
|
- case STARPU_OPENCL_RAM:
|
|
|
- /* OpenCL -> RAM */
|
|
|
- if (_starpu_get_local_memory_node() == src_node)
|
|
|
- {
|
|
|
- STARPU_ASSERT(copy_methods->opencl_to_ram);
|
|
|
- if (!req || !copy_methods->opencl_to_ram_async)
|
|
|
- {
|
|
|
- /* this is not associated to a request so it's synchronous */
|
|
|
- copy_methods->opencl_to_ram(handle, src_node, dst_node);
|
|
|
- }
|
|
|
- else {
|
|
|
- ret = copy_methods->opencl_to_ram_async(handle, src_node, dst_node, &(req->async_channel.opencl_event));
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- /* we should not have a blocking call ! */
|
|
|
- STARPU_ABORT();
|
|
|
- }
|
|
|
- break;
|
|
|
+ case STARPU_OPENCL_RAM:
|
|
|
+ /* OpenCL -> RAM */
|
|
|
+ if (_starpu_get_local_memory_node() == src_node)
|
|
|
+ {
|
|
|
+ STARPU_ASSERT(copy_methods->opencl_to_ram);
|
|
|
+ if (!req || !copy_methods->opencl_to_ram_async)
|
|
|
+ {
|
|
|
+ /* this is not associated to a request so it's synchronous */
|
|
|
+ copy_methods->opencl_to_ram(handle, src_node, dst_node);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ ret = copy_methods->opencl_to_ram_async(handle, src_node, dst_node, &(req->async_channel.opencl_event));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ /* we should not have a blocking call ! */
|
|
|
+ STARPU_ABORT();
|
|
|
+ }
|
|
|
+ break;
|
|
|
#endif
|
|
|
case STARPU_SPU_LS:
|
|
|
STARPU_ABORT(); // TODO
|
|
@@ -326,10 +327,15 @@ void _starpu_driver_wait_request_completion(starpu_async_channel *async_channel
|
|
|
break;
|
|
|
#endif
|
|
|
#ifdef STARPU_USE_OPENCL
|
|
|
- case STARPU_OPENCL_RAM:
|
|
|
- fprintf(stderr, "not implemented yet\n");
|
|
|
- STARPU_ABORT();
|
|
|
- break;
|
|
|
+ case STARPU_OPENCL_RAM:
|
|
|
+ {
|
|
|
+ cl_event opencl_event = (*async_channel).opencl_event;
|
|
|
+ if (opencl_event == NULL) STARPU_ABORT();
|
|
|
+ cl_int err = clWaitForEvents(1, &opencl_event);
|
|
|
+ if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
+ clReleaseEvent(opencl_event);
|
|
|
+ }
|
|
|
+ break;
|
|
|
#endif
|
|
|
case STARPU_RAM:
|
|
|
default:
|
|
@@ -358,15 +364,16 @@ unsigned _starpu_driver_test_request_completion(starpu_async_channel *async_chan
|
|
|
break;
|
|
|
#endif
|
|
|
#ifdef STARPU_USE_OPENCL
|
|
|
- case STARPU_OPENCL_RAM:
|
|
|
- {
|
|
|
- cl_int event_status;
|
|
|
- cl_event opencl_event = (*async_channel).opencl_event;
|
|
|
- if (opencl_event == NULL) STARPU_ABORT();
|
|
|
- clGetEventInfo(opencl_event, CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(event_status), &event_status, NULL);
|
|
|
- success = (event_status == CL_COMPLETE);
|
|
|
- break;
|
|
|
- }
|
|
|
+ case STARPU_OPENCL_RAM:
|
|
|
+ {
|
|
|
+ cl_int event_status;
|
|
|
+ cl_event opencl_event = (*async_channel).opencl_event;
|
|
|
+ if (opencl_event == NULL) STARPU_ABORT();
|
|
|
+ cl_int err = clGetEventInfo(opencl_event, CL_EVENT_COMMAND_EXECUTION_STATUS, sizeof(event_status), &event_status, NULL);
|
|
|
+ if (err != CL_SUCCESS) STARPU_OPENCL_REPORT_ERROR(err);
|
|
|
+ success = (event_status == CL_COMPLETE);
|
|
|
+ break;
|
|
|
+ }
|
|
|
#endif
|
|
|
case STARPU_RAM:
|
|
|
default:
|