diff --git a/BaseLib/MPI.h b/BaseLib/MPI.h index 8939563ae2cd0e022df78155f321aef1203ba452..891b81f98b3042de61674c8151e7e7a88d978e6d 100644 --- a/BaseLib/MPI.h +++ b/BaseLib/MPI.h @@ -112,6 +112,18 @@ static T allreduce(T const& value, MPI_Op const& mpi_op, Mpi const& mpi) return result; } +template <typename T> +static std::vector<T> allreduce(std::vector<T> const& vector, + MPI_Op const& mpi_op, Mpi const& mpi) +{ + std::size_t const size = vector.size(); + std::vector<T> result(vector.size()); + + MPI_Allreduce(vector.data(), result.data(), size, mpiType<T>(), mpi_op, + mpi.communicator); + return result; +} + template <typename T> static void allreduceInplace(std::vector<T>& vector, MPI_Op const& mpi_op,