2 #ifndef SION_CXX_MPI_HPP_ 3 #define SION_CXX_MPI_HPP_ 14 #include "sion_cxx_base.hpp" 23 SIONFile(std::string sion_file_name, std::string mode =
"bw",
24 int num_files = 1,
int global_rank = 0, MPI_Comm gComm=MPI_COMM_WORLD, MPI_Comm lComm=MPI_COMM_WORLD);
31 char * getNewSionFileName()
const;
40 void setLocalCommunicator(MPI_Comm lComm);
41 MPI_Comm getLocalCommunicator()
const;
43 void setGlobalCommunicator(MPI_Comm gComm);
44 MPI_Comm getGlobalCommunicator()
const;
46 void setGlobalRank(
int global_rank);
47 int getGlobalRank()
const;
58 template<
typename dataT>
59 void read(dataT * data);
62 template<
typename dataT>
63 void read(dataT * data,
int unit,
int length);
67 void write(T & data,
int unit,
int length);
69 template<
typename outT>
72 template<
typename inT>
75 void ensureFreeSpace(
long numbytes);
79 char * _new_sion_file_name;
86 void SIONFile::write(T data) {
89 sion_fwrite(reinterpret_cast<char*>(&data),
sizeof(data), 1, _sid);
95 void SIONFile::write(T & data,
int unit,
int length) {
99 sion_coll_fwrite_mpi((
void *) data.data(), unit, length, _sid);
102 template<
typename outT>
103 SIONFile& operator<<(SIONFile & sf,
const outT& rhs) {
108 template<
typename dataT>
109 void SIONFile::read(dataT * data) {
113 _return_code =
sion_fread(data,
sizeof(tmp), 1, _sid);
117 template<
typename dataT>
118 void SIONFile::read(dataT * data,
int unit,
int length) {
119 sion_coll_fread_mpi(data, unit, length, _sid);
122 template<
typename inT>
123 SIONFile& operator>>(SIONFile & sf, inT & rhs) {
size_t sion_fwrite(const void *data, size_t size, size_t nitems, int sid)
Write data to sion file.
size_t sion_fread(void *data, size_t size, size_t nitems, int sid)
Read data from sion file.