Bläddra i källkod

port r18176 from trunk: Fix starpu mpi simgrid fxt traces

Samuel Thibault 9 år sedan
förälder
incheckning
fe0698cafc
3 ändrade filer med 16 tillägg och 2 borttagningar
  1. 5 1
      mpi/src/starpu_mpi.c
  2. 7 1
      src/common/fxt.c
  3. 4 0
      src/common/fxt.h

+ 5 - 1
mpi/src/starpu_mpi.c

@@ -1293,7 +1293,6 @@ static void *_starpu_mpi_progress_thread_func(void *arg)
 #endif //STARPU_USE_FXT
 	}
 
-	_starpu_mpi_add_sync_point_in_fxt();
 	_starpu_mpi_comm_amounts_init(argc_argv->comm);
 	_starpu_mpi_cache_init(argc_argv->comm);
 	_starpu_mpi_select_node_init();
@@ -1323,6 +1322,7 @@ static void *_starpu_mpi_progress_thread_func(void *arg)
 	smpi_process_set_user_data(calloc(MAX_TSD, sizeof(void*)));
 #endif
 #endif
+	_starpu_mpi_add_sync_point_in_fxt();
 
 	STARPU_PTHREAD_MUTEX_LOCK(&mutex);
 
@@ -1536,6 +1536,10 @@ static int hookid = - 1;
 static void _starpu_mpi_add_sync_point_in_fxt(void)
 {
 #ifdef STARPU_USE_FXT
+	STARPU_PTHREAD_MUTEX_LOCK(&_starpu_fxt_started_mutex);
+	while (!_starpu_fxt_started)
+		STARPU_PTHREAD_COND_WAIT(&_starpu_fxt_started_cond, &_starpu_fxt_started_mutex);
+	STARPU_PTHREAD_MUTEX_UNLOCK(&_starpu_fxt_started_mutex);
 	int rank;
 	int worldsize;
 	int ret;

+ 7 - 1
src/common/fxt.c

@@ -36,7 +36,9 @@
 #endif
 
 static char _STARPU_PROF_FILE_USER[128];
-static int _starpu_fxt_started = 0;
+int _starpu_fxt_started = 0;
+starpu_pthread_mutex_t _starpu_fxt_started_mutex = STARPU_PTHREAD_MUTEX_INITIALIZER;
+starpu_pthread_cond_t _starpu_fxt_started_cond = STARPU_PTHREAD_COND_INITIALIZER;
 
 static int _starpu_written = 0;
 
@@ -135,6 +137,7 @@ void _starpu_fxt_init_profiling(unsigned trace_buffer_size)
 {
 	unsigned threadid;
 
+	STARPU_PTHREAD_MUTEX_LOCK(&_starpu_fxt_started_mutex);
 	if (!_starpu_fxt_started)
 	{
 		_starpu_fxt_started = 1;
@@ -164,6 +167,9 @@ void _starpu_fxt_init_profiling(unsigned trace_buffer_size)
 		STARPU_ABORT();
 	}
 
+	STARPU_PTHREAD_COND_BROADCAST(&_starpu_fxt_started_cond);
+	STARPU_PTHREAD_MUTEX_UNLOCK(&_starpu_fxt_started_mutex);
+
 	return;
 }
 

+ 4 - 0
src/common/fxt.h

@@ -223,6 +223,10 @@ void fut_set_filename(char *filename);
 #endif
 #endif
 
+extern int _starpu_fxt_started;
+extern starpu_pthread_mutex_t _starpu_fxt_started_mutex;
+extern starpu_pthread_cond_t _starpu_fxt_started_cond;
+
 long _starpu_gettid(void);
 
 /* Initialize the FxT library. */