소스 검색

Implement wait_for_completion for OpenCL driver.

Sylvain Henry 15 년 전
부모
커밋
75dbd27ed7
1개의 변경된 파일40개의 추가작업 그리고 33개의 파일을 삭제
  1. 40 33
      src/datawizard/copy_driver.c

+ 40 - 33
src/datawizard/copy_driver.c

@@ -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: