Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Initialize fortran data structures in all cases.
authorAugustin Degomme <degomme@wasabi>
Mon, 9 Jul 2018 16:26:50 +0000 (18:26 +0200)
committerAugustin Degomme <degomme@wasabi>
Mon, 9 Jul 2018 16:27:02 +0000 (18:27 +0200)
We have a weird proxy app with the main in C, and the rest in Fortran.
TODO :
 - check if overhead is fine (+leaks).

src/smpi/bindings/smpi_f77.cpp
src/smpi/include/private.hpp
src/smpi/internals/smpi_global.cpp

index a7c841a..23db44a 100644 (file)
@@ -13,7 +13,7 @@
 
 static int running_processes = 0;
 
 
 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
    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--;
 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) {
 }
 
 void mpi_abort_(int* comm, int* errorcode, int* ierr) {
index 502cee5..7210057 100644 (file)
@@ -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 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 {
 } // extern "C"
 
 struct s_smpi_privatization_region_t {
index bb67c34..f1a3199 100644 (file)
@@ -7,6 +7,7 @@
 #include "mc/mc.h"
 #include "simgrid/s4u/Engine.hpp"
 #include "smpi_coll.hpp"
 #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"
 #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 (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(){
 }
 
 static void smpi_init_options(){
@@ -707,6 +710,7 @@ void SMPI_finalize(){
 }
 
 void smpi_mpi_init() {
 }
 
 void smpi_mpi_init() {
+  smpi_init_fortran_types();
   if(smpi_init_sleep > 0)
     simcall_process_sleep(smpi_init_sleep);
 }
   if(smpi_init_sleep > 0)
     simcall_process_sleep(smpi_init_sleep);
 }