Line |
Branch |
Exec |
Source |
1 |
|
|
// SPDX-FileCopyrightText: 2022-2023 Dennis Gläser <dennis.glaeser@iws.uni-stuttgart.de> |
2 |
|
|
// SPDX-License-Identifier: MIT |
3 |
|
|
/*! |
4 |
|
|
* \file |
5 |
|
|
* \ingroup Parallel |
6 |
|
|
* \brief Interface for parallel communication. |
7 |
|
|
*/ |
8 |
|
|
#ifndef GRIDFORMAT_PARALLEL_COMMUNICATION_HPP_ |
9 |
|
|
#define GRIDFORMAT_PARALLEL_COMMUNICATION_HPP_ |
10 |
|
|
|
11 |
|
|
#include <gridformat/parallel/traits.hpp> |
12 |
|
|
#include <gridformat/parallel/concepts.hpp> |
13 |
|
|
|
14 |
|
|
namespace GridFormat::Parallel { |
15 |
|
|
|
16 |
|
|
//! \addtogroup Parallel |
17 |
|
|
//! \{ |
18 |
|
|
|
19 |
|
|
//! Return the number of processes in a communication |
20 |
|
|
template<Concepts::Communicator C> |
21 |
|
54974 |
inline int size(const C& comm) { |
22 |
|
54974 |
return ParallelTraits::Size<C>::get(comm); |
23 |
|
|
} |
24 |
|
|
|
25 |
|
|
//! Return the rank of a processes in a communication |
26 |
|
|
template<Concepts::Communicator C> |
27 |
|
23597 |
inline int rank(const C& comm) { |
28 |
|
23597 |
return ParallelTraits::Rank<C>::get(comm); |
29 |
|
|
} |
30 |
|
|
|
31 |
|
|
//! Return a barrier |
32 |
|
|
template<Concepts::Communicator C> |
33 |
|
12680 |
inline int barrier(const C& comm) { |
34 |
|
12680 |
return ParallelTraits::Barrier<C>::get(comm); |
35 |
|
|
} |
36 |
|
|
|
37 |
|
|
//! Return the maximum of the given values over all processes |
38 |
|
|
template<Concepts::MaxCommunicator C, typename T> |
39 |
|
1 |
inline auto max(const C& comm, const T& values, int root = 0) { |
40 |
|
1 |
return ParallelTraits::Max<C>::get(comm, values, root); |
41 |
|
|
} |
42 |
|
|
|
43 |
|
|
//! Return the minimum of the given values over all processes |
44 |
|
|
template<Concepts::MinCommunicator C, typename T> |
45 |
|
1 |
inline auto min(const C& comm, const T& values, int root = 0) { |
46 |
|
1 |
return ParallelTraits::Min<C>::get(comm, values, root); |
47 |
|
|
} |
48 |
|
|
|
49 |
|
|
//! Return the sum of the given values over all processes |
50 |
|
|
template<Concepts::SumCommunicator C, typename T> |
51 |
|
689 |
inline auto sum(const C& comm, const T& values, int root = 0) { |
52 |
|
689 |
return ParallelTraits::Sum<C>::get(comm, values, root); |
53 |
|
|
} |
54 |
|
|
|
55 |
|
|
//! Broadcast values from the root to all other processes |
56 |
|
|
template<Concepts::SumCommunicator C, typename T> |
57 |
|
19109 |
inline auto broadcast(const C& comm, const T& values, int root = 0) { |
58 |
|
19109 |
return ParallelTraits::BroadCast<C>::get(comm, values, root); |
59 |
|
|
} |
60 |
|
|
|
61 |
|
|
//! Gather values from all processes to the root process |
62 |
|
|
template<Concepts::SumCommunicator C, typename T> |
63 |
|
26874 |
inline auto gather(const C& comm, const T& values, int root = 0) { |
64 |
|
26874 |
return ParallelTraits::Gather<C>::get(comm, values, root); |
65 |
|
|
} |
66 |
|
|
|
67 |
|
|
//! Scatter values from the root to all other processes |
68 |
|
|
template<Concepts::SumCommunicator C, typename T> |
69 |
|
7065 |
inline auto scatter(const C& comm, const T& values, int root = 0) { |
70 |
|
7065 |
return ParallelTraits::Scatter<C>::get(comm, values, root); |
71 |
|
|
} |
72 |
|
|
|
73 |
|
|
//! \} group Parallel |
74 |
|
|
|
75 |
|
|
} // namespace GridFormat::Parallel |
76 |
|
|
|
77 |
|
|
#endif // GRIDFORMAT_PARALLEL_COMMUNICATION_HPP_ |
78 |
|
|
|