X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d584ad0ae57046630209a2a166f5c8c5a3140e76..bd119c7663d1919274f1576d706e23fe2866017a:/src/smpi/smpi_global.c diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index bfd7ba1276..7e446a9590 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2013. The SimGrid Team. +/* Copyright (c) 2007-2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -68,6 +68,9 @@ void smpi_process_init(int *argc, char ***argv) if (argc && argv) { proc = SIMIX_process_self(); index = atoi((*argv)[1]); +#ifdef SMPI_F2C + smpi_current_rank = index; +#endif data = smpi_process_remote_data(index); simcall_process_set_data(proc, data); if (*argc > 2) { @@ -157,6 +160,7 @@ int smpi_process_getarg(integer * index, char *dst, ftnlen len) } return 0; } +#endif int smpi_global_size(void) { @@ -169,7 +173,6 @@ int smpi_global_size(void) } return atoi(value); } -#endif smpi_process_data_t smpi_process_data(void) { @@ -251,6 +254,12 @@ double smpi_process_simulated_elapsed(void) MPI_Comm smpi_process_comm_self(void) { smpi_process_data_t data = smpi_process_data(); + if(data->comm_self==MPI_COMM_NULL){ + MPI_Group group = smpi_group_new(1); + data->comm_self = smpi_comm_new(group); + smpi_group_set_mapping(group, smpi_process_index(), 0); + } + return data->comm_self; } @@ -311,12 +320,9 @@ void smpi_global_init(void) process_data[i]->timer = xbt_os_timer_new(); if (MC_is_active()) MC_ignore_heap(process_data[i]->timer, xbt_os_timer_size()); - group = smpi_group_new(1); - process_data[i]->comm_self = smpi_comm_new(group); + process_data[i]->comm_self = MPI_COMM_NULL; process_data[i]->initialized = 0; process_data[i]->sampling = 0; - - smpi_group_set_mapping(group, i, 0); } group = smpi_group_new(process_count); MPI_COMM_WORLD = smpi_comm_new(group); @@ -341,8 +347,10 @@ void smpi_global_destroy(void) xbt_free(MPI_COMM_WORLD); MPI_COMM_WORLD = MPI_COMM_NULL; for (i = 0; i < count; i++) { - smpi_group_unuse(smpi_comm_group(process_data[i]->comm_self)); - smpi_comm_destroy(process_data[i]->comm_self); + if(process_data[i]->comm_self!=MPI_COMM_NULL){ + smpi_group_unuse(smpi_comm_group(process_data[i]->comm_self)); + smpi_comm_destroy(process_data[i]->comm_self); + } xbt_os_timer_free(process_data[i]->timer); simcall_rdv_destroy(process_data[i]->mailbox); simcall_rdv_destroy(process_data[i]->mailbox_small); @@ -407,14 +415,15 @@ int smpi_main(int (*realmain) (int argc, char *argv[]), int argc, char *argv[]) XBT_LOG_CONNECT(smpi_base); XBT_LOG_CONNECT(smpi_bench); XBT_LOG_CONNECT(smpi_coll); + XBT_LOG_CONNECT(smpi_colls); XBT_LOG_CONNECT(smpi_comm); + XBT_LOG_CONNECT(smpi_dvfs); XBT_LOG_CONNECT(smpi_group); XBT_LOG_CONNECT(smpi_kernel); XBT_LOG_CONNECT(smpi_mpi); XBT_LOG_CONNECT(smpi_mpi_dt); XBT_LOG_CONNECT(smpi_pmpi); XBT_LOG_CONNECT(smpi_replay); - XBT_LOG_CONNECT(smpi_colls); #ifdef HAVE_TRACING TRACE_global_init(&argc, argv);