From: Augustin Degomme Date: Mon, 9 Jul 2018 16:26:50 +0000 (+0200) Subject: Initialize fortran data structures in all cases. X-Git-Tag: v3_21~501 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/faab5db99c1d3ba4db5a9c1ede7f1e950d328131?ds=sidebyside Initialize fortran data structures in all cases. We have a weird proxy app with the main in C, and the rest in Fortran. TODO : - check if overhead is fine (+leaks). --- diff --git a/src/smpi/bindings/smpi_f77.cpp b/src/smpi/bindings/smpi_f77.cpp index a7c841aab1..23db44adf2 100644 --- a/src/smpi/bindings/smpi_f77.cpp +++ b/src/smpi/bindings/smpi_f77.cpp @@ -13,7 +13,7 @@ static int running_processes = 0; -static void smpi_init_fortran_types(){ +void smpi_init_fortran_types(){ if(simgrid::smpi::F2C::lookup() == nullptr){ MPI_COMM_WORLD->add_f(); MPI_BYTE->add_f();//MPI_BYTE @@ -79,9 +79,6 @@ void mpi_init_(int* ierr) { void mpi_finalize_(int* ierr) { *ierr = MPI_Finalize(); running_processes--; - if(running_processes==0){ - simgrid::smpi::F2C::delete_lookup(); - } } void mpi_abort_(int* comm, int* errorcode, int* ierr) { diff --git a/src/smpi/include/private.hpp b/src/smpi/include/private.hpp index 502cee5ce7..7210057300 100644 --- a/src/smpi/include/private.hpp +++ b/src/smpi/include/private.hpp @@ -404,7 +404,7 @@ void mpi_file_open_(int* comm, char* filename, int* amode, int* info, int* fh, i void mpi_file_set_view_(int* fh, long long int* offset, int* etype, int* filetype, char* datarep, int* info, int* ierr); void mpi_file_read_(int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr); void mpi_file_write_(int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr); - +void smpi_init_fortran_types(); } // extern "C" struct s_smpi_privatization_region_t { diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index bb67c34626..f1a31992df 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -7,6 +7,7 @@ #include "mc/mc.h" #include "simgrid/s4u/Engine.hpp" #include "smpi_coll.hpp" +#include "smpi_f2c.hpp" #include "smpi_process.hpp" #include "src/msg/msg_private.hpp" #include "src/simix/smx_private.hpp" @@ -356,6 +357,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(){ @@ -707,6 +710,7 @@ void SMPI_finalize(){ } void smpi_mpi_init() { + smpi_init_fortran_types(); if(smpi_init_sleep > 0) simcall_process_sleep(smpi_init_sleep); }