91 int number_of_elements,
92 MPI_Comm communicator) {
93 constexpr int max_complex_per_call = 1 << 30;
94 const auto* source_doubles =
reinterpret_cast<const double*
>(source);
95 auto* destination_doubles =
reinterpret_cast<double*
>(destination);
96 for (
int offset = 0; offset < number_of_elements;) {
97 const int chunk = std::min(number_of_elements - offset, max_complex_per_call);
98 const void* send_buffer = source ==
nullptr
100 :
static_cast<const void*
>(source_doubles + 2 * offset);
101 const int status = MPI_Allreduce(send_buffer,
102 destination_doubles + 2 * offset,
107 if (status != MPI_SUCCESS)