We have a weird proxy app with the main in C, and the rest in Fortran.
TODO :
- check if overhead is fine (+leaks).
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
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) {
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 {
#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_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"
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(){
+ 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);
}