瀏覽代碼

move GPU initialization code back

Andra Hugo 8 年之前
父節點
當前提交
91920c1f93
共有 1 個文件被更改,包括 28 次插入20 次删除
  1. 28 20
      src/core/workers.c

+ 28 - 20
src/core/workers.c

@@ -628,6 +628,8 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 #endif
 	STARPU_AYU_INIT();
 
+	unsigned th_per_stream = starpu_get_env_number_default("STARPU_ONE_THREAD_PER_STREAM", 1);
+
 	for (worker = 0; worker < nworkers; worker++)
 	{
 		struct _starpu_worker *workerarg = &pconfig->workers[worker];
@@ -678,7 +680,6 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 			case STARPU_CUDA_WORKER:
 				driver.id.cuda_id = devid;
 				/* allow having one worker per stream */
-				unsigned th_per_stream = starpu_get_env_number_default("STARPU_ONE_THREAD_PER_STREAM", 1);
 				if(th_per_stream == 0)
 				{
 					/* We spawn only one thread per CUDA driver,
@@ -736,23 +737,6 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 				STARPU_PTHREAD_MUTEX_UNLOCK(&workerarg->mutex);
 #endif
 
-				if(th_per_stream == 0)
-				{
-
-					STARPU_PTHREAD_MUTEX_LOCK(&worker_set->mutex);
-					while (!worker_set->set_is_initialized)
-						STARPU_PTHREAD_COND_WAIT(&worker_set->ready_cond,
-									 &worker_set->mutex);
-					STARPU_PTHREAD_MUTEX_UNLOCK(&worker_set->mutex);
-				}
-				else
-				{
-					STARPU_PTHREAD_MUTEX_LOCK(&workerarg->mutex);
-					while (!workerarg->worker_is_initialized)
-						STARPU_PTHREAD_COND_WAIT(&workerarg->ready_cond, &workerarg->mutex);
-					STARPU_PTHREAD_MUTEX_UNLOCK(&workerarg->mutex);
-				}
-				worker_set->started = 1;
 				break;
 #endif
 #if defined(STARPU_USE_OPENCL) || defined(STARPU_SIMGRID)
@@ -848,7 +832,9 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 		struct starpu_driver driver;
 		unsigned devid = workerarg->devid;
 		driver.type = workerarg->arch;
-
+#if defined(STARPU_USE_CUDA) || defined(STARPU_SIMGRID)
+		struct _starpu_worker_set *worker_set = workerarg->set;
+#endif
 		switch (workerarg->arch)
 		{
 			case STARPU_CPU_WORKER:
@@ -863,7 +849,29 @@ static void _starpu_launch_drivers(struct _starpu_machine_config *pconfig)
 				break;
 #if defined(STARPU_USE_CUDA) || defined(STARPU_SIMGRID)
 			case STARPU_CUDA_WORKER:
-				/* Already waited above */
+#ifndef STARPU_SIMGRID
+				driver.id.cuda_id = devid;
+				if (!_starpu_may_launch_driver(&pconfig->conf, &driver))
+					break;
+#endif
+				_STARPU_DEBUG("waiting for worker %u initialization\n", worker);
+				if(th_per_stream == 0)
+				{
+					STARPU_PTHREAD_MUTEX_LOCK(&worker_set->mutex);
+					while (!worker_set->set_is_initialized)
+						STARPU_PTHREAD_COND_WAIT(&worker_set->ready_cond,
+									 &worker_set->mutex);
+					STARPU_PTHREAD_MUTEX_UNLOCK(&worker_set->mutex);
+				}
+				else
+				{
+					STARPU_PTHREAD_MUTEX_LOCK(&workerarg->mutex);
+					while (!workerarg->worker_is_initialized)
+						STARPU_PTHREAD_COND_WAIT(&workerarg->ready_cond, &workerarg->mutex);
+					STARPU_PTHREAD_MUTEX_UNLOCK(&workerarg->mutex);
+				}
+				worker_set->started = 1;
+
 				break;
 #endif
 #if defined(STARPU_USE_OPENCL) || defined(STARPU_SIMGRID)