29 MPI_Init(&argc, &argv);
51 MPI_Initialized(&mpi_init);
68 using U = std::remove_const_t<T>;
69 if constexpr (std::is_same_v<U, bool>)
73 if constexpr (std::is_same_v<U, char>)
77 if constexpr (std::is_same_v<U, double>)
81 if constexpr (std::is_same_v<U, float>)
85 if constexpr (std::is_same_v<U, int>)
89 if constexpr (std::is_same_v<U, std::size_t>)
91 return MPI_UNSIGNED_LONG;
93 if constexpr (std::is_same_v<U, unsigned int>)
102 std::vector<T> result(mpi.
size);
111static std::vector<T>
allgather(std::vector<T>
const& vector,
Mpi const& mpi)
113 std::size_t
const size = vector.size();
115 std::vector<T> result(mpi.
size * size);
117 MPI_Allgather(vector.data(), size,
mpiType<T>(), result.data(), size,
124static T
allreduce(T
const& value, MPI_Op
const& mpi_op,
Mpi const& mpi)
133static std::vector<T>
allreduce(std::vector<T>
const& vector,
134 MPI_Op
const& mpi_op,
Mpi const& mpi)
136 std::size_t
const size = vector.size();
137 std::vector<T> result(vector.size());
139 MPI_Allreduce(vector.data(), result.data(), size,
mpiType<T>(), mpi_op,
146 MPI_Op
const& mpi_op,
149 MPI_Allreduce(MPI_IN_PLACE,
161 std::span<T>
const send_buffer,
162 std::vector<std::remove_const_t<T>>& receive_buffer,
166 int const size =
static_cast<int>(send_buffer.size());
169 std::vector<int>
const sizes =
allgather(size, mpi);
175 receive_buffer.resize(offsets.back());
177 MPI_Allgatherv(send_buffer.data(), size,
mpiType<T>(),
178 receive_buffer.data(), sizes.data(), offsets.data(),
static int reduceMin(int const val)
static void allreduceInplace(std::vector< T > &vector, MPI_Op const &mpi_op, Mpi const &mpi)
static std::vector< int > allgatherv(std::span< T > const send_buffer, std::vector< std::remove_const_t< T > > &receive_buffer, Mpi const &mpi)
static T allreduce(T const &value, MPI_Op const &mpi_op, Mpi const &mpi)
constexpr MPI_Datatype mpiType()
static std::vector< T > allgather(T const &value, Mpi const &mpi)
std::vector< ranges::range_value_t< R > > sizesToOffsets(R const &sizes)
Mpi(MPI_Comm const communicator=MPI_COMM_WORLD)
Setup(int argc, char *argv[])