Browse Source

Also always set the current CUDA devid when freeing, it is not very costly and makes things more flexible

Samuel Thibault 8 years ago
parent
commit
ecac7ec55c
1 changed files with 3 additions and 3 deletions
  1. 3 3
      src/datawizard/malloc.c

+ 3 - 3
src/datawizard/malloc.c

@@ -645,12 +645,12 @@ _starpu_free_on_node_flags(unsigned dst_node, uintptr_t addr, size_t size, int f
 			STARPU_PTHREAD_MUTEX_UNLOCK(&cuda_alloc_mutex);
 #else
 			cudaError_t err;
-			struct _starpu_worker *worker = _starpu_get_local_worker_key();
 			unsigned devid = _starpu_memory_node_get_devid(dst_node);
-			if (!worker || worker->arch != STARPU_CUDA_WORKER || worker->devid != devid)
 #if defined(HAVE_CUDA_MEMCPY_PEER)
-				starpu_cuda_set_device(devid);
+			starpu_cuda_set_device(devid);
 #else
+			struct _starpu_worker *worker = _starpu_get_local_worker_key();
+			if (!worker || worker->arch != STARPU_CUDA_WORKER || worker->devid != devid)
 				STARPU_ASSERT_MSG(0, "CUDA peer access is not available with this version of CUDA");
 #endif
 			err = cudaFree((void*)addr);