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"
37#include "kamping/status.hpp"
78 template <
typename...>
79 typename DefaultContainerType,
80 template <
typename,
template <
typename...>
typename>
82template <
typename recv_value_type_tparam ,
typename... Args>
92 internal::select_parameter_type_or_default<internal::ParameterType::recv_buf, default_recv_buf_type>(
104 !std::is_same_v<recv_value_type, internal::unused_tparam>,
105 "No recv_buf parameter provided and no receive value given as template parameter. One of these is required."
108 auto&&
recv_type = internal::determine_mpi_recv_datatype<recv_value_type, decltype(recv_buf)>(
args...);
114 internal::select_parameter_type_or_default<internal::ParameterType::source, default_source_buf_type>(
122 internal::select_parameter_type_or_default<internal::ParameterType::tag, default_tag_buf_type>({},
args...);
124 constexpr auto tag_type = std::remove_reference_t<
decltype(
tag_param)>::tag_type;
136 internal::select_parameter_type_or_default<internal::ParameterType::status, default_status_param_type>(
140 .construct_buffer_or_rebind();
146 internal::select_parameter_type_or_default<internal::ParameterType::recv_count, default_recv_count_type>(
150 .construct_buffer_or_rebind();
173 "Recv buffer is not large enough to hold all received elements.",
184 this->mpi_communicator(),
187 this->mpi_error_hook(
err,
"MPI_Recv");
216 template <
typename...>
218 template <
typename,
template <
typename...>
typename>
230 "You cannot receive an element from source kamping::rank::null."
238 !internal::is_extractable<status_param_type>,
239 "KaMPIng cannot allocate a status object for you here, because we have no way of returning it. Pass a "
240 "reference to a status object instead."
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
auto status(internal::ignore_t< void >)
pass MPI_STATUS_IGNORE to the underlying MPI call.
Definition status_parameters.hpp:52
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 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 recv(Args... args) const
Definition recv.hpp:83
auto recv_single(Args... args) const
Convience wrapper for receiving single values via MPI_Recv.
Definition recv.hpp:221
decltype(auto) select_parameter_type_or_default(std::tuple< DefaultArguments... > default_arguments, Args &... args)
Checks if parameter with requested parameter type exists, if not constructs a default value.
Definition named_parameter_selection.hpp:239
@ source
Tag used to represent the sending PE in a MPI call.
@ status
Tag used to represent the status in a MPI call.
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.
Internal namespace marking the code that is not user-facing.
Definition collectives_helpers.hpp:20
static constexpr bool buffer_uses_serialization
Checks if DataBufferType is a serialization buffer.
Definition named_parameter_check.hpp:415
@ 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
auto make_mpi_result(Buffers &&... buffers)
Construct result object for a wrapped MPI call. Four different cases are handled: a) The recv_buffer ...
Definition result.hpp:1017
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
static MPI_Status * status_param_to_native_ptr(StatusParam ¶m)
returns a pointer to the MPI_Status encapsulated by the provided status parameter object.
Definition parameter_objects.hpp:489
Parameter objects return by named parameter factory functions.
Some functions and types simplifying/enabling the development of wrapped MPI calls in KaMPIng.