Преглед изворни кода

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

Samuel Thibault пре 13 година
родитељ
комит
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);