Prechádzať zdrojové kódy

Make drivers wait for all transfer completions, to make sure not to free some data which is still being transferred

Samuel Thibault 13 rokov pred
rodič
commit
30302c54d6

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

@@ -208,6 +208,8 @@ void *_starpu_cpu_worker(void *arg)
 
 	STARPU_TRACE_WORKER_DEINIT_START
 
+	_starpu_handle_all_pending_node_data_requests(memnode);
+
 	/* In case there remains some memory that was automatically
 	 * allocated by StarPU, we release it now. Note that data
 	 * coherency is not maintained anymore at that point ! */

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

@@ -344,6 +344,8 @@ void *_starpu_cuda_worker(void *arg)
 
 	STARPU_TRACE_WORKER_DEINIT_START
 
+	_starpu_handle_all_pending_node_data_requests(memnode);
+
 	/* In case there remains some memory that was automatically
 	 * allocated by StarPU, we release it now. Note that data
 	 * coherency is not maintained anymore at that point ! */

+ 2 - 0
src/drivers/gordon/driver_gordon.c

@@ -467,6 +467,8 @@ void *_starpu_gordon_worker(void *arg)
 
 	gordon_worker_inject(gordon_set_arg);
 
+	_starpu_handle_all_pending_node_data_requests(memnode);
+
 	_STARPU_DEBUG("gordon deinit...\n");
 	gordon_deinit();
 	_STARPU_DEBUG("gordon was deinited\n");

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

@@ -514,6 +514,8 @@ void *_starpu_opencl_worker(void *arg)
 
 	STARPU_TRACE_WORKER_DEINIT_START
 
+	_starpu_handle_all_pending_node_data_requests(memnode);
+
         _starpu_opencl_deinit_context(devid);
 
 	pthread_exit(NULL);