From 6ec742ccbc094e3c7ec38896af3f8340325b8b96 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Tue, 16 Jul 2013 17:11:34 +0200 Subject: [PATCH] fix MPI_Initialized --- src/smpi/private.h | 3 +++ src/smpi/smpi_global.c | 21 +++++++++++++++++++++ src/smpi/smpi_pmpi.c | 3 ++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/smpi/private.h b/src/smpi/private.h index f72f51522c..61c341b362 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -98,6 +98,9 @@ void smpi_process_init(int *argc, char ***argv); void smpi_process_destroy(void); void smpi_process_finalize(void); int smpi_process_finalized(void); +int smpi_process_initialized(void); +void smpi_process_mark_as_initialized(void); + smpi_process_data_t smpi_process_data(void); smpi_process_data_t smpi_process_remote_data(int index); diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index 7cf9d544e4..27a53de486 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -29,6 +29,7 @@ typedef struct s_smpi_process_data { double simulated; MPI_Comm comm_self; void *data; /* user data */ + int initialized; } s_smpi_process_data_t; static smpi_process_data_t *process_data = NULL; @@ -104,6 +105,24 @@ int smpi_process_finalized() // If finalized, this value has been set to -100; } +/** + * @brief Check if a process is initialized + */ +int smpi_process_initialized(void) +{ + int index = smpi_process_index(); + return((index != -100) && (index!=MPI_UNDEFINED) && (process_data[index]->initialized)); +} + +/** + * @brief Mark a process as initialized (=MPI_Init called) + */ +void smpi_process_mark_as_initialized(void) +{ + int index = smpi_process_index(); + if(index != -100)process_data[index]->initialized=1; +} + #ifdef SMPI_F2C int smpi_process_argc(void) { @@ -264,6 +283,8 @@ void smpi_global_init(void) process_data[i]->timer = xbt_os_timer_new(); group = smpi_group_new(1); process_data[i]->comm_self = smpi_comm_new(group); + process_data[i]->initialized =0; + smpi_group_set_mapping(group, i, 0); } group = smpi_group_new(process_count); diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index 7859738e24..5e7d3b9c16 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -27,6 +27,7 @@ void TRACE_smpi_set_category(const char *category) int PMPI_Init(int *argc, char ***argv) { smpi_process_init(argc, argv); + smpi_process_mark_as_initialized(); #ifdef HAVE_TRACING int rank = smpi_process_index(); TRACE_smpi_init(rank); @@ -2395,7 +2396,7 @@ int PMPI_Error_class(int errorcode, int* errorclass) { int PMPI_Initialized(int* flag) { - *flag=(smpi_process_data()!=NULL); + *flag=smpi_process_initialized(); return MPI_SUCCESS; } -- 2.20.1