Browse Source

extend STARPU_RUNNING_ON_VALGRIND to TSAN

Samuel Thibault 10 years ago
parent
commit
dc23b85249
4 changed files with 17 additions and 11 deletions
  1. 5 0
      src/common/utils.h
  2. 6 5
      src/core/jobs.c
  3. 2 2
      src/datawizard/data_request.c
  4. 4 4
      src/datawizard/malloc.c

+ 5 - 0
src/common/utils.h

@@ -63,6 +63,11 @@
 #ifndef RUNNING_ON_VALGRIND
 #define RUNNING_ON_VALGRIND 0
 #endif
+#ifdef STARPU_SANITIZE_THREAD
+#define STARPU_RUNNING_ON_VALGRIND 1
+#else
+#define STARPU_RUNNING_ON_VALGRIND RUNNING_ON_VALGRIND
+#endif
 #define STARPU_HG_DISABLE_CHECKING(variable) VALGRIND_HG_DISABLE_CHECKING(&(variable), sizeof(variable))
 #define STARPU_HG_ENABLE_CHECKING(variable)  VALGRIND_HG_ENABLE_CHECKING(&(variable), sizeof(variable))
 

+ 6 - 5
src/core/jobs.c

@@ -162,7 +162,7 @@ int _starpu_test_job_termination(struct _starpu_job *j)
 	STARPU_ASSERT(j->task);
 	STARPU_ASSERT(!j->task->detach);
 	/* Disable Helgrind race complaint, since we really just want to poll j->terminated */
-#ifdef RUNNING_ON_VALGRIND
+	if (STARPU_RUNNING_ON_VALGRIND)
 	{
 		int v = STARPU_PTHREAD_MUTEX_TRYLOCK(&j->sync_mutex);
 		if (v != EBUSY)
@@ -177,10 +177,11 @@ int _starpu_test_job_termination(struct _starpu_job *j)
 			return 0;
 		}
 	}
-#else
-	STARPU_SYNCHRONIZE();
-	return (j->terminated == 2);
-#endif /* RUNNING_ON_VALGRIND */
+	else
+	{
+		STARPU_SYNCHRONIZE();
+		return (j->terminated == 2);
+	}
 }
 void _starpu_job_prepare_for_continuation_ext(struct _starpu_job *j, unsigned continuation_resubmit,
 		void (*continuation_callback_on_sleep)(void *arg), void *continuation_callback_on_sleep_arg)

+ 2 - 2
src/datawizard/data_request.c

@@ -457,7 +457,7 @@ static int __starpu_handle_node_data_requests(struct _starpu_data_request_list *
 	/* This is racy, but not posing problems actually, since we know we
 	 * will come back here to probe again regularly anyway.
 	 * Thus, do not expose this optimization to helgrind */
-	if (!RUNNING_ON_VALGRIND && _starpu_data_request_list_empty(&reqlist[src_node]))
+	if (!STARPU_RUNNING_ON_VALGRIND && _starpu_data_request_list_empty(&reqlist[src_node]))
 		return 0;
 #endif
 
@@ -578,7 +578,7 @@ static int _handle_pending_node_data_requests(unsigned src_node, unsigned force)
 	/* Here helgrind would should that this is an un protected access.
 	 * We however don't care about missing an entry, we will get called
 	 * again sooner or later. */
-	if (!RUNNING_ON_VALGRIND && _starpu_data_request_list_empty(&data_requests_pending[src_node]))
+	if (!STARPU_RUNNING_ON_VALGRIND && _starpu_data_request_list_empty(&data_requests_pending[src_node]))
 		return 0;
 #endif
 

+ 4 - 4
src/datawizard/malloc.c

@@ -114,7 +114,7 @@ int starpu_malloc_flags(void **A, size_t dim, int flags)
 			starpu_memory_allocate(STARPU_MAIN_RAM, dim, STARPU_MEMORY_OVERFLOW);
 	}
 
-	if (flags & STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && RUNNING_ON_VALGRIND == 0)
+	if (flags & STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && STARPU_RUNNING_ON_VALGRIND == 0)
 	{
 #ifdef STARPU_SIMGRID
 		/* FIXME: CUDA seems to be taking 650µs every 1MiB.
@@ -289,7 +289,7 @@ static struct starpu_codelet free_pinned_cl =
 int starpu_free_flags(void *A, size_t dim, int flags)
 {
 #ifndef STARPU_SIMGRID
-	if (flags & STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && RUNNING_ON_VALGRIND == 0)
+	if (flags & STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && STARPU_RUNNING_ON_VALGRIND == 0)
 	{
 		if (_starpu_can_submit_cuda_task())
 		{
@@ -606,7 +606,7 @@ _starpu_free_on_node(unsigned dst_node, uintptr_t addr, size_t size)
 int
 starpu_memory_pin(void *addr STARPU_ATTRIBUTE_UNUSED, size_t size STARPU_ATTRIBUTE_UNUSED)
 {
-	if (STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && RUNNING_ON_VALGRIND == 0)
+	if (STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && STARPU_RUNNING_ON_VALGRIND == 0)
 	{
 #if defined(STARPU_USE_CUDA) && defined(HAVE_CUDA_MEMCPY_PEER)
 		if (cudaHostRegister(addr, size, cudaHostRegisterPortable) != cudaSuccess)
@@ -619,7 +619,7 @@ starpu_memory_pin(void *addr STARPU_ATTRIBUTE_UNUSED, size_t size STARPU_ATTRIBU
 int
 starpu_memory_unpin(void *addr STARPU_ATTRIBUTE_UNUSED, size_t size STARPU_ATTRIBUTE_UNUSED)
 {
-	if (STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && RUNNING_ON_VALGRIND == 0)
+	if (STARPU_MALLOC_PINNED && starpu_get_env_number("STARPU_DISABLE_PINNING") <= 0 && STARPU_RUNNING_ON_VALGRIND == 0)
 	{
 #if defined(STARPU_USE_CUDA) && defined(HAVE_CUDA_MEMCPY_PEER)
 		if (cudaHostUnregister(addr) != cudaSuccess)