44#if !defined INCLUDED_VT_MESSAGING_ACTIVE_H
45#define INCLUDED_VT_MESSAGING_ACTIVE_H
70#if vt_check_enabled(trace_enabled)
77#include <unordered_map>
103static constexpr TagType const PutPackedTag =
104 std::numeric_limits<TagType>::max();
117static constexpr TagType const starting_direct_buffer_tag = 1000;
118static constexpr MsgSizeType const max_pack_direct_size = 512;
143 template <
typename Serializer>
167 template <
typename Serializer>
190 MPI_Request in_req = MPI_REQUEST_NULL
195 bool test(
int& num_mpi_tests) {
200 MPI_Test(&
req, &flag, &stat);
206 MPI_Request
req = MPI_REQUEST_NULL;
217 std::vector<MPI_Request> in_reqs, std::byte*
const in_user_buf,
226 bool test(
int& num_mpi_tests) {
232 MPI_Test(&
reqs[
cur], &flag, &stat);
243 template <
typename Serializer>
281 template <
typename Serializer>
350 std::string
name()
override {
return "ActiveMessenger"; }
364 template <
typename MsgPtrT>
372 template <
typename MsgPtrT>
380 template <
typename MsgPtrT>
388 template <
typename MsgPtrT>
397 template <
typename MsgT>
407 template <
typename MsgT>
416 template <
typename MsgT>
431 std::enable_if_t<
true
432 and not ::vt::messaging::msg_defines_serialize_mode<MsgT>::value,
442#ifndef vt_quirked_serialize_method_detection
444 not ::vt::messaging::has_own_serialize<MsgT>,
445 "Message prohibiting serialization must not have a serialization function."
454 std::enable_if_t<
true
455 and ::vt::messaging::msg_defines_serialize_mode<MsgT>::value
456 and ::vt::messaging::msg_serialization_mode<MsgT>::required,
466#ifndef vt_quirked_serialize_method_detection
468 ::vt::messaging::has_own_serialize<MsgT>,
469 "Message requiring serialization must have a serialization function."
479 std::enable_if_t<
true
480 and ::vt::messaging::msg_defines_serialize_mode<MsgT>::value
481 and ::vt::messaging::msg_serialization_mode<MsgT>::supported,
491#ifndef vt_quirked_serialize_method_detection
493 ::vt::messaging::has_own_serialize<MsgT>,
494 "Message supporting serialization must have a serialization function."
504 std::enable_if_t<
true
505 and ::vt::messaging::msg_defines_serialize_mode<MsgT>::value
506 and ::vt::messaging::msg_serialization_mode<MsgT>::prohibited,
516#ifndef vt_quirked_serialize_method_detection
518 not ::vt::messaging::has_own_serialize<MsgT>,
519 "Message prohibiting serialization must not have a serialization function."
525 template <
typename MsgT>
576 template <
typename MsgT>
577 [[deprecated(
"size must be set in makeMessageSz, use regular sendMsg")]]
598 template <
typename MsgT>
620 template <
typename MsgT>
677 template <
typename MsgT, ActiveTypedFnType<MsgT>* f>
681 bool deliver_to_sender =
true,
696 template <
typename MsgT, ActiveTypedFnType<MsgT>* f>
699 bool deliver_to_sender =
true,
717 bool deliver_to_sender =
true,
720 using MsgT =
typename FuncTraits<
decltype(f)>::MsgT;
735 template <
typename MsgT, ActiveTypedFnType<MsgT>* f>
759 using MsgT =
typename FuncTraits<
decltype(f)>::MsgT;
771 template <
auto f,
typename... Params>
773 using Tuple =
typename FuncTraits<
decltype(f)>::TupleType;
776 msg->setParams(std::forward<Params>(params)...);
788 template <
auto f,
typename... Params>
790 using Tuple =
typename FuncTraits<
decltype(f)>::TupleType;
793 msg->setParams(std::forward<Params>(params)...);
795 constexpr bool deliver_to_sender =
true;
815 template <
typename MsgT, ActiveTypedFnType<MsgT>* f>
816 [[deprecated(
"size must be set in makeMessageSz, use regular sendMsg")]]
836 template <
typename MsgT, ActiveTypedFnType<MsgT>* f>
855 template <
typename MsgT, ActiveTypedFnType<MsgT>* f>
913 template <ActiveFnType* f,
typename MsgT>
916 bool deliver_to_sender =
true,
931 template <ActiveFnType* f,
typename MsgT>
992 bool deliver_to_sender =
true,
1007 template <
typename FunctorT>
1010 bool deliver_to_sender =
true,
1046 template <
typename FunctorT,
typename MsgT>
1064 template <
typename FunctorT>
1154 template <
typename MsgT>
1158 bool deliver_to_sender =
true,
1174 template <
typename MsgT>
1193 template <
typename MsgT, ActiveTypedFnType<MsgT>* f>
1213 template <
typename MsgT>
1323 NodeType const& sender,
bool const& enqueue,
1345 NodeType const& node = uninitialized_destination,
bool const& enqueue =
true,
1366 int nchunks, std::byte*
const user_buf,
TagType const& tag,
1367 NodeType const& node = uninitialized_destination,
bool const& enqueue =
true,
1388 int nchunks, std::byte*
const buf,
TagType const tag,
NodeType const from,
1392 , MPI_Message first_msg = MPI_MESSAGE_NULL,
MsgSizeType first_chunk_bytes = 0
1573 template <
typename MsgT>
1585 template <
typename MsgT>
1601 template <
typename MsgT>
1612 template <
typename MsgT>
1633 template <
typename SerializerT>
1655 # if vt_check_enabled(trace_enabled)
1658 | trace_irecv_polling_am
1659 | trace_irecv_polling_dm
1753 MPI_Request
req = MPI_REQUEST_NULL;
1785 return std::make_tuple(
1792# if vt_check_enabled(trace_enabled)
PendingSendType broadcastMsg(MsgPtrThief< MsgT > msg, bool deliver_to_sender=true, TagType tag=no_tag)
Broadcast a message with a type-safe handler.
PendingSendType sendMsg(NodeType dest, MsgPtrThief< MsgT > msg, TagType tag=no_tag)
Send a message with a type-safe handler.
PendingSendType broadcastMsg(MsgPtrThief< MsgT > msg, bool deliver_to_sender=true, TagType tag=no_tag)
Broadcast a message.
PendingSendType sendMsgAuto(NodeType dest, MsgPtrThief< MsgT > msg, TagType tag=no_tag)
Send a message.
PendingSendType broadcastMsgAuto(MsgPtrThief< MsgT > msg, TagType tag=no_tag)
Broadcast a message.
PendingSendType sendMsg(NodeType dest, MsgPtrThief< MsgT > msg, TagType tag=no_tag)
Send a message with a type-safe handler.
PendingSendType sendMsg(NodeType dest, HandlerType han, MsgPtrThief< MsgT > msg, TagType tag=no_tag)
Send a message with a pre-registered handler.
Definition active.impl.h:199
PendingSendType sendMsgSz(NodeType dest, HandlerType han, MsgPtrThief< MsgT > msg, ByteType msg_size, TagType tag=no_tag)
Send a message with a pre-registered handler.
Definition active.impl.h:210
PendingSendType sendMsgAuto(NodeType dest, HandlerType han, MsgPtrThief< MsgT > msg, TagType tag=no_tag)
Send a message with a pre-registered handler.
Definition active.impl.h:222
PendingSendType broadcast(Params &&... params)
Broadcast parameters to a handler in a message.
Definition active.h:789
PendingSendType broadcastMsg(MsgPtrThief< MsgT > msg, bool deliver_to_sender=true, TagType tag=no_tag)
Broadcast a message.
Definition active.impl.h:250
PendingSendType sendMsg(NodeType dest, MsgPtrThief< typename FuncTraits< decltype(f)>::MsgT > msg, TagType tag=no_tag)
Send a message (message type not required).
Definition active.h:754
PendingSendType send(Node dest, Params &&... params)
Send parameters to a handler in a message.
Definition active.h:772
PendingSendType broadcastMsgAuto(MsgPtrThief< MsgT > msg, TagType tag=no_tag)
Broadcast a message.
Definition active.impl.h:300
PendingSendType broadcastMsgSz(MsgPtrThief< MsgT > msg, ByteType msg_size, bool deliver_to_sender=true, TagType tag=no_tag)
Broadcast a message with an explicit size.
Definition active.impl.h:233
PendingSendType broadcastMsg(MsgPtrThief< typename FuncTraits< decltype(f)>::MsgT > msg, bool deliver_to_sender=true, TagType tag=no_tag)
Broadcast a message (message type not required).
Definition active.h:715
#define VT_ALLOW_MPI_CALLS
Definition mpi_access.h:52
Definition reduce_scope.h:265
HandlerType makeAutoHandlerParam()
runtime::component::meter::CounterGauge< CounterDefaultType, GaugeDefaultType > CounterGauge
Default diagnostic counter/gauge combo.
Definition diagnostic_meter.h:110
runtime::component::meter::Counter< CounterDefaultType > Counter
Default diagnostic counter for counting a value over time.
Definition diagnostic_meter.h:95
MPITag
Definition active.h:106
@ ActiveMsgS
Definition active.h:111
@ ActiveMsgL
Definition active.h:113
@ DataMsgTag
Definition active.h:108
@ ActiveMsgTag
Definition active.h:107
@ ActiveMsgXL
Definition active.h:114
@ ActiveMsgM
Definition active.h:112
int MPI_TagType
Definition active.h:101
uint32_t TraceEventIDType
Definition trace_common.h:62
int64_t UserEventIDType
Definition trace_common.h:65
int32_t TagType
Used to hold an tag, e.g., on messages or reduces.
Definition types_type.h:73
int64_t MsgSizeType
Used for hold the size of a message.
Definition types_type.h:101
messaging::ActiveMsg< Envelope > ShortMessage
Alias to the shortest message available with no epoch or tag allowed.
Definition message.h:211
std::function< void()> ActionType
Used for generically store an action to perform.
Definition types_type.h:125
uint64_t ByteType
Used to store some number of bytes.
Definition types_type.h:83
messaging::ActiveMessenger Active
Definition active.h:1844
std::tuple< std::byte *, ByteType > PtrLenPairType
A pair of a std::byte* and number of bytes (length) for sending data.
Definition active.h:84
uint64_t EventType
Used to hold a local/remote event to wait for completion.
Definition types_type.h:69
MsgPtr< MsgT > makeMessage(Args &&... args)
Create a new message.
Definition shared_message.impl.h:116
TimeTypeWrapper TimeType
Definition timing_type.h:176
PhysicalResourceType NodeType
Used to hold the current node/rank or the number of nodes.
Definition types_type.h:57
int64_t HandlerType
Used to hold a handler ID which identifier a function pointer/context.
Definition types_type.h:63
Strong< NodeType, uninitialized_destination, StrongNodeType > Node
Definition active.h:95
util::strong::detail::Strong< T, init_val, Tag > Strong
Type-alias for strong types.
Definition strong_type.h:195
uint16_t PriorityType
Used for hold the priority of a message.
Definition types_type.h:113
messaging::ActiveMessenger * theMsg()
Definition runtime_get.cc:103
epoch::EpochType EpochType
The strong epoch type for holding a epoch for termination detection.
Definition epoch_type.h:118
std::function< void(PtrLenPairType data, ActionType deleter)> ContinuationDeleterType
A continuation function with an allocated pointer with a deleter function.
Definition active.h:87
Definition fntraits.h:390
A general identifier for a task context. The id is unique in the system.
Definition elm_id.h:67
Definition elm_lb_data.h:59
EventRecord EventRecordType
Definition event.h:89
MPI_Request req
Definition active.h:1753
std::byte * buf
Definition active.h:1752
MPI_TagType tag
Definition active.h:1751
int cap
Definition active.h:1750
bool posted
Definition active.h:1754
Active receive broker that keeps a pool of pre-posted Irecv slots per size-class tag to drain unexpec...
Definition active.h:1748
static constexpr int slots_per_class_
Definition active.h:1770
bool progress(ActiveMessenger *self)
Definition active.cc:1377
static constexpr MPI_TagType tags_[num_caps_]
Definition active.h:1764
void setup(ActiveMessenger *self)
Definition active.cc:1356
static constexpr int caps_[num_caps_]
Definition active.h:1761
void cleanup()
Definition active.cc:1426
void postSlot(ActiveMessenger *self, Slot &s)
Definition active.cc:1323
static constexpr int num_caps_
Definition active.h:1760
std::vector< Slot > slots_
Definition active.h:1763
Core component of VT used to send messages.
Definition active.h:327
auto getRankLBData()
Get the rank-based LB data along with element ID for rank-based work.
Definition active.h:1784
void markAsCollectionMessage(MsgPtrT const msg)
Mark a message as a collection message.
Definition active.impl.h:92
std::function< SendInfo(PtrLenPairType, NodeType, TagType)> SendFnType
Definition active.h:333
diagnostic::Counter amPollCount
Definition active.h:1823
void processActiveMsg(MsgSharedPtr< BaseMsgType > const &base, NodeType const &sender, bool insert, ActionType cont=nullptr)
Process an incoming active message.
Definition active.cc:998
virtual ~ActiveMessenger()
Definition active.cc:170
bool testPendingActiveMsgAsyncRecv()
Test pending MPI request for active message receives.
Definition active.cc:1289
void recordLBDataCommForSend(NodeType const dest, MsgSharedPtr< BaseMsgType > const &base, MsgSizeType const msg_size)
Record LB's data for sending a message.
Definition active.cc:967
void startup() override
Empty default overridden startup method.
Definition active.cc:153
void finishPendingActiveMsgAsyncRecv(InProgressIRecv *irecv)
Called when a VT-MPI message has been received.
Definition active.cc:1221
static MPI_TagType selectActiveTag(MsgSizeType size)
Select an active message tag based on the size of the message.
Definition active.cc:217
RequestHolder< AsyncOpWrapper > in_progress_ops
Definition active.h:1804
diagnostic::Counter tdRecvCount
Definition active.h:1826
PendingSend PendingSendType
Definition active.h:338
std::unordered_map< TagType, PendingRecvType > ContainerPendingType
Definition active.h:335
void registerAsyncOp(std::unique_ptr< AsyncOp > op)
Register a async operation that needs polling.
Definition active.cc:1459
void handleChunkedMultiMsg(MultiMsg *msg)
Handle a control message that coordinates multiple payloads arriving that constitute a contiguous pay...
Definition active.cc:320
diagnostic::CounterGauge amForwardCounterGauge
Definition active.h:1829
std::string name() override
Get the name of the component.
Definition active.h:350
ActiveMessenger::PendingSendType sendMsgCopyableImpl(NodeType dest, HandlerType han, MsgSharedPtr< MsgT > &msg, TagType tag)
Definition active.impl.h:147
NodeType this_node_
Definition active.h:1805
RequestHolder< InProgressDataIRecv > in_progress_data_irecv
Definition active.h:1803
std::function< void(SendFnType)> UserSendFnType
Definition active.h:334
int progress(TimeType current_time) override
Call into the progress engine.
Definition active.cc:1446
void setEpochMessage(MsgT *msg, EpochType epoch)
Set the epoch in the envelope of a message.
Definition active.impl.h:101
diagnostic::CounterGauge dmPostedCounterGauge
Definition active.h:1818
EpochType getEpoch() const
Pop an epoch off the stack.
Definition active.impl.h:468
bool tryProcessIncomingActiveMsg()
Poll MPI to discover an incoming message with a handler.
Definition active.cc:1032
diagnostic::Counter amHandlerCount
Definition active.h:1821
ShortMessage MessageType
Definition active.h:329
trace::TraceEventIDType makeTraceCreationSend(HandlerType const handler, ByteType serialized_msg_size, bool is_bcast)
Definition active.cc:175
ContainerPendingType pending_recvs_
Definition active.h:1800
EpochType setupEpochMsg(MsgT *msg)
Set the epoch on a message.
Definition active.impl.h:506
void finishPendingDataMsgAsyncRecv(InProgressDataIRecv *irecv)
Called when a VT-MPI message has been received.
Definition active.cc:921
BufferedActiveMsg BufferedMsgType
Definition active.h:328
elm::ElementLBData bare_handler_lb_data_
Definition active.h:1833
diagnostic::CounterGauge amSentCounterGauge
Definition active.h:1809
diagnostic::Counter tdSentCount
Definition active.h:1825
diagnostic::CounterGauge dmRecvCounterGauge
Definition active.h:1814
void recvDataDirect(int nchunks, std::byte *const buf, TagType const tag, NodeType const from, MsgSizeType len, PriorityType prio, ActionType dealloc=nullptr, ContinuationDeleterType next=nullptr, bool is_user_buf=false)
Receive data from MPI in multiple chunks.
Definition active.cc:810
diagnostic::CounterGauge dmSentCounterGauge
Definition active.h:1810
std::tuple< HandlerType, TagType > ReadyHanTagType
Definition active.h:336
SendInfo sendData(PtrLenPairType const &ptr, NodeType const &dest, TagType const &tag)
Send raw bytes to a node.
Definition active.cc:543
TagType cur_direct_buffer_tag_
Definition active.h:1801
void prepareActiveMsgToRun(MsgSharedPtr< BaseMsgType > const &base, NodeType const &from_node, bool insert, ActionType cont)
Prepare an active message to run by building a RunnableNew.
Definition active.cc:1167
bool recvDataMsg(int nchunks, TagType const &tag, NodeType const &node, ContinuationDeleterType next=nullptr)
Receive data as bytes from a node.
Definition active.cc:654
EpochType getEpochContextMsg(MsgT *msg)
Get the epoch for a message based on the current context so an subsequent operation on it can be safe...
Definition active.impl.h:473
bool testPendingAsyncOps()
Test pending general asynchronous events.
Definition active.cc:1313
int32_t CountType
Definition active.h:330
EventType doMessageSend(MsgSharedPtr< BaseMsgType > &msg)
Low-level send of a message, handler and other control data should be set already.
Definition active.cc:456
ActiveMessenger::PendingSendType sendMsgImpl(NodeType dest, HandlerType han, MsgSharedPtr< MsgT > &msg, TagType tag)
Definition active.h:436
void serialize(SerializerT &s)
Definition active.h:1634
elm::ElementIDStruct bare_handler_dummy_elm_id_for_lb_data_
Definition active.h:1832
EventType sendMsgBytes(NodeType const &dest, MsgSharedPtr< BaseMsgType > const &base, MsgSizeType const &msg_size, TagType const &send_tag)
Send message as low-level bytes after packing put bytes if needed.
Definition active.cc:413
ActiveMessenger()
Definition active.cc:64
void setTagMessage(MsgT *msg, TagType tag)
Set the tag in the envelope of a message.
Definition active.impl.h:106
bool recvDataMsgBuffer(int nchunks, std::byte *const user_buf, PriorityType priority, TagType const &tag, NodeType const &node=uninitialized_destination, bool const &enqueue=true, ActionType dealloc_user_buf=nullptr, ContinuationDeleterType next=nullptr, bool is_user_buf=false)
Receive data as bytes with a buffer and priority.
Definition active.cc:700
diagnostic::Counter dmPollCount
Definition active.h:1824
void pushEpoch(EpochType const &epoch)
Push an epoch on the stack.
Definition active.impl.h:460
HandlerManager HandlerManagerType
Definition active.h:337
void initialize() override
Empty default overridden initialize method.
Definition active.cc:149
EventType sendMsgMPI(NodeType const &dest, MsgSharedPtr< BaseMsgType > const &base, MsgSizeType const &msg_size, TagType const &send_tag)
Send already-packed message bytes with MPI using multiple sends if necessary.
Definition active.cc:342
MPI_Comm comm_
Definition active.h:1834
void markAsTermMessage(MsgPtrT const msg)
Mark a message as a termination message.
Definition active.impl.h:63
ActiveRecvBroker active_broker_
Definition active.h:1837
MsgSizeType packMsg(MessageType *msg, MsgSizeType size, std::byte *ptr, MsgSizeType ptr_bytes)
Pack a message, used by the system.
Definition active.cc:194
std::tuple< EventType, int > sendDataMPI(PtrLenPairType const &ptr, NodeType const &dest, TagType const &tag)
Send raw bytes to a node with potentially multiple sends.
Definition active.cc:581
void blockOnAsyncOp(std::unique_ptr< AsyncOp > op)
Block the current task's execution on an pollable async operation until it completes.
Definition active.cc:1463
PendingRecv PendingRecvType
Definition active.h:331
ActiveMessenger::PendingSendType sendMsgSerializableImpl(NodeType dest, HandlerType han, MsgSharedPtr< MsgT > &msg, TagType tag)
Definition active.impl.h:111
void markAsSerialMsgMessage(MsgPtrT const msg)
Mark a message as a serialization control message.
Definition active.impl.h:83
diagnostic::Counter bcastsSentCount
Definition active.h:1822
void markAsLocationMessage(MsgPtrT const msg)
Mark a message as a location message.
Definition active.impl.h:74
bool testPendingDataMsgAsyncRecv()
Test pending MPI request for data message receives.
Definition active.cc:1301
static void chunkedMultiMsg(MultiMsg *msg)
Handle a control message; immediately calls handleChunkedMultiMsg.
Definition active.cc:316
diagnostic::CounterGauge amPostedCounterGauge
Definition active.h:1817
RequestHolder< InProgressIRecv > in_progress_active_msg_irecv
Definition active.h:1802
event::AsyncEvent::EventRecordType EventRecordType
Definition active.h:332
EventType sendMsgBytesWithPut(NodeType const &dest, MsgSharedPtr< BaseMsgType > const &base)
Send message as low-level bytes that is already packed.
Definition active.cc:225
diagnostic::CounterGauge amRecvCounterGauge
Definition active.h:1813
MPI_TagType allocateNewTag()
Allocate a new, unused tag.
Definition active.cc:532
bool tryProcessDataMsgRecv()
Poll MPI for raw data messages.
Definition active.cc:661
bool recvDataMsgPriority(int nchunks, PriorityType priority, TagType const &tag, NodeType const &node, ContinuationDeleterType next=nullptr)
Receive data as bytes from a node with a priority.
Definition active.cc:647
Holds a buffered active message, used internally.
Definition active.h:268
MsgSharedPtr< BaseMsgType > MessageType
Definition active.h:269
NodeType from_node
Definition active.h:272
BufferedActiveMsg(MessageType const &in_buffered_msg, NodeType const &in_from_node, ActionType in_cont)
Definition active.h:275
MessageType buffered_msg
Definition active.h:271
ActionType cont
Definition active.h:273
void serialize(Serializer &s)
Definition active.h:282
InProgressBase(std::byte *in_buf, MsgSizeType in_probe_bytes, NodeType in_sender)
Definition active.h:161
std::byte * buf
Definition active.h:175
bool valid
Definition active.h:178
MsgSizeType probe_bytes
Definition active.h:176
NodeType sender
Definition active.h:177
void serialize(Serializer &s)
Definition active.h:168
An in-progress pure data MPI_Irecv watched by the runtime.
Definition active.h:214
std::vector< MPI_Request > reqs
Definition active.h:260
ContinuationDeleterType next
Definition active.h:255
PriorityType priority
Definition active.h:256
bool test(int &num_mpi_tests)
Definition active.h:226
std::size_t cur
Definition active.h:259
ActionType dealloc_user_buf
Definition active.h:254
InProgressDataIRecv(std::byte *in_buf, MsgSizeType in_probe_bytes, NodeType in_sender, std::vector< MPI_Request > in_reqs, std::byte *const in_user_buf, ActionType in_dealloc_user_buf, ContinuationDeleterType in_next, PriorityType in_priority)
Definition active.h:215
void serialize(Serializer &s)
Definition active.h:244
std::byte * user_buf
Definition active.h:253
An in-progress MPI_Irecv watched by the runtime.
Definition active.h:186
InProgressIRecv(std::byte *in_buf, MsgSizeType in_probe_bytes, NodeType in_sender, MPI_Request in_req=MPI_REQUEST_NULL)
Definition active.h:188
bool test(int &num_mpi_tests)
Definition active.h:195
MPI_Request req
Definition active.h:206
Helper to unify 'stealing' message ownership.
Definition smart_ptr.h:313
Definition smart_ptr.h:99
Definition param_msg.h:150
An pending receive event.
Definition active.h:125
ActionType dealloc_user_buf
Definition active.h:129
bool is_user_buf
Definition active.h:132
ContinuationDeleterType cont
Definition active.h:128
NodeType sender
Definition active.h:130
int nchunks
Definition active.h:126
void serialize(Serializer &s)
Definition active.h:144
PriorityType priority
Definition active.h:131
std::byte * user_buf
Definition active.h:127
PendingRecv(int in_nchunks, std::byte *in_user_buf, ContinuationDeleterType in_cont, ActionType in_dealloc_user_buf, NodeType node, PriorityType in_priority, bool in_is_user_buf)
Definition active.h:134
A pending send (or other similar operation) that is delayed until this holder goes out of scope.
Definition pending_send.h:70
Holds a set of pending MPI Irecvs to poll for completion.
Definition request_holder.h:69
Returned from a data send to be used to receive the data.
Definition send_info.h:56
Component class for a generic, pollable VT runtime module, CRTP'ed over the component's actual type....
Definition component.h:161
T & get()
Get reference.
Definition strong_type.h:153