소스 검색

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

Samuel Thibault 13 년 전
부모
커밋
30302c54d6
4개의 변경된 파일8개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      src/drivers/cpu/driver_cpu.c
  2. 2 0
      src/drivers/cuda/driver_cuda.c
  3. 2 0
      src/drivers/gordon/driver_gordon.c
  4. 2 0
      src/drivers/opencl/driver_opencl.c

+ 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);