TRIQS/mpi
2.0.0
C++ interface to MPI
Toggle main menu visibility
Loading...
Searching...
No Matches
array.hpp
Go to the documentation of this file.
1
// Copyright (c) 2019-2024 Simons Foundation
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0.txt
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
//
15
// Authors: Thomas Hahn, Olivier Parcollet, Nils Wentzell
16
21
22
#pragma once
23
24
#include "
./communicator.hpp
"
25
#include "
./ranges.hpp
"
26
#include "
./utils.hpp
"
27
28
#include <mpi.h>
29
30
#include <array>
31
#include <cstddef>
32
#include <type_traits>
33
#include <utility>
34
35
namespace
mpi {
36
41
53
template
<
typename
T, std::
size_t
N>
void
mpi_broadcast
(std::array<T, N> &arr,
communicator
c = {},
int
root = 0) {
broadcast_range
(arr, c, root); }
54
73
template
<
typename
T, std::
size_t
N>
74
auto
mpi_reduce
(std::array<T, N>
const
&arr,
communicator
c = {},
int
root = 0,
bool
all =
false
, MPI_Op op = MPI_SUM) {
75
using
value_t = std::remove_cvref_t<decltype(reduce(std::declval<T>()))>;
76
std::array<value_t, N> res{};
77
reduce_range
(arr, res, c, root, all, op);
78
return
res;
79
}
80
98
template
<
typename
T1, std::
size_t
N1,
typename
T2, std::
size_t
N2>
99
void
mpi_reduce_into
(std::array<T1, N1>
const
&arr_in, std::array<T2, N2> &arr_out,
communicator
c = {},
int
root = 0,
bool
all =
false
,
100
MPI_Op op = MPI_SUM) {
101
reduce_range
(arr_in, arr_out, c, root, all, op);
102
}
103
105
106
}
// namespace mpi
mpi::communicator
C++ wrapper around MPI_Comm providing various convenience functions.
Definition
communicator.hpp:51
communicator.hpp
Provides a C++ wrapper class for an MPI_Comm object.
mpi::mpi_reduce
auto mpi_reduce(std::array< T, N > const &arr, communicator c={}, int root=0, bool all=false, MPI_Op op=MPI_SUM)
Implementation of an MPI reduce for a std::array.
Definition
array.hpp:74
mpi::mpi_reduce_into
void mpi_reduce_into(std::array< T1, N1 > const &arr_in, std::array< T2, N2 > &arr_out, communicator c={}, int root=0, bool all=false, MPI_Op op=MPI_SUM)
Implementation of an MPI reduce for a std::array that reduces directly into an existing output array.
Definition
array.hpp:99
mpi::reduce_range
void reduce_range(R1 &&in_rg, R2 &&out_rg, communicator c={}, int root=0, bool all=false, MPI_Op op=MPI_SUM)
Implementation of an MPI reduce for std::ranges::sized_range objects.
Definition
ranges.hpp:119
mpi::broadcast_range
void broadcast_range(R &&rg, communicator c={}, int root=0)
Implementation of an MPI broadcast for std::ranges::sized_range objects.
Definition
ranges.hpp:69
mpi::mpi_broadcast
void mpi_broadcast(std::array< T, N > &arr, communicator c={}, int root=0)
Implementation of an MPI broadcast for a std::array.
Definition
array.hpp:53
ranges.hpp
Provides an MPI broadcast, reduce, scatter and gather for generic ranges.
utils.hpp
Provides general utilities related to MPI.
mpi
array.hpp
Generated by
1.17.0