X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/908f43d575e3b19014f39ba209da997ab6e3fa2c..f5107861b83c82ea2d0a94511f37390054b45940:/src/smpi/smpi_global.c diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index 5b05cfe912..de39759a21 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -79,7 +79,7 @@ void smpi_process_init(int *argc, char ***argv) void smpi_process_destroy(void) { int index = smpi_process_index(); - + process_data[index]->index=-100; XBT_DEBUG("<%d> Process left the game", index); } @@ -94,6 +94,16 @@ void smpi_process_finalize(void) } } +/** + * @brief Check if a process is finalized + */ +int smpi_process_finalized() +{ + return (smpi_process_index()==-100); + // If finalized, this value has been set to -100; +} + + #ifdef SMPI_F2C int smpi_process_argc(void) { smpi_process_data_t data = smpi_process_data(); @@ -160,8 +170,8 @@ int smpi_process_count(void) int smpi_process_index(void) { smpi_process_data_t data = smpi_process_data(); - - return data->index; + //return -1 if not initialized + return data? data->index : MPI_UNDEFINED; } smx_rdv_t smpi_process_mailbox(void) { @@ -413,6 +423,19 @@ int smpi_main(int (*realmain) (int argc, char *argv[]),int argc, char *argv[]) mpi_coll_reduce_scatter_fun = (int (*)(void *sbuf, void *rbuf, int *rcounts,\ MPI_Datatype dtype,MPI_Op op,MPI_Comm comm)) mpi_coll_reduce_scatter_description[reduce_scatter_id].coll; + + int scatter_id = find_coll_description(mpi_coll_scatter_description, + sg_cfg_get_string("smpi/scatter")); + mpi_coll_scatter_fun = (int (*)(void *sendbuf, int sendcount, MPI_Datatype sendtype,\ + void *recvbuf, int recvcount, MPI_Datatype recvtype,\ + int root, MPI_Comm comm)) + mpi_coll_scatter_description[scatter_id].coll; + + int barrier_id = find_coll_description(mpi_coll_barrier_description, + sg_cfg_get_string("smpi/barrier")); + mpi_coll_barrier_fun = (int (*)(MPI_Comm comm)) + mpi_coll_barrier_description[barrier_id].coll; + smpi_global_init(); /* Clean IO before the run */