From fc32f3e875af8416000c66c43e93fc5170a9b083 Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Tue, 18 Jul 2023 18:05:15 -0700 Subject: [PATCH] Use MPI_IN_PLACE (#3428) --- Src/Base/AMReX_ParallelReduce.H | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Src/Base/AMReX_ParallelReduce.H b/Src/Base/AMReX_ParallelReduce.H index 660185404fc..2133271b5df 100644 --- a/Src/Base/AMReX_ParallelReduce.H +++ b/Src/Base/AMReX_ParallelReduce.H @@ -36,14 +36,15 @@ namespace detail { inline void Reduce (ReduceOp op, T* v, int cnt, int root, MPI_Comm comm) { auto mpi_op = mpi_ops[static_cast(op)]; // NOLINT - Vector tmp(v, v+cnt); if (root == -1) { // TODO: add BL_COMM_PROFILE commands - MPI_Allreduce(tmp.data(), v, cnt, ParallelDescriptor::Mpi_typemap::type(), + MPI_Allreduce(MPI_IN_PLACE, v, cnt, ParallelDescriptor::Mpi_typemap::type(), mpi_op, comm); } else { // TODO: add BL_COMM_PROFILE commands - MPI_Reduce(tmp.data(), v, cnt, ParallelDescriptor::Mpi_typemap::type(), + const auto* sendbuf = (ParallelDescriptor::MyProc(comm) == root) ? + (void const*)(MPI_IN_PLACE) : (void const*) v; + MPI_Reduce(sendbuf, v, cnt, ParallelDescriptor::Mpi_typemap::type(), mpi_op, root, comm); } }