X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e5fdc0f90b4c3ec53803150b783320e9cd4ebc75..22ad42bc0e39c33058fa8f47d3b41966a45ffa80:/src/smpi/smpi_global.cpp?ds=sidebyside diff --git a/src/smpi/smpi_global.cpp b/src/smpi/smpi_global.cpp index 542997798f..47a3374dec 100644 --- a/src/smpi/smpi_global.cpp +++ b/src/smpi/smpi_global.cpp @@ -4,18 +4,19 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include "mc/mc.h" #include "private.h" #include "private.hpp" +#include "simgrid/s4u/Mailbox.hpp" +#include "simgrid/sg_config.h" #include "smpi_mpi_dt_private.h" -#include "mc/mc.h" +#include "src/kernel/activity/SynchroComm.hpp" #include "src/mc/mc_record.h" -#include "xbt/replay.h" -#include "surf/surf.h" -#include "src/simix/smx_private.h" -#include "simgrid/sg_config.h" #include "src/mc/mc_replay.h" #include "src/msg/msg_private.h" -#include "src/kernel/activity/SynchroComm.hpp" +#include "src/simix/smx_private.h" +#include "surf/surf.h" +#include "xbt/replay.h" #include /* DBL_MAX */ #include @@ -46,8 +47,8 @@ typedef struct s_smpi_process_data { double simulated; int *argc; char ***argv; - smx_mailbox_t mailbox; - smx_mailbox_t mailbox_small; + simgrid::s4u::MailboxPtr mailbox; + simgrid::s4u::MailboxPtr mailbox_small; xbt_mutex_t mailboxes_mutex; xbt_os_timer_t timer; MPI_Comm comm_self; @@ -59,7 +60,7 @@ typedef struct s_smpi_process_data { int sampling; /* inside an SMPI_SAMPLE_ block? */ char* instance_id; bool replaying; /* is the process replaying a trace */ - xbt_bar_t finalization_barrier; + msg_bar_t finalization_barrier; int return_value; smpi_trace_call_location_t trace_call_loc; #if HAVE_PAPI @@ -99,6 +100,10 @@ static char *get_mailbox_name_small(char *str, int index) void smpi_process_init(int *argc, char ***argv) { + if (process_data == nullptr){ + printf("SimGrid was not initialized properly before entering MPI_Init. Aborting, please check compilation process and use smpirun\n"); + exit(1); + } if (argc != nullptr && argv != nullptr) { smx_actor_t proc = SIMIX_process_self(); proc->context->set_cleanup(&MSG_process_cleanup_from_SIMIX); @@ -118,7 +123,7 @@ void smpi_process_init(int *argc, char ***argv) } MPI_Comm* temp_comm_world; - xbt_bar_t temp_bar; + msg_bar_t temp_bar; smpi_deployment_register_process(instance_id, rank, index, &temp_comm_world, &temp_bar); smpi_process_data_t data = smpi_process_remote_data(index); data->comm_world = temp_comm_world; @@ -140,7 +145,7 @@ void smpi_process_init(int *argc, char ***argv) data->argc = argc; data->argv = argv; // set the process attached to the mailbox - simcall_mbox_set_receiver(data->mailbox_small, proc); + data->mailbox_small->setReceiver(simgrid::s4u::Actor::self()); XBT_DEBUG("<%d> New process in the game: %p", index, proc); } xbt_assert(smpi_process_data(), @@ -167,7 +172,7 @@ void smpi_process_finalize() int index = smpi_process_index(); // wait for all pending asynchronous comms to finish - xbt_barrier_wait(process_data[index_to_process_data[index]]->finalization_barrier); + MSG_barrier_wait(process_data[index_to_process_data[index]]->finalization_barrier); } /** @brief Check if a process is finalized */ @@ -277,13 +282,13 @@ MPI_Comm smpi_process_comm_world() smx_mailbox_t smpi_process_mailbox() { smpi_process_data_t data = smpi_process_data(); - return data->mailbox; + return data->mailbox->getImpl(); } smx_mailbox_t smpi_process_mailbox_small() { smpi_process_data_t data = smpi_process_data(); - return data->mailbox_small; + return data->mailbox_small->getImpl(); } xbt_mutex_t smpi_process_mailboxes_mutex() @@ -295,13 +300,13 @@ xbt_mutex_t smpi_process_mailboxes_mutex() smx_mailbox_t smpi_process_remote_mailbox(int index) { smpi_process_data_t data = smpi_process_remote_data(index); - return data->mailbox; + return data->mailbox->getImpl(); } smx_mailbox_t smpi_process_remote_mailbox_small(int index) { smpi_process_data_t data = smpi_process_remote_data(index); - return data->mailbox_small; + return data->mailbox_small->getImpl(); } xbt_mutex_t smpi_process_remote_mailboxes_mutex(int index) @@ -422,7 +427,7 @@ void smpi_comm_copy_buffer_callback(smx_activity_t synchro, void *buff, size_t b void smpi_comm_null_copy_buffer_callback(smx_activity_t comm, void *buff, size_t buff_size) { - return; + /* nothing done in this version */ } static void smpi_check_options(){ @@ -558,8 +563,8 @@ void smpi_global_init() process_data[i] = new s_smpi_process_data_t; process_data[i]->argc = nullptr; process_data[i]->argv = nullptr; - process_data[i]->mailbox = simcall_mbox_create(get_mailbox_name(name, i)); - process_data[i]->mailbox_small = simcall_mbox_create(get_mailbox_name_small(name, i)); + process_data[i]->mailbox = simgrid::s4u::Mailbox::byName(get_mailbox_name(name, i)); + process_data[i]->mailbox_small = simgrid::s4u::Mailbox::byName(get_mailbox_name_small(name, i)); process_data[i]->mailboxes_mutex = xbt_mutex_init(); process_data[i]->timer = xbt_os_timer_new(); if (MC_is_active()) @@ -595,7 +600,7 @@ void smpi_global_init() group = smpi_group_new(process_count); MPI_COMM_WORLD = smpi_comm_new(group, nullptr); MPI_Attr_put(MPI_COMM_WORLD, MPI_UNIVERSE_SIZE, reinterpret_cast(process_count)); - xbt_bar_t bar=xbt_barrier_init(process_count); + msg_bar_t bar = MSG_barrier_init(process_count); for (i = 0; i < process_count; i++) { smpi_group_set_mapping(group, i, i); @@ -607,16 +612,15 @@ void smpi_global_init() void smpi_global_destroy() { int count = smpi_process_count(); - int i; smpi_bench_destroy(); if (MPI_COMM_WORLD != MPI_COMM_UNINITIALIZED){ while (smpi_group_unuse(smpi_comm_group(MPI_COMM_WORLD)) > 0); - xbt_barrier_destroy(process_data[0]->finalization_barrier); + MSG_barrier_destroy(process_data[0]->finalization_barrier); }else{ smpi_deployment_cleanup_instances(); } - for (i = 0; i < count; i++) { + for (int i = 0; i < count; i++) { if(process_data[i]->comm_self!=MPI_COMM_NULL){ smpi_comm_destroy(process_data[i]->comm_self); } @@ -659,7 +663,6 @@ void smpi_global_destroy() void __attribute__ ((weak)) user_main_() { xbt_die("Should not be in this smpi_simulated_main"); - return; } int __attribute__ ((weak)) smpi_simulated_main_(int argc, char **argv) @@ -787,7 +790,7 @@ int smpi_main(int (*realmain) (int argc, char *argv[]), int argc, char *argv[]) SIMIX_global_init(&argc, argv); MSG_init(&argc,argv); - SMPI_switch_data_segment = smpi_switch_data_segment; + SMPI_switch_data_segment = &smpi_switch_data_segment; smpi_init_options();