28namespace nda::detail {
33 auto mpi_gather_shape_impl(A
const &a, mpi::communicator comm,
int root,
bool all) {
34 auto dims = a.shape();
35 dims[0] = mpi::all_reduce(dims[0], comm);
82 template <
typename A1,
typename A2>
85 void mpi_gather_into(A1 const &a_in, A2 &&a_out, mpi::communicator comm = {},
int root = 0,
bool all =
false) {
87 EXPECTS_WITH_MESSAGE(detail::have_mpi_equal_shapes(a_in(nda::range(1),
nda::ellipsis{}), comm),
88 "Error in nda::mpi_gather_into: Shapes of arrays/views must be equal save the first one");
91 auto dims = detail::mpi_gather_shape_impl(a_in, comm, root,
all);
94 detail::check_layout_mpi_compatible(a_in,
"mpi_gather_into");
95 bool const receives = (
all || (comm.rank() == root));
97 detail::check_layout_mpi_compatible(a_out,
"mpi_gather_into");
102 auto a_in_span = std::span{a_in.data(),
static_cast<std::size_t
>(a_in.size())};
103 auto a_out_span = std::span{a_out.data(),
static_cast<std::size_t
>(a_out.size())};
104 mpi::gather_range(a_in_span, a_out_span, comm, root,
all);
125 template <
typename A>
127 auto mpi_gather(A
const &a, mpi::communicator comm = {},
int root = 0,
bool all =
false) {
130 mpi::gather_into(a, a_out, comm, root,
all);
Provides utility functions for std::array.
Provides basic functions to create and manipulate arrays and views.
Provides concepts for the nda library.
Provides various convenient aliases and helper functions for nda::basic_array and nda::basic_array_vi...
bool all(A const &a)
Do all elements of the array evaluate to true?
void resize_or_check_if_view(A &a, std::array< long, A::rank > const &sha)
Resize a given regular array to the given shape or check if a given view as the correct shape.
auto mpi_gather(A const &a, mpi::communicator comm={}, int root=0, bool all=false)
Implementation of an MPI gather for nda::basic_array or nda::basic_array_view types.
void mpi_gather_into(A1 const &a_in, A2 &&a_out, mpi::communicator comm={}, int root=0, bool all=false)
Implementation of an MPI gather for nda::basic_array or nda::basic_array_view types that gathers dire...
decltype(basic_array{std::declval< T >()}) get_regular_t
Get the type of the nda::basic_array that would be obtained by constructing an array from a given typ...
constexpr bool is_regular_or_view_v
Constexpr variable that is true if type A is either a regular array or a view.
constexpr std::array< T, R > make_initialized_array(T v)
Create a new std::array object initialized with a specific value.
Macros used in the nda library.
Provides various utility functions used by the MPI interface of nda.
Includes the itertools header and provides some additional utilities.
Mimics Python's ... syntax.
Provides type traits for the nda library.