Browse Source

Check for validity of registered pointers early, to avoid deferring that until the low-level GPU copy routine is involved deep inside the request mechanisms...

Samuel Thibault 9 years ago
parent
commit
251365a3c5

+ 4 - 0
include/starpu_util.h

@@ -113,6 +113,7 @@ extern "C"
 
 
 #ifdef STARPU_NO_ASSERT
 #ifdef STARPU_NO_ASSERT
 #define STARPU_ASSERT(x)		do { } while(0)
 #define STARPU_ASSERT(x)		do { } while(0)
+#define STARPU_ASSERT_ACCESSIBLE(x)	do { } while(0)
 #define STARPU_ASSERT_MSG(x, msg, ...)	do { } while(0)
 #define STARPU_ASSERT_MSG(x, msg, ...)	do { } while(0)
 #else
 #else
 #  if defined(__CUDACC__) || defined(STARPU_HAVE_WINDOWS)
 #  if defined(__CUDACC__) || defined(STARPU_HAVE_WINDOWS)
@@ -123,6 +124,9 @@ extern "C"
 #    define STARPU_ASSERT_MSG(x, msg, ...)	do { if (STARPU_UNLIKELY(!(x))) { STARPU_DUMP_BACKTRACE(); fprintf(stderr, "\n[starpu][%s][assert failure] " msg "\n\n", __starpu_func__, ## __VA_ARGS__); assert(x); } } while(0)
 #    define STARPU_ASSERT_MSG(x, msg, ...)	do { if (STARPU_UNLIKELY(!(x))) { STARPU_DUMP_BACKTRACE(); fprintf(stderr, "\n[starpu][%s][assert failure] " msg "\n\n", __starpu_func__, ## __VA_ARGS__); assert(x); } } while(0)
 
 
 #  endif
 #  endif
+#  define STARPU_ASSERT_ACCESSIBLE(ptr)	do { \
+	volatile char c = *(char*) (ptr); \
+} while(0)
 #endif
 #endif
 
 
 #ifdef __APPLE_CC__
 #ifdef __APPLE_CC__

+ 12 - 1
src/datawizard/interfaces/bcsr_interface.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2009-2015  Université de Bordeaux
+ * Copyright (C) 2009-2016  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -113,6 +113,17 @@ void starpu_bcsr_data_register(starpu_data_handle_t *handleptr, unsigned home_no
 		.c = c,
 		.c = c,
 		.elemsize = elemsize
 		.elemsize = elemsize
 	};
 	};
+#ifndef STARPU_SIMGRID
+	if (home_node == STARPU_MAIN_RAM)
+	{
+		STARPU_ASSERT_ACCESSIBLE(nzval);
+		STARPU_ASSERT_ACCESSIBLE(nzval + nnz*elemsize*r*c - 1);
+		STARPU_ASSERT_ACCESSIBLE(colind);
+		STARPU_ASSERT_ACCESSIBLE(colind + nnz*sizeof(uint32_t) - 1);
+		STARPU_ASSERT_ACCESSIBLE(rowptr);
+		STARPU_ASSERT_ACCESSIBLE(rowptr + (nrow+1)*sizeof(uint32_t) - 1);
+	}
+#endif
 
 
 	starpu_data_register(handleptr, home_node, &bcsr_interface, &starpu_interface_bcsr_ops);
 	starpu_data_register(handleptr, home_node, &bcsr_interface, &starpu_interface_bcsr_ops);
 }
 }

+ 8 - 1
src/datawizard/interfaces/block_interface.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2009-2015  Université de Bordeaux
+ * Copyright (C) 2009-2016  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -161,6 +161,13 @@ void starpu_block_data_register(starpu_data_handle_t *handleptr, unsigned home_n
 		.nz = nz,
 		.nz = nz,
 		.elemsize = elemsize
 		.elemsize = elemsize
 	};
 	};
+#ifndef STARPU_SIMGRID
+	if (home_node == STARPU_MAIN_RAM)
+	{
+		STARPU_ASSERT_ACCESSIBLE(ptr);
+		STARPU_ASSERT_ACCESSIBLE(ptr + (nz-1)*ldz*elemsize + (ny-1)*ldy*elemsize + nx*elemsize - 1);
+	}
+#endif
 
 
 #ifdef STARPU_USE_SCC
 #ifdef STARPU_USE_SCC
 	_starpu_scc_set_offset_in_shared_memory((void*)block_interface.ptr,
 	_starpu_scc_set_offset_in_shared_memory((void*)block_interface.ptr,

+ 12 - 1
src/datawizard/interfaces/coo_interface.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2013-2015  Université Bordeaux
+ * Copyright (C) 2013-2016  Université Bordeaux
  * Copyright (C) 2012 INRIA
  * Copyright (C) 2012 INRIA
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -234,6 +234,17 @@ starpu_coo_data_register(starpu_data_handle_t *handleptr, unsigned home_node,
 		.n_values = n_values,
 		.n_values = n_values,
 		.elemsize = elemsize,
 		.elemsize = elemsize,
 	};
 	};
+#ifndef STARPU_SIMGRID
+	if (home_node == STARPU_MAIN_RAM)
+	{
+		STARPU_ASSERT_ACCESSIBLE(columns);
+		STARPU_ASSERT_ACCESSIBLE(columns + n_values*sizeof(uint32_t) - 1);
+		STARPU_ASSERT_ACCESSIBLE(rows);
+		STARPU_ASSERT_ACCESSIBLE(rows + n_values*sizeof(uint32_t) - 1);
+		STARPU_ASSERT_ACCESSIBLE(values);
+		STARPU_ASSERT_ACCESSIBLE(values + n_values*elemsize - 1);
+	}
+#endif
 
 
 	starpu_data_register(handleptr, home_node, &coo_interface,
 	starpu_data_register(handleptr, home_node, &coo_interface,
 			     &starpu_interface_coo_ops);
 			     &starpu_interface_coo_ops);

+ 12 - 1
src/datawizard/interfaces/csr_interface.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2009-2015  Université de Bordeaux
+ * Copyright (C) 2009-2016  Université de Bordeaux
  * Copyright (C) 2010  Mehdi Juhoor <mjuhoor@gmail.com>
  * Copyright (C) 2010  Mehdi Juhoor <mjuhoor@gmail.com>
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  *
  *
@@ -106,6 +106,17 @@ void starpu_csr_data_register(starpu_data_handle_t *handleptr, unsigned home_nod
 		.firstentry = firstentry,
 		.firstentry = firstentry,
 		.elemsize = elemsize
 		.elemsize = elemsize
 	};
 	};
+#ifndef STARPU_SIMGRID
+	if (home_node == STARPU_MAIN_RAM)
+	{
+		STARPU_ASSERT_ACCESSIBLE(nzval);
+		STARPU_ASSERT_ACCESSIBLE(nzval + nnz*elemsize - 1);
+		STARPU_ASSERT_ACCESSIBLE(colind);
+		STARPU_ASSERT_ACCESSIBLE(colind + nnz*sizeof(uint32_t) - 1);
+		STARPU_ASSERT_ACCESSIBLE(rowptr);
+		STARPU_ASSERT_ACCESSIBLE(rowptr + (nrow+1)*sizeof(uint32_t) - 1);
+	}
+#endif
 
 
 	starpu_data_register(handleptr, home_node, &csr_interface, &starpu_interface_csr_ops);
 	starpu_data_register(handleptr, home_node, &csr_interface, &starpu_interface_csr_ops);
 }
 }

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

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2010-2015  Université de Bordeaux
+ * Copyright (C) 2010-2016  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -172,6 +172,13 @@ void starpu_matrix_data_register(starpu_data_handle_t *handleptr, unsigned home_
                 .dev_handle = ptr,
                 .dev_handle = ptr,
                 .offset = 0
                 .offset = 0
 	};
 	};
+#ifndef STARPU_SIMGRID
+	if (home_node == STARPU_MAIN_RAM)
+	{
+		STARPU_ASSERT_ACCESSIBLE(ptr);
+		STARPU_ASSERT_ACCESSIBLE(ptr + (ny-1)*ld*elemsize + nx*elemsize - 1);
+	}
+#endif
 
 
 #ifdef STARPU_USE_SCC
 #ifdef STARPU_USE_SCC
 	_starpu_scc_set_offset_in_shared_memory((void*)matrix_interface.ptr,
 	_starpu_scc_set_offset_in_shared_memory((void*)matrix_interface.ptr,

+ 8 - 1
src/datawizard/interfaces/variable_interface.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2010-2015  Université de Bordeaux
+ * Copyright (C) 2010-2016  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -111,6 +111,13 @@ void starpu_variable_data_register(starpu_data_handle_t *handleptr, unsigned hom
 		.offset = 0,
 		.offset = 0,
 		.elemsize = elemsize
 		.elemsize = elemsize
 	};
 	};
+#ifndef STARPU_SIMGRID
+	if (home_node == STARPU_MAIN_RAM)
+	{
+		STARPU_ASSERT_ACCESSIBLE(ptr);
+		STARPU_ASSERT_ACCESSIBLE(ptr + elemsize - 1);
+	}
+#endif
 
 
 #ifdef STARPU_USE_SCC
 #ifdef STARPU_USE_SCC
 	_starpu_scc_set_offset_in_shared_memory((void*)variable.ptr, (void**)&(variable.dev_handle),
 	_starpu_scc_set_offset_in_shared_memory((void*)variable.ptr, (void**)&(variable.dev_handle),

+ 8 - 1
src/datawizard/interfaces/vector_interface.c

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2009-2015  Université de Bordeaux
+ * Copyright (C) 2009-2016  Université de Bordeaux
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  * Copyright (C) 2010, 2011, 2012, 2013, 2014  CNRS
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -119,6 +119,13 @@ void starpu_vector_data_register(starpu_data_handle_t *handleptr, unsigned home_
 		.slice_base = 0,
 		.slice_base = 0,
                 .offset = 0
                 .offset = 0
 	};
 	};
+#ifndef STARPU_SIMGRID
+	if (home_node == STARPU_MAIN_RAM)
+	{
+		STARPU_ASSERT_ACCESSIBLE(ptr);
+		STARPU_ASSERT_ACCESSIBLE(ptr + nx*elemsize - 1);
+	}
+#endif
 
 
 #ifdef STARPU_USE_SCC
 #ifdef STARPU_USE_SCC
 	_starpu_scc_set_offset_in_shared_memory((void*)vector.ptr, (void**)&(vector.dev_handle), &(vector.offset));
 	_starpu_scc_set_offset_in_shared_memory((void*)vector.ptr, (void**)&(vector.dev_handle), &(vector.offset));