X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1fc5d774ff8e253d3127812d681e7d08b489fc4a..b9b0ba08f86e11674ff24a6b7389e7dec2984af3:/src/smpi/internals/smpi_global.cpp diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index bb67c34626..c28af0c90c 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -3,13 +3,14 @@ /* 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 "smpi_host.hpp" #include "mc/mc.h" #include "simgrid/s4u/Engine.hpp" #include "smpi_coll.hpp" -#include "smpi_process.hpp" -#include "src/msg/msg_private.hpp" +#include "smpi_f2c.hpp" +#include "smpi_host.hpp" +#include "src/kernel/activity/CommImpl.hpp" #include "src/simix/smx_private.hpp" +#include "src/smpi/include/smpi_actor.hpp" #include "xbt/config.hpp" #include /* DBL_MAX */ @@ -59,7 +60,7 @@ using simgrid::s4u::Actor; using simgrid::s4u::ActorPtr; std::unordered_map location2speedup; -static std::map process_data; +static std::map process_data; int process_count = 0; static int smpi_exit_status = 0; int smpi_universe_size = 0; @@ -95,16 +96,17 @@ int smpi_process_count() return process_count; } -simgrid::smpi::Process* smpi_process() +simgrid::smpi::ActorExt* smpi_process() { ActorPtr me = Actor::self(); + if (me == nullptr) // This happens sometimes (eg, when linking against NS3 because it pulls openMPI...) return nullptr; - simgrid::msg::ActorExt* msgExt = static_cast(me->get_impl()->get_user_data()); - return static_cast(msgExt->data); + + return process_data.at(me); } -simgrid::smpi::Process* smpi_process_remote(ActorPtr actor) +simgrid::smpi::ActorExt* smpi_process_remote(ActorPtr actor) { return process_data.at(actor); } @@ -114,7 +116,7 @@ MPI_Comm smpi_process_comm_self(){ } void smpi_process_init(int *argc, char ***argv){ - simgrid::smpi::Process::init(argc, argv); + simgrid::smpi::ActorExt::init(argc, argv); } int smpi_process_index(){ @@ -122,11 +124,11 @@ int smpi_process_index(){ } void * smpi_process_get_user_data(){ - return smpi_process()->get_user_data(); + return Actor::self()->get_impl()->get_user_data(); } void smpi_process_set_user_data(void *data){ - return smpi_process()->set_user_data(data); + Actor::self()->get_impl()->set_user_data(data); } @@ -356,6 +358,8 @@ void smpi_global_destroy() if (smpi_privatize_global_variables == SmpiPrivStrategies::MMAP) smpi_destroy_global_memory_segments(); smpi_free_static(); + if(simgrid::smpi::F2C::lookup() != nullptr) + simgrid::smpi::F2C::delete_lookup(); } static void smpi_init_options(){ @@ -623,20 +627,18 @@ int smpi_main(const char* executable, int argc, char* argv[]) } TRACE_global_init(); - SIMIX_global_init(&argc, argv); - MSG_init(&argc, argv); // FIXME Remove this MSG call. Once it's removed, we can remove the msg header include as well SMPI_switch_data_segment = &smpi_switch_data_segment; // TODO This will not be executed in the case where smpi_main is not called, // e.g., not for smpi_msg_masterslave. This should be moved to another location - // that is always called -- maybe close to Actor::onCreation? + // that is always called -- maybe close to Actor::on_creation? simgrid::s4u::Host::on_creation.connect( [](simgrid::s4u::Host& host) { host.extension_set(new simgrid::smpi::Host(&host)); }); // parse the platform file: get the host list - SIMIX_create_environment(argv[1]); + simgrid::s4u::Engine::get_instance()->load_platform(argv[1]); SIMIX_comm_set_copy_data_callback(smpi_comm_copy_buffer_callback); smpi_init_options(); @@ -646,7 +648,7 @@ int smpi_main(const char* executable, int argc, char* argv[]) smpi_init_privatization_no_dlopen(executable); SMPI_init(); - SIMIX_launch_application(argv[2]); + simgrid::s4u::Engine::get_instance()->load_deployment(argv[2]); SMPI_app_instance_register(smpi_default_instance_name.c_str(), nullptr, process_data.size()); // This call has a side effect on process_count... MPI_COMM_WORLD = *smpi_deployment_comm_world(smpi_default_instance_name); @@ -685,7 +687,7 @@ int smpi_main(const char* executable, int argc, char* argv[]) void SMPI_init(){ simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::ActorPtr actor) { if (not actor->is_daemon()) { - process_data.insert({actor, new simgrid::smpi::Process(actor, nullptr)}); + process_data.insert({actor, new simgrid::smpi::ActorExt(actor, nullptr)}); } }); simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::ActorPtr actor) { @@ -707,6 +709,7 @@ void SMPI_finalize(){ } void smpi_mpi_init() { + smpi_init_fortran_types(); if(smpi_init_sleep > 0) simcall_process_sleep(smpi_init_sleep); }