21#include <kassert/kassert.hpp>
24#include "kamping/communicator.hpp"
27#include "kamping/implementation_helpers.hpp"
33#include "kamping/p2p/helpers.hpp"
34#include "kamping/p2p/probe.hpp"
36#include "kamping/request.hpp"
38#include "kamping/status.hpp"
80 template <
typename...>
81 typename DefaultContainerType,
82 template <
typename,
template <
typename...>
typename>
84template <
typename recv_value_type_tparam ,
typename... Args>
93 internal::select_parameter_type_or_default<internal::ParameterType::recv_buf, default_recv_buf_type>(
100 !std::is_same_v<recv_value_type, internal::unused_tparam>,
101 "No recv_buf parameter provided and no receive value given as template parameter. One of these is required."
104 auto&&
recv_type = internal::determine_mpi_recv_datatype<recv_value_type, decltype(recv_buf)>(
args...);
109 internal::select_parameter_type_or_default<internal::ParameterType::request, default_request_param>(
117 internal::select_parameter_type_or_default<internal::ParameterType::source, default_source_buf_type>(
125 internal::select_parameter_type_or_default<internal::ParameterType::tag, default_tag_buf_type>({},
args...);
127 constexpr auto tag_type = std::remove_reference_t<
decltype(
tag_param)>::tag_type;
140 internal::select_parameter_type_or_default<internal::ParameterType::recv_count, default_recv_count_type>(
144 .construct_buffer_or_rebind();
167 "Recv buffer is not large enough to hold all received elements.",
177 internal::select_parameter_type_in_tuple<internal::ParameterType::recv_buf>(*
buffers_on_heap)
179 internal::select_parameter_type_in_tuple<internal::ParameterType::recv_count>(*
buffers_on_heap)
180 .get_single_element(),
181 internal::select_parameter_type_in_tuple<internal::ParameterType::recv_type>(*
buffers_on_heap)
182 .get_single_element(),
185 this->mpi_communicator(),
188 this->mpi_error_hook(
err,
"MPI_Irecv");
Wrapper for MPI functions that don't require a communicator. If the template parameter init_finalize_...
Definition environment.hpp:52
STL-compatible allocator for requesting memory using the builtin MPI allocator.
Definition allocator.hpp:32
T value_type
The value type.
Definition allocator.hpp:53
Wrapper for MPI_Status.
Definition status.hpp:28
constexpr int light
Assertion level for lightweight assertions.
Definition assertion_levels.hpp:13
auto status_out()
Constructs a status object internally, which may then be retrieved from kamping::MPIResult returned b...
Definition status_parameters.hpp:43
static constexpr auto alloc_new
Convenience wrapper for creating library allocated containers. See AllocNewT for details.
Definition data_buffer.hpp:194
auto tag(internal::any_tag_t)
Indicates to use MPI_ANY_TAG as tag in the underlying call.
Definition named_parameters.hpp:1064
auto source(int rank)
Passes rank as source rank to the underlying call. This parameter is needed in point-to-point exchang...
Definition named_parameters.hpp:1028
auto request()
Internally allocate a request object and return it to the user.
Definition named_parameters.hpp:1122
auto recv_buf(Container &&container)
Passes a container, into which the received elements will be written, to the underlying call....
Definition named_parameters.hpp:859
auto recv_count(int count)
Passes count as recv count to the underlying call.
Definition named_parameters.hpp:490
auto recv_type(MPI_Datatype recv_type)
Passes recv_type as recv type to the underlying call.
Definition named_parameters.hpp:1238
auto recv_count_out()
Indicates to deduce the recv count and return it to the caller as part of the underlying call's resul...
Definition named_parameters.hpp:516
auto irecv(Args... args) const
Definition irecv.hpp:85
Utility that maps C++ types to types that can be understood by MPI.
Template magic to check named parameters passed to wrappers at compile time.
#define KAMPING_REQUIRED_PARAMETERS(...)
Wrapper to pass (possibly empty) list of parameter type names as required parameters to KAMPING_CHECK...
Definition named_parameter_check.hpp:52
#define KAMPING_OPTIONAL_PARAMETERS(...)
Wrapper to pass (possibly empty) list of parameter type names as optional parameters to KAMPING_CHECK...
Definition named_parameter_check.hpp:58
#define KAMPING_CHECK_PARAMETERS(args, required, optional)
Assertion macro that checks if passed parameters are correct, i.e., all parameter types are unique,...
Definition named_parameter_check.hpp:80
Template magic to implement named parameters in cpp.
File containing the parameter types used by the KaMPIng library.
Factory methods for buffer wrappers.
@ value
holds an actual value
@ null
holds MPI_PROC_NULL
constexpr bool is_valid_rank_in_comm(RankDataBufferClass const &rank_data_buffer, Comm const &comm, bool const allow_null=false, bool const allow_any=false)
Checks whether a RankDataBuffer contains a valid rank in the given communicator.
Definition implementation_helpers.hpp:30
static constexpr bool has_to_be_computed
Checks if the buffer has to be computed by kamping, i.e. if it is an output parameter or the buffer h...
Definition named_parameter_check.hpp:398
auto make_nonblocking_result(RequestDataBuffer &&request, std::unique_ptr< std::tuple< Buffers... > > buffers_on_heap)
Factory for creating a kamping::NonBlockingResult.
Definition result.hpp:1308
Parameter objects return by named parameter factory functions.
Some functions and types simplifying/enabling the development of wrapped MPI calls in KaMPIng.