X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/31904a7e115f103fc2c2d124d7edded36367dc80..bd119c7663d1919274f1576d706e23fe2866017a:/src/smpi/smpi_global.c diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index 842b659dbd..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 @@ -30,6 +30,7 @@ typedef struct s_smpi_process_data { void *data; /* user data */ int index; int initialized; + int sampling; /* inside an SMPI_SAMPLE_ block? */ } s_smpi_process_data_t; static smpi_process_data_t *process_data = NULL; @@ -67,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) { @@ -156,6 +160,7 @@ int smpi_process_getarg(integer * index, char *dst, ftnlen len) } return 0; } +#endif int smpi_global_size(void) { @@ -168,7 +173,6 @@ int smpi_global_size(void) } return atoi(value); } -#endif smpi_process_data_t smpi_process_data(void) { @@ -250,9 +254,27 @@ 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; } +void smpi_process_set_sampling(int s) +{ + smpi_process_data_t data = smpi_process_data(); + data->sampling = s; +} + +int smpi_process_get_sampling(void) +{ + smpi_process_data_t data = smpi_process_data(); + return data->sampling; +} + void print_request(const char *message, MPI_Request request) { XBT_DEBUG @@ -261,7 +283,7 @@ void print_request(const char *message, MPI_Request request) request->dst, request->tag, request->flags); } -static void SMPI_comm_copy_buffer_callback(smx_action_t comm, +static void smpi_comm_copy_buffer_callback(smx_action_t comm, void *buff, size_t buff_size) { XBT_DEBUG("Copy the data over"); @@ -284,7 +306,7 @@ void smpi_global_init(void) MPI_Group group; char name[MAILBOX_NAME_MAXLEN]; - SIMIX_comm_set_copy_data_callback(&SMPI_comm_copy_buffer_callback); + SIMIX_comm_set_copy_data_callback(&smpi_comm_copy_buffer_callback); process_count = SIMIX_process_count(); process_data = xbt_new(smpi_process_data_t, process_count); for (i = 0; i < process_count; i++) { @@ -298,11 +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; - - smpi_group_set_mapping(group, i, 0); + process_data[i]->sampling = 0; } group = smpi_group_new(process_count); MPI_COMM_WORLD = smpi_comm_new(group); @@ -327,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); @@ -393,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);