Bladeren bron

Call MPI's unregister hook after everything has settled down to be sure one can use mpi_data during requests etc.

Samuel Thibault 7 jaren geleden
bovenliggende
commit
e1163621b9
1 gewijzigde bestanden met toevoegingen van 7 en 15 verwijderingen
  1. 7 15
      src/datawizard/interfaces/data_interface.c

+ 7 - 15
src/datawizard/interfaces/data_interface.c

@@ -1,7 +1,7 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  * Copyright (C) 2011-2012,2014-2017                      Inria
- * Copyright (C) 2009-2017                                Université de Bordeaux
+ * Copyright (C) 2009-2018                                Université de Bordeaux
  * Copyright (C) 2010-2017                                CNRS
  *
  * StarPU is free software; you can redistribute it and/or modify
@@ -856,6 +856,12 @@ retry_busy:
 	}
 	STARPU_PTHREAD_MUTEX_UNLOCK(&handle->busy_mutex);
 
+	/* Unregister MPI things after having waiting for MPI reqs etc. to settle down */
+	if (handle->unregister_hook)
+	{
+		handle->unregister_hook(handle);
+	}
+
 	/* Wait for finished requests to release the handle */
 	_starpu_spin_lock(&handle->header_lock);
 	if (handle->busy_count)
@@ -924,21 +930,12 @@ void starpu_data_unregister(starpu_data_handle_t handle)
 	STARPU_ASSERT_MSG(handle->magic == 42, "data %p is invalid (was it already registered?)", handle);
 	STARPU_ASSERT_MSG(!handle->lazy_unregister, "data %p can not be unregistered twice", handle);
 
-	if (handle->unregister_hook)
-	{
-		handle->unregister_hook(handle);
-	}
-
 	_starpu_data_unregister(handle, 1, 0);
 }
 
 void starpu_data_unregister_no_coherency(starpu_data_handle_t handle)
 {
 	STARPU_ASSERT_MSG(handle->magic == 42, "data %p is invalid (was it already registered?)", handle);
-	if (handle->unregister_hook)
-	{
-		handle->unregister_hook(handle);
-	}
 
 	_starpu_data_unregister(handle, 0, 0);
 }
@@ -963,11 +960,6 @@ void starpu_data_unregister_submit(starpu_data_handle_t handle)
 	STARPU_ASSERT_MSG(handle->magic == 42, "data %p is invalid (was it already registered?)", handle);
 	STARPU_ASSERT_MSG(!handle->lazy_unregister, "data %p can not be unregistered twice", handle);
 
-	if (handle->unregister_hook)
-	{
-		handle->unregister_hook(handle);
-	}
-
 	/* Wait for all task dependencies on this handle before putting it for free */
 	starpu_data_acquire_on_node_cb(handle, STARPU_ACQUIRE_NO_NODE_LOCK_ALL, handle->initialized?STARPU_RW:STARPU_W, _starpu_data_unregister_submit_cb, handle);
 }