Przeglądaj źródła

Harmonize OpenCL code with CUDA

Samuel Thibault 9 lat temu
rodzic
commit
9a6ad9535b
1 zmienionych plików z 16 dodań i 4 usunięć
  1. 16 4
      src/drivers/opencl/driver_opencl.c

+ 16 - 4
src/drivers/opencl/driver_opencl.c

@@ -677,6 +677,10 @@ int _starpu_opencl_driver_run_once(struct _starpu_worker *worker)
 	struct _starpu_job *j;
 	struct starpu_task *task;
 
+	int idle;
+
+	/* First poll for completed jobs */
+	idle = 0;
 	if (worker->ntasks)
 	{
 #ifndef STARPU_SIMGRID
@@ -700,10 +704,6 @@ int _starpu_opencl_driver_run_once(struct _starpu_worker *worker)
 #endif /* !STARPU_SIMGRID */
 		{
 			_STARPU_TRACE_START_EXECUTING();
-			/* Not ready yet, no better thing to do than waiting */
-			__starpu_datawizard_progress(memnode, 1, 0);
-			__starpu_datawizard_progress(STARPU_MAIN_RAM, 1, 0);
-			return 0;
 		}
 		else
 		{
@@ -738,6 +738,18 @@ int _starpu_opencl_driver_run_once(struct _starpu_worker *worker)
 			_STARPU_TRACE_END_EXECUTING();
 		}
 	}
+	if (worker->ntasks < worker->pipeline_length)
+		idle++;
+
+#ifdef STARPU_NON_BLOCKING_DRIVERS
+	if (!idle)
+	{
+		/* Not ready yet, no better thing to do than waiting */
+		__starpu_datawizard_progress(memnode, 1, 0);
+		__starpu_datawizard_progress(STARPU_MAIN_RAM, 1, 0);
+		return 0;
+	}
+#endif
 
 	__starpu_datawizard_progress(memnode, 1, 1);
 	__starpu_datawizard_progress(STARPU_MAIN_RAM, 1, 1);