Browse Source

update driver opencl in order to use ctxs

Andra Hugo 14 years ago
parent
commit
feac6676f8
2 changed files with 30 additions and 9 deletions
  1. 2 3
      src/drivers/cuda/driver_cuda.c
  2. 28 6
      src/drivers/opencl/driver_opencl.c

+ 2 - 3
src/drivers/cuda/driver_cuda.c

@@ -273,7 +273,7 @@ void *_starpu_cuda_worker(void *arg)
 
 		task = _starpu_pop_task(args);
 
-        if (!task) 
+		if (!task) 
 		{
 			PTHREAD_MUTEX_LOCK(sched_mutex);
 			if (_starpu_worker_can_block(memnode))
@@ -299,8 +299,6 @@ void *_starpu_cuda_worker(void *arg)
 
 		_starpu_set_current_task(task);
 
-		struct starpu_sched_ctx *local_sched_ctx = _starpu_get_sched_ctx(j->task->sched_ctx);
-
 		if(j && j->model_name && strcmp(j->model_name, "sched_ctx_info") == 0)
 		  {
 			struct starpu_task *task = j->task;
@@ -332,6 +330,7 @@ void *_starpu_cuda_worker(void *arg)
 			}
 		}
 
+		struct starpu_sched_ctx *local_sched_ctx = _starpu_get_sched_ctx(j->task->sched_ctx);
 		_starpu_handle_job_termination(j, 0);
 		_starpu_decrement_nsubmitted_tasks_of_worker(args->workerid);
 		_starpu_decrement_nsubmitted_tasks_of_sched_ctx(local_sched_ctx);

+ 28 - 6
src/drivers/opencl/driver_opencl.c

@@ -417,22 +417,24 @@ void *_starpu_opencl_worker(void *arg)
 	struct starpu_task *task;
 	int res;
 
+	pthread_cond_t *sched_cond = args->sched_cond;
+        pthread_mutex_t *sched_mutex = args->sched_mutex;
+
 	while (_starpu_machine_is_running())
 	{
 		STARPU_TRACE_START_PROGRESS(memnode);
 		_starpu_datawizard_progress(memnode, 1);
 		STARPU_TRACE_END_PROGRESS(memnode);
 
-		PTHREAD_MUTEX_LOCK(args->sched_mutex);
-
 		task = _starpu_pop_task(args);
 		
-        if (task == NULL) 
+		if (task == NULL) 
 		{
+			PTHREAD_MUTEX_LOCK(sched_mutex);
 			if (_starpu_worker_can_block(memnode))
-				_starpu_block_worker(workerid, args->sched_cond, args->sched_mutex);
+				_starpu_block_worker(workerid, sched_cond, sched_mutex);
 
-			PTHREAD_MUTEX_UNLOCK(args->sched_mutex);
+			PTHREAD_MUTEX_UNLOCK(sched_mutex);
 
 			continue;
 		};
@@ -452,7 +454,23 @@ void *_starpu_opencl_worker(void *arg)
 
 		_starpu_set_current_task(j->task);
 
-		res = _starpu_opencl_execute_job(j, args);
+		if(j && j->model_name && strcmp(j->model_name, "sched_ctx_info") == 0)
+		{
+                        struct starpu_task *task = j->task;
+                        STARPU_ASSERT(task);
+                        struct starpu_codelet_t *cl = task->cl;
+                        STARPU_ASSERT(cl);
+
+                        cl_func func = cl->cuda_func;
+			STARPU_ASSERT(func);
+			func(task->interfaces, task->cl_arg);
+		}
+                else
+		{
+			res = _starpu_opencl_execute_job(j, args);
+		}
+
+
 
 		_starpu_set_current_task(NULL);
 
@@ -468,7 +486,11 @@ void *_starpu_opencl_worker(void *arg)
 			}
 		}
 
+		struct starpu_sched_ctx *local_sched_ctx = _starpu_get_sched_ctx(j->task->sched_ctx);
 		_starpu_handle_job_termination(j, 0);
+		_starpu_decrement_nsubmitted_tasks_of_worker(args->workerid);
+                _starpu_decrement_nsubmitted_tasks_of_sched_ctx(local_sched_ctx);
+
 	}
 
 	STARPU_TRACE_WORKER_DEINIT_START