Browse Source

src/datawizard/interfaces/matrix_interface.c: when cudaMemcpy2D() fails, tries to copy by calling copy_any_to_any()
The CUDA batch allocation introduced recently breaks with old versions of CUDA which expect memory pointer to be aligned

Nathalie Furmento 11 years ago
parent
commit
2437d1e11b
1 changed files with 5 additions and 1 deletions
  1. 5 1
      src/datawizard/interfaces/matrix_interface.c

+ 5 - 1
src/datawizard/interfaces/matrix_interface.c

@@ -404,7 +404,11 @@ static int copy_cuda_common(void *src_interface, unsigned src_node STARPU_ATTRIB
 		(char *)src_matrix->ptr, src_matrix->ld*elemsize,
 		src_matrix->nx*elemsize, src_matrix->ny, kind);
 	if (STARPU_UNLIKELY(cures))
-		STARPU_CUDA_REPORT_ERROR(cures);
+	{
+		int ret = copy_any_to_any(src_interface, src_node, dst_interface, dst_node, (void *)&is_async);
+		if (ret == -EAGAIN) return ret;
+		if (ret) STARPU_CUDA_REPORT_ERROR(cures);
+	}
 #endif
 
 	_STARPU_TRACE_DATA_COPY(src_node, dst_node, (size_t)src_matrix->nx*src_matrix->ny*src_matrix->elemsize);