X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1a0f3d7e2faa40568117c3981dcbb205e450db6d..8aa45aa966b01c54b5cc2a2a3826e44c55bde174:/src/smpi/include/smpi_file.hpp diff --git a/src/smpi/include/smpi_file.hpp b/src/smpi/include/smpi_file.hpp index 2283564864..ddd0cffa8f 100644 --- a/src/smpi/include/smpi_file.hpp +++ b/src/smpi/include/smpi_file.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2019. The SimGrid Team. +/* Copyright (c) 2010-2020. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -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_; @@ -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, const 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); @@ -52,9 +57,10 @@ class File{ static int write_ordered(MPI_File fh, const void *buf, int count,MPI_Datatype datatype, MPI_Status *status); template int op_all(void *buf, int count,MPI_Datatype datatype, MPI_Status *status); static int close(MPI_File *fh); - static int del(const char *filename, MPI_Info info); + 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 */ @@ -71,7 +77,7 @@ class File{ int size = comm_->size(); int rank = comm_-> rank(); MPI_Offset min_offset = file_->tell(); - MPI_Offset max_offset = (min_offset + count * datatype->size());//cheating, as we don't care about exact data location, we can skip extent + MPI_Offset max_offset = min_offset + count * datatype->get_extent();//cheating, as we don't care about exact data location, we can skip extent MPI_Offset* min_offsets = new MPI_Offset[size]; MPI_Offset* max_offsets = new MPI_Offset[size]; simgrid::smpi::colls::allgather(&min_offset, 1, MPI_OFFSET, min_offsets, 1, MPI_OFFSET, comm_);