From c4c63e5e576a782073b292ee963a9a4240dac0c8 Mon Sep 17 00:00:00 2001 From: swhatelse Date: Mon, 3 Aug 2015 08:33:25 +0200 Subject: [PATCH] modified [PATCH] Allow multiple call to MPI_Init and added MSG_init to SMPI part --- src/smpi/smpi_global.c | 11 ++++++++--- src/smpi/smpi_pmpi.c | 25 +++++++++++++++---------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index 580b02c8a4..d629b686a9 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -165,9 +165,14 @@ int smpi_process_finalized() */ int smpi_process_initialized(void) { - int index = smpi_process_index(); - return ( (index != MPI_UNDEFINED) - && (process_data[index_to_process_data[index]]->state == SMPI_INITIALIZED)); + if (!index_to_process_data){ + return false; + } + else{ + int index = smpi_process_index(); + return ( (index != MPI_UNDEFINED) + && (process_data[index_to_process_data[index]]->state == SMPI_INITIALIZED)); + } } /** diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index 99fdf8abd2..0c38666cf1 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -25,16 +25,21 @@ 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(); - int rank = smpi_process_index(); - TRACE_smpi_init(rank); - TRACE_smpi_computing_init(rank); - instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); - extra->type = TRACING_INIT; - TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra); - TRACE_smpi_collective_out(rank, -1, __FUNCTION__); - smpi_bench_begin(); + // PMPI_Init is call only one time by only by SMPI process + int already_init; + MPI_Initialized(&already_init); + if(!(already_init)){ + smpi_process_init(argc, argv); + smpi_process_mark_as_initialized(); + int rank = smpi_process_index(); + TRACE_smpi_init(rank); + TRACE_smpi_computing_init(rank); + instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); + extra->type = TRACING_INIT; + TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra); + TRACE_smpi_collective_out(rank, -1, __FUNCTION__); + smpi_bench_begin(); + } return MPI_SUCCESS; } -- 2.20.1