4 #include "../constants.h"
15 typedef MPI_Offset offset;
23 rdonly = MPI_MODE_RDONLY,
25 wronly = MPI_MODE_WRONLY,
26 create = MPI_MODE_CREATE,
27 exclusive = MPI_MODE_EXCL,
28 delete_on_close = MPI_MODE_DELETE_ON_CLOSE,
29 unique_open = MPI_MODE_UNIQUE_OPEN,
30 sequential = MPI_MODE_SEQUENTIAL,
31 append = MPI_MODE_APPEND
35 inline file(
const communicator& comm,
const std::string& filename,
int mode);
39 inline offset size()
const;
40 inline void resize(offset size);
42 inline void read_at(offset o,
char* buffer,
size_t size);
43 inline void read_at_all(offset o,
char* buffer,
size_t size);
44 inline void write_at(offset o,
const char* buffer,
size_t size);
45 inline void write_at_all(offset o,
const char* buffer,
size_t size);
48 inline void read_at(offset o, std::vector<T>& data);
51 inline void read_at_all(offset o, std::vector<T>& data);
54 inline void write_at(offset o,
const std::vector<T>& data);
57 inline void write_at_all(offset o,
const std::vector<T>& data);
60 comm()
const {
return comm_; }
62 MPI_File& handle() {
return fh; }
73 file(
const communicator& comm__,
const std::string& filename,
int mode)
77 MPI_File_open(comm__, const_cast<char*>(filename.c_str()), mode, MPI_INFO_NULL, &fh);
82 DIY_UNSUPPORTED_MPI_CALL(MPI_File_open);
91 if (fh != MPI_FILE_NULL)
102 MPI_File_get_size(fh, &sz);
105 DIY_UNSUPPORTED_MPI_CALL(MPI_File_get_size);
111 resize(diy::mpi::io::offset size_)
114 MPI_File_set_size(fh, size_);
117 DIY_UNSUPPORTED_MPI_CALL(MPI_File_set_size);
123 read_at(offset o,
char* buffer,
size_t size_)
127 MPI_File_read_at(fh, o, buffer, static_cast<int>(size_), detail::get_mpi_datatype<char>(), &s.s);
132 DIY_UNSUPPORTED_MPI_CALL(MPI_File_read_at);
139 read_at(offset o, std::vector<T>& data)
141 read_at(o, &data[0], data.size()*
sizeof(T));
146 read_at_all(offset o,
char* buffer,
size_t size_)
150 MPI_File_read_at_all(fh, o, buffer, static_cast<int>(size_), detail::get_mpi_datatype<char>(), &s.s);
155 DIY_UNSUPPORTED_MPI_CALL(MPI_File_read_at_all);
162 read_at_all(offset o, std::vector<T>& data)
164 read_at_all(o, (
char*) &data[0], data.size()*
sizeof(T));
169 write_at(offset o,
const char* buffer,
size_t size_)
173 MPI_File_write_at(fh, o, (
void *)buffer, static_cast<int>(size_), detail::get_mpi_datatype<char>(), &s.s);
178 DIY_UNSUPPORTED_MPI_CALL(MPI_File_write_at);
185 write_at(offset o,
const std::vector<T>& data)
187 write_at(o, (
const char*) &data[0], data.size()*
sizeof(T));
192 write_at_all(offset o,
const char* buffer,
size_t size_)
196 MPI_File_write_at_all(fh, o, (
void *)buffer, static_cast<int>(size_), detail::get_mpi_datatype<char>(), &s.s);
201 DIY_UNSUPPORTED_MPI_CALL(MPI_File_write_at_all);
208 write_at_all(offset o,
const std::vector<T>& data)
210 write_at_all(o, &data[0], data.size()*
sizeof(T));
Wraps MPI file IO.
Definition: io.hpp:18
Simple wrapper around MPI_Comm.
Definition: communicator.hpp:8