From 26ade707dbef25e3426bbe43dbab99e60a1990de Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Wed, 11 Dec 2019 00:23:58 +0100 Subject: [PATCH] "Implement" MPI_File_set_view, MPI_File_get_view. --- src/smpi/bindings/smpi_mpi.cpp | 5 ++--- src/smpi/bindings/smpi_pmpi_file.cpp | 23 +++++++++++++++++++++++ src/smpi/include/smpi_file.hpp | 5 +++++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/smpi/bindings/smpi_mpi.cpp b/src/smpi/bindings/smpi_mpi.cpp index 8a4498818a..7249a491f2 100644 --- a/src/smpi/bindings/smpi_mpi.cpp +++ b/src/smpi/bindings/smpi_mpi.cpp @@ -363,7 +363,8 @@ WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_call_errhandler,(MPI_File fh, in WRAPPED_PMPI_CALL(int, MPI_File_create_errhandler,(MPI_File_errhandler_function *function, MPI_Errhandler *errhandler),(function, errhandler)) WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_set_errhandler,( MPI_File fh, MPI_Errhandler errhandler), (fh, errhandler)) WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_errhandler,( MPI_File fh, MPI_Errhandler *errhandler), (fh, errhandler)) - +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_set_view,(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, const char *datarep, MPI_Info info), (fh, disp, etype, filetype, datarep, info)) +WRAPPED_PMPI_CALL_ERRHANDLER_FILE(int, MPI_File_get_view,(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep), (fh, disp, etype, filetype, datarep)) /* Unimplemented Calls - both PMPI and MPI calls are generated. When implementing, please move ahead, swap UNIMPLEMENTED_WRAPPED_PMPI_CALL for WRAPPED_PMPI_CALL, @@ -390,8 +391,6 @@ UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_Fint, MPI_File_c2f,(MPI_File file), (file)) //UNIMPLEMENTED_WRAPPED_PMPI_CALL(MPI_File, MPI_File_f2c,(MPI_Fint file), (file)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_set_size,(MPI_File fh, MPI_Offset size), (fh, size)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_preallocate,(MPI_File fh, MPI_Offset size), (fh, size)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_set_view,(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, const char *datarep, MPI_Info info), (fh, disp, etype, filetype, datarep, info)) -UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_get_view,(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep), (fh, disp, etype, filetype, datarep)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_iread_at,(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request), (fh, offset, buf, count, datatype, request)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_iwrite_at,(MPI_File fh, MPI_Offset offset, const void *buf,int count, MPI_Datatype datatype, MPI_Request *request), (fh, offset, buf, count, datatype, request)) UNIMPLEMENTED_WRAPPED_PMPI_CALL(int, MPI_File_iread_at_all,(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request), (fh, offset, buf, count, datatype, request)) diff --git a/src/smpi/bindings/smpi_pmpi_file.cpp b/src/smpi/bindings/smpi_pmpi_file.cpp index ca7484ff36..0618f8a260 100644 --- a/src/smpi/bindings/smpi_pmpi_file.cpp +++ b/src/smpi/bindings/smpi_pmpi_file.cpp @@ -287,6 +287,29 @@ int PMPI_File_delete(const char *filename, MPI_Info info){ return ret; } +int PMPI_File_set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, const char *datarep, MPI_Info info){ + CHECK_FILE(1, fh) + if(not ((fh->flags() & MPI_MODE_SEQUENTIAL) && (disp == MPI_DISPLACEMENT_CURRENT))) + CHECK_OFFSET(2, disp) + CHECK_TYPE(3, etype) + CHECK_TYPE(4, filetype) + smpi_bench_end(); + int ret = fh->set_view(disp, etype, filetype, datarep, info); + smpi_bench_begin(); + return ret; +} + +int PMPI_File_get_view(MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep){ + CHECK_FILE(1, fh) + CHECK_NULL(2, MPI_ERR_ARG, disp) + CHECK_NULL(3, MPI_ERR_ARG, etype) + CHECK_NULL(4, MPI_ERR_ARG, filetype) + smpi_bench_end(); + int ret = fh->get_view(disp, etype, filetype, datarep); + smpi_bench_begin(); + return ret; +} + int PMPI_File_get_info(MPI_File fh, MPI_Info* info) { CHECK_FILE(1, fh) diff --git a/src/smpi/include/smpi_file.hpp b/src/smpi/include/smpi_file.hpp index 2283564864..f0ff13a508 100644 --- a/src/smpi/include/smpi_file.hpp +++ b/src/smpi/include/smpi_file.hpp @@ -28,6 +28,9 @@ class File{ MPI_Win win_; char* list_; MPI_Errhandler errhandler_; + MPI_Datatype etype_; + MPI_Datatype filetype_; + std::string datarep_; public: File(MPI_Comm comm, const char *filename, int amode, MPI_Info info); @@ -42,6 +45,8 @@ class File{ int sync(); int seek(MPI_Offset offset, int whence); int seek_shared(MPI_Offset offset, int whence); + int set_view(MPI_Offset disp, MPI_Datatype etype, MPI_Datatype filetype, const char *datarep, MPI_Info info); + int get_view(MPI_Offset *disp, MPI_Datatype *etype, MPI_Datatype *filetype, char *datarep); MPI_Info info(); void set_info( MPI_Info info); static int read(MPI_File fh, void *buf, int count,MPI_Datatype datatype, MPI_Status *status); -- 2.20.1