Forráskód Böngészése

port r16114 from 1.2: Make non-cpu drivers also process main_ram requests so write_invalidation requests can work in non-cpu case. Those drivers can run them anyway, and this is actually required for the disk+gpu case.

Samuel Thibault 9 éve
szülő
commit
23b5457f92

+ 2 - 2
src/datawizard/data_request.c

@@ -144,7 +144,7 @@ struct _starpu_data_request *_starpu_create_data_request(starpu_data_handle_t ha
 	r->mode = mode;
 	r->async_channel.type = STARPU_UNUSED;
 	r->handling_node = handling_node;
-	STARPU_ASSERT(_starpu_memory_node_get_nworkers(handling_node));
+	STARPU_ASSERT(handling_node == STARPU_MAIN_RAM || _starpu_memory_node_get_nworkers(handling_node));
 	r->completed = 0;
 	r->prefetch = is_prefetch;
 	r->retval = -1;
@@ -244,7 +244,7 @@ void _starpu_post_data_request(struct _starpu_data_request *r, unsigned handling
 {
 	/* We don't have a worker for disk nodes, these should have been posted to a main RAM node */
 	STARPU_ASSERT(starpu_node_get_kind(handling_node) != STARPU_DISK_RAM);
-	STARPU_ASSERT(_starpu_memory_node_get_nworkers(handling_node));
+	STARPU_ASSERT(handling_node == STARPU_MAIN_RAM || _starpu_memory_node_get_nworkers(handling_node));
 
 //	_STARPU_DEBUG("POST REQUEST\n");
 

+ 2 - 0
src/drivers/cpu/driver_cpu.c

@@ -223,6 +223,8 @@ int _starpu_cpu_driver_run_once(struct _starpu_worker *cpu_worker)
 
 	_STARPU_TRACE_START_PROGRESS(memnode);
 	_starpu_datawizard_progress(memnode, 1);
+	if (memnode != STARPU_MAIN_RAM)
+		_starpu_datawizard_progress(STARPU_MAIN_RAM, 1);
 	_STARPU_TRACE_END_PROGRESS(memnode);
 
 	struct _starpu_job *j;

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

@@ -770,12 +770,14 @@ int _starpu_cuda_driver_run_once(struct _starpu_worker_set *worker_set)
 	{
 		/* Nothing 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
 
 	/* Something done, make some progress */
 	__starpu_datawizard_progress(memnode, 1, 1);
+	__starpu_datawizard_progress(STARPU_MAIN_RAM, 1, 1);
 
 	/* And pull tasks */
 	res = _starpu_get_multi_worker_task(worker_set->workers, tasks, worker_set->nworkers, memnode);

+ 1 - 0
src/drivers/mp_common/source_common.c

@@ -689,6 +689,7 @@ void _starpu_src_common_worker(struct _starpu_worker_set * worker_set,
 
 		_STARPU_TRACE_START_PROGRESS(memnode);
 		_starpu_datawizard_progress(memnode, 1);
+		_starpu_datawizard_progress(STARPU_MAIN_RAM, 1);
 		_STARPU_TRACE_END_PROGRESS(memnode);
 
 		/* Handle message which have been store */

+ 2 - 0
src/drivers/opencl/driver_opencl.c

@@ -704,6 +704,7 @@ int _starpu_opencl_driver_run_once(struct _starpu_worker *worker)
 			_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
@@ -741,6 +742,7 @@ int _starpu_opencl_driver_run_once(struct _starpu_worker *worker)
 	}
 
 	__starpu_datawizard_progress(memnode, 1, 1);
+	__starpu_datawizard_progress(STARPU_MAIN_RAM, 1, 1);
 
 	task = _starpu_get_worker_task(worker, workerid, memnode);