Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
MPI IO: now with more fortran bindings
authorAugustin Degomme <adegomme@gmail.com>
Wed, 27 May 2020 12:54:46 +0000 (14:54 +0200)
committerAugustin Degomme <adegomme@gmail.com>
Wed, 27 May 2020 12:59:05 +0000 (14:59 +0200)
MANIFEST.in
src/smpi/bindings/smpi_f77.cpp
src/smpi/bindings/smpi_f77_file.cpp [new file with mode: 0644]
src/smpi/include/private.hpp
src/smpi/include/smpi_file.hpp
src/smpi/mpi/smpi_file.cpp

index 16e8a3e..b281628 100644 (file)
@@ -2373,6 +2373,7 @@ include src/simix/smx_private.hpp
 include src/smpi/bindings/smpi_f77.cpp
 include src/smpi/bindings/smpi_f77_coll.cpp
 include src/smpi/bindings/smpi_f77_comm.cpp
+include src/smpi/bindings/smpi_f77_file.cpp
 include src/smpi/bindings/smpi_f77_request.cpp
 include src/smpi/bindings/smpi_f77_type.cpp
 include src/smpi/bindings/smpi_mpi.cpp
index 5cd944d..809002d 100644 (file)
@@ -7,6 +7,7 @@
 #include "smpi_comm.hpp"
 #include "smpi_datatype.hpp"
 #include "smpi_errhandler.hpp"
+#include "smpi_file.hpp"
 #include "smpi_op.hpp"
 #include "smpi_request.hpp"
 #include "smpi_win.hpp"
@@ -958,30 +959,6 @@ void mpi_close_port_ ( char *port_name, int* ierr){
  *ierr = MPI_Close_port( port_name);
 }
 
-void mpi_file_close_ ( int* file, int* ierr){
-  *ierr= MPI_File_close(reinterpret_cast<MPI_File*>(*file));
-}
-
-void mpi_file_delete_ ( char* filename, int* info, int* ierr){
-  *ierr= MPI_File_delete(filename, simgrid::smpi::Info::f2c(*info));
-}
-
-void mpi_file_open_ ( int* comm, char* filename, int* amode, int* info, int* fh, int* ierr){
-  *ierr= MPI_File_open(simgrid::smpi::Comm::f2c(*comm), filename, *amode, simgrid::smpi::Info::f2c(*info), reinterpret_cast<MPI_File*>(*fh));
-}
-
-void mpi_file_set_view_ ( int* fh, long long int* offset, int* etype, int* filetype, char* datarep, int* info, int* ierr){
-  *ierr= MPI_File_set_view(reinterpret_cast<MPI_File>(*fh) , reinterpret_cast<MPI_Offset>(*offset), simgrid::smpi::Datatype::f2c(*etype), simgrid::smpi::Datatype::f2c(*filetype), datarep, simgrid::smpi::Info::f2c(*info));
-}
-
-void mpi_file_read_ ( int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr){
-  *ierr=  MPI_File_read(reinterpret_cast<MPI_File>(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
-}
-
-void mpi_file_write_ ( int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr){
-  *ierr=  MPI_File_write(reinterpret_cast<MPI_File>(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
-}
-
 void smpi_execute_flops_(double* flops){
   smpi_execute_flops(*flops);
 }
diff --git a/src/smpi/bindings/smpi_f77_file.cpp b/src/smpi/bindings/smpi_f77_file.cpp
new file mode 100644 (file)
index 0000000..8c757a1
--- /dev/null
@@ -0,0 +1,111 @@
+/* Copyright (c) 2010-2020. The SimGrid Team. All rights reserved.          */
+
+/* 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 "private.hpp"
+#include "smpi_file.hpp"
+#include "smpi_errhandler.hpp"
+#include "smpi_info.hpp"
+
+extern "C" { // This should really use the C linkage to be usable from Fortran
+
+void mpi_file_close_ ( int* file, int* ierr){
+  MPI_File tmp = simgrid::smpi::File::f2c(*file);
+  *ierr =  MPI_File_close(&tmp);
+  if(*ierr == MPI_SUCCESS) {
+    simgrid::smpi::F2C::free_f(*file);
+  }
+}
+
+void mpi_file_delete_ ( char* filename, int* info, int* ierr){
+  *ierr= MPI_File_delete(filename, simgrid::smpi::Info::f2c(*info));
+}
+
+void mpi_file_open_ ( int* comm, char* filename, int* amode, int* info, int* fh, int* ierr){
+  MPI_File tmp;
+  *ierr= MPI_File_open(simgrid::smpi::Comm::f2c(*comm), filename, *amode, simgrid::smpi::Info::f2c(*info), &tmp);
+  if (*ierr == MPI_SUCCESS) {
+    *fh = tmp->add_f();
+  }
+}
+
+void mpi_file_seek_(int* fh, MPI_Offset* offset, int* whence, int* ierr){
+       *ierr= MPI_File_seek(simgrid::smpi::File::f2c(*fh), *offset, *whence);
+}
+
+void mpi_file_seek_shared_(int* fh, MPI_Offset* offset, int* whence, int* ierr){
+       *ierr= MPI_File_seek_shared(simgrid::smpi::File::f2c(*fh), *offset, *whence);
+}
+
+void mpi_file_get_position_(int* fh, MPI_Offset* offset, int* ierr){
+       *ierr= MPI_File_get_position(simgrid::smpi::File::f2c(*fh), offset);
+}
+void mpi_file_get_position_shared_(int* fh, MPI_Offset* offset, int* ierr){
+       *ierr= MPI_File_get_position_shared(simgrid::smpi::File::f2c(*fh), offset);
+}
+
+void mpi_file_read_ ( int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_read(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_read_shared_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_read_shared(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_read_all_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_read_all(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_read_ordered_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_read_ordered(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_read_at_(int* fh, MPI_Offset* offset, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_read_at(simgrid::smpi::File::f2c(*fh), *offset, buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_read_at_all_(int* fh, MPI_Offset* offset, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_read_at_all(simgrid::smpi::File::f2c(*fh), *offset, buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_write_ ( int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_write(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_write_shared_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_write_shared(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_write_ordered_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_write_ordered(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_write_at_(int* fh, MPI_Offset* offset, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_write_at(simgrid::smpi::File::f2c(*fh), *offset, buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_write_at_all_(int* fh, MPI_Offset* offset, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_write_at_all(simgrid::smpi::File::f2c(*fh), *offset, buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_write_all_ ( int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr){
+  *ierr=  MPI_File_write_all(simgrid::smpi::File::f2c(*fh), buf, *count, simgrid::smpi::Datatype::f2c(*datatype), status);
+}
+
+void mpi_file_set_view_ ( int* fh, MPI_Offset* offset, int* etype, int* filetype, char* datarep, int* info, int* ierr){
+  *ierr= MPI_File_set_view(simgrid::smpi::File::f2c(*fh) , *offset, simgrid::smpi::Datatype::f2c(*etype), simgrid::smpi::Datatype::f2c(*filetype), datarep, simgrid::smpi::Info::f2c(*info));
+}
+
+void mpi_file_get_view_(int* fh, MPI_Offset* disp, int* etype, int* filetype, char *datarep, int* ierr){
+  MPI_Datatype tmp;
+  MPI_Datatype tmp2;
+  *ierr= MPI_File_get_view(simgrid::smpi::File::f2c(*fh) , disp, &tmp, &tmp2, datarep);
+  if(*ierr == MPI_SUCCESS) {
+    *etype = tmp->c2f();
+    *filetype = tmp2->c2f();
+  }
+}
+
+
+}
\ No newline at end of file
index b991c40..ceb544f 100644 (file)
@@ -457,9 +457,24 @@ void mpi_comm_get_parent_(int* parent, int* ierr);
 void mpi_file_close_(int* file, int* ierr);
 void mpi_file_delete_(char* filename, int* info, int* ierr);
 void mpi_file_open_(int* comm, char* filename, int* amode, int* info, int* fh, 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_seek_(int* fh, MPI_Offset* offset, int* whence, int* ierr);
+void mpi_file_seek_shared_(int* fh, MPI_Offset* offset, int* whence, int* ierr);
+void mpi_file_get_position_(int* fh, MPI_Offset* offset, int* ierr);
+void mpi_file_get_position_shared_(int* fh, MPI_Offset* offset, int* ierr);
+void mpi_file_set_view_(int* fh, MPI_Offset* offset, int* etype, int* filetype, char* datarep, int* info, int* ierr);
+void mpi_file_get_view_(int* fh, MPI_Offset* disp, int* etype, int* filetype, char *datarep, int* ierr);
 void mpi_file_read_(int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_read_shared_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_read_all_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_read_ordered_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_read_at_(int* fh, MPI_Offset* offset, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_read_at_all_(int* fh, MPI_Offset* offset, 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_write_all_(int* fh, void* buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_write_shared_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_write_ordered_(int* fh, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_write_at_(int* fh, MPI_Offset* offset, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
+void mpi_file_write_at_all_(int* fh, MPI_Offset* offset, void *buf, int* count, int* datatype, MPI_Status* status, int* ierr);
 void smpi_init_fortran_types();
 void smpi_execute_flops_(double* flops);
 void smpi_execute_flops_benched_(double* flops);
index 24e653b..ddd0cff 100644 (file)
@@ -18,7 +18,7 @@ XBT_LOG_EXTERNAL_CATEGORY(smpi_pmpi);
 
 namespace simgrid{
 namespace smpi{
-class File{
+class File : public F2C{
   MPI_Comm comm_;
   int flags_;
   simgrid::s4u::File* file_;
@@ -60,6 +60,7 @@ class File{
   static int del(const char* filename, const Info* info);
   MPI_Errhandler errhandler();
   void set_errhandler( MPI_Errhandler errhandler);
+  static File* f2c(int id);
 };
 
   /* Read_all, Write_all : loosely based on */
index 36184d6..124fc87 100644 (file)
@@ -316,5 +316,9 @@ namespace smpi{
     if (errhandler_ != MPI_ERRHANDLER_NULL)
       errhandler_->ref();
   }
+
+  File* File::f2c(int id){
+    return static_cast<File*>(F2C::f2c(id));
+  }
 }
 }