Newer
Older
#include "MpiEnvironment.hpp"
#include <utility>
void MpiEnvironment::swap(MpiEnvironment& first,
MpiEnvironment& second) noexcept {
using std::swap;
swap(first._worldRank, second._worldRank);
swap(first._worldSize, second._worldSize);
swap(first._isMaster, second._isMaster);
}
MpiEnvironment::MpiEnvironment(int& argc, char* argv[]) {
MPI_Init(&argc, &argv);
_worldRank = [] { int r; MPI_Comm_rank(MPI_COMM_WORLD, &r); return static_cast<std::size_t>(r); }();
_worldSize = [] { int s; MPI_Comm_size(MPI_COMM_WORLD, &s); return static_cast<std::size_t>(s); }();
// We want the program to stop on I/O errors
MPI_File_set_errhandler(MPI_FILE_NULL, MPI_ERRORS_ARE_FATAL);
}
MpiEnvironment::~MpiEnvironment() {
if (_worldRank != std::numeric_limits<std::size_t>::max()) { MPI_Finalize(); }