KaMPIng 0.1.1
Flexible and (near) zero-overhead C++ bindings for MPI
|
Some functions and types simplifying/enabling the development of wrapped MPI
calls in KaMPIng.
More...
#include <optional>
#include <tuple>
#include <utility>
#include "kamping/has_member.hpp"
#include "kamping/named_parameter_check.hpp"
#include "kamping/named_parameter_filtering.hpp"
#include "kamping/named_parameter_selection.hpp"
#include "kamping/named_parameter_types.hpp"
#include "kamping/named_parameters_detail/status_parameters.hpp"
Go to the source code of this file.
Classes | |
struct | kamping::internal::ResultCategoryNotUsed |
Use this type if one of the template parameters of MPIResult is not used for a specific wrapped MPI call. More... | |
class | kamping::MPIResult< Args > |
MPIResult contains the result of a MPI call wrapped by KaMPIng. More... | |
struct | std::tuple_size< kamping::MPIResult< Args... > > |
Specialization of the std::tuple_size for kamping::MPIResult. Part of the structured binding machinery. More... | |
struct | std::tuple_element< index, kamping::MPIResult< Args... > > |
Specialization of the std::tuple_element for kamping::MPIResult. Part of the structured binding machinery. More... | |
struct | kamping::internal::PredicateForResultObject |
Predicate to check whether a buffer provided to make_mpi_result() shall be discard or returned in the result object. More... | |
struct | kamping::internal::DiscardSerializationBuffers |
Predicate to check whether a buffer provided to make_mpi_result() shall be discard or returned in the result object, including a hotfix for serialization. More... | |
struct | kamping::internal::PrependParameterType< ptype, Tuple > |
Template class to prepend the ParameterTypeEntry<ParameterType::ptype> type to a given std::tuple. More... | |
class | kamping::NonBlockingResult< CallerProvidedArgs, RequestDataBuffer, Buffers > |
NonBlockingResult contains the result of a non-blocking MPI call wrapped by KaMPIng. It encapsulates a kamping::Request and stores the buffers associated with the non-blocking call. Upon completion the owning out-buffers among all associated buffers are returned wrappend in an MPIResult object. More... | |
Namespaces | |
namespace | kamping::internal |
Internal namespace marking the code that is not user-facing. | |
namespace | std |
STL namespace. | |
Typedefs | |
using | kamping::internal::parameter_types_to_ignore_for_result_object |
List of parameter type (entries) which should not be included in the result object. | |
Functions | |
template<typename CallerProvidedOwningOutBuffers > | |
constexpr bool | kamping::internal::return_recv_or_send_recv_buffer_only () |
Determines whether only the recv (send_recv) buffer or multiple different buffers will be returned. | |
template<typename... Buffers> | |
constexpr ParameterType | kamping::internal::determine_recv_buffer_type () |
Checks whether a buffer with parameter type recv_buf or a buffer with type send_recv_buf is present and returns the found parameter type. Note that we require that either a recv_buf or a send_recv_buf is present. | |
template<typename... Buffers> | |
constexpr bool | kamping::internal::has_recv_or_send_recv_buf () |
Returns True iff only a recv or send_recv buffer is present. Communicator::ibarrier()). | |
template<typename CallerProvidedOwningOutBuffers , typename... Buffers> | |
constexpr bool | kamping::internal::return_send_buf_out_only () |
Determines whether only the send buffer should be returned. This may happen if ownership of the send buffer is transfered to the call. | |
template<typename CallerProvidedArgs , typename... Buffers> | |
auto | kamping::internal::make_mpi_result (Buffers &&... buffers) |
Construct result object for a wrapped MPI call. Four different cases are handled: a) The recv_buffer owns its underlying data (i.e. the received data has to be returned via the result object): | |
template<typename ParameterTypeTuple , typename... Buffers, std::size_t... i> | |
auto | kamping::internal::impl::make_mpi_result_from_tuple (std::tuple< Buffers... > &buffers, std::index_sequence< i... >) |
Implementation helper function to enable the construction of an MPIResult object also if the buffers are stored inside a std::tuple. See make_mpi_result_from_tuple() for more details. | |
template<typename CallerProvidedArgs , typename... Buffers> | |
auto | kamping::internal::make_mpi_result_from_tuple (std::tuple< Buffers... > &buffers) |
Wrapper function to enable the construction of an MPIResult object also if the buffers are stored inside a std::tuple. See make_mpi_result() for more details. | |
template<typename... Buffers> | |
auto | kamping::internal::move_buffer_to_heap (Buffers &&... buffers) |
Moves given buffers into a std::tuple wrapped with an std::unique_ptr on the heap. | |
template<typename CallerProvidedArgsInTuple , typename RequestDataBuffer , typename... Buffers> | |
auto | kamping::internal::make_nonblocking_result (RequestDataBuffer &&request, std::unique_ptr< std::tuple< Buffers... > > buffers_on_heap) |
Factory for creating a kamping::NonBlockingResult. | |
template<typename RequestDataBuffer > | |
auto | kamping::internal::make_nonblocking_result (RequestDataBuffer &&request) |
Factory for creating a kamping::NonBlockingResult. | |
Variables | |
template<typename T > | |
constexpr bool | kamping::internal::has_extract_v = has_member_extract_v<T> |
has_extract_v is true iff type T has a member function extract() . | |
template<typename Buffer > | |
constexpr bool | kamping::internal::is_extractable = Buffer::is_owning&& Buffer::is_out_buffer |
Helper for implementing the extract_* functions in MPIResult. Is true if the passed buffer type owns its underlying storage and is an output buffer. | |
template<typename > | |
constexpr bool | kamping::is_mpi_result_v = false |
Trait for checking whether a type is an MPIResult. | |
template<typename... Args> | |
constexpr bool | kamping::is_mpi_result_v< MPIResult< Args... > > = true |
Trait for checking whether a type is an MPIResult. | |
template<typename T > | |
constexpr bool | kamping::is_result_empty_v = false |
Primary template for result trait indicates whether the result object is empty. | |
template<typename... Args> | |
constexpr bool | kamping::is_result_empty_v< MPIResult< Args... > > = MPIResult<Args...>::is_empty |
Template specialization for result trait indicates whether the result object is empty. | |
template<> | |
constexpr bool | kamping::is_result_empty_v< void > = true |
Template specialization for result trait indicates whether the result object is empty. | |
template<typename , typename = void> | |
constexpr bool | kamping::internal::has_data_buffer_type_member = false |
Helper to check if a type T has a member type T::DataBufferType . | |
Some functions and types simplifying/enabling the development of wrapped MPI
calls in KaMPIng.