66 class ActiveMessageImpl;
68 template <
typename T,
size_t INLINE_STORAGE = 256>
93 size_t _bytes_per_line,
size_t _lines,
size_t _line_stride,
103 void init(
NodeID _target,
const void *_data,
size_t _datalen);
108 size_t _bytes_per_line,
size_t _lines,
size_t _line_stride,
122 bool with_congestion);
124 size_t bytes_per_line,
size_t lines,
125 size_t line_stride,
bool with_congestion);
127 size_t bytes_per_line,
size_t lines,
128 size_t line_stride,
bool with_congestion);
131 size_t bytes_per_line,
size_t lines,
size_t line_stride,
132 const RemoteAddress &dest_payload_addr,
bool with_congestion);
140 template <
typename T2>
144 void add_payload(
const void *data,
size_t bytes_per_line,
size_t lines,
157 template <
typename CALLABLE>
159 template <
typename CALLABLE>
170 alignas(
alignof(T) >
alignof(uint64_t) ?
alignof(T) : alignof(uint64_t)) uint64_t
176 size_t network_max_payload_{0};
178 const void *chunk_src_data_{
nullptr};
179 size_t chunk_src_datalen_{0};
180 std::vector<std::byte>
183 void init_chunked(
NodeID _target,
size_t _max_payload_size);
184 void init_chunked(
const NodeSet &_targets,
size_t _max_payload_size);
185 void init_chunked_data(
NodeID _target,
const void *_data,
size_t _datalen);
186 void init_chunked_data(
const NodeSet &_targets,
const void *_data,
size_t _datalen);
187 void commit_chunked(
void);
188 static uint64_t next_chunk_message_id(
NodeID node_id);
196 virtual size_t size()
const = 0;
199 static const size_t ALIGNMENT = 8;
207 template <
typename CALLABLE>
230 virtual void commit(
size_t act_payload_size) = 0;
244 void record(
long long t_start,
long long t_end);
261 size_t payload_size,
TimeLimit work_until);
263 const void *payload,
size_t payload_size);
265 const void *payload,
size_t payload_size,
268 template <
typename T>
318 template <
typename T,
typename T2 = T>
355 namespace ThreadLocal {
375 const void *hdr,
size_t hdr_size,
int hdr_mode,
376 const void *payload,
size_t payload_size,
int payload_mode,
377 CallbackFnptr callback_fnptr,
CallbackData callback_data1,
452 std::size_t
operator()(
const std::pair<NodeID, uint64_t> &p)
const
454 return std::hash<NodeID>()(p.first) ^ (std::hash<uint64_t>()(p.second) << 1);
458 std::unordered_map<std::pair<NodeID, uint64_t>, std::unique_ptr<FragmentedMessage>,
463 template <
typename UserHdr>
475 template <
typename T>
477 template <
typename U>
482#include "realm/activemsg.inl"
Definition activemsg.h:302
const char * name
Definition activemsg.h:312
virtual ActiveMessageHandlerTable::MessageHandler get_handler(void) const =0
virtual ~ActiveMessageHandlerRegBase(void)
Definition activemsg.h:304
ActiveMessageHandlerRegBase * next_handler
Definition activemsg.h:314
virtual ActiveMessageHandlerTable::MessageHandlerNoTimeout get_handler_notimeout(void) const =0
std::optional< const FragmentInfo &(*)(const void *)> extract_frag_info
Definition activemsg.h:315
bool must_free
Definition activemsg.h:313
ActiveMessageHandlerTable::TypeHash hash
Definition activemsg.h:311
virtual ActiveMessageHandlerTable::MessageHandlerInline get_handler_inline(void) const =0
Definition activemsg.h:319
void force_instantiation(void)
Definition activemsg.h:352
~ActiveMessageHandlerReg(void)
virtual ActiveMessageHandlerTable::MessageHandlerInline get_handler_inline(void) const
virtual ActiveMessageHandlerTable::MessageHandler get_handler(void) const
virtual ActiveMessageHandlerTable::MessageHandlerNoTimeout get_handler_notimeout(void) const
ActiveMessageHandlerReg(void)
Definition activemsg.h:254
const char * lookup_message_name(MessageID id)
bool(* MessageHandlerInline)(NodeID sender, const void *header, const void *payload, size_t payload_size, TimeLimit work_until)
Definition activemsg.h:264
unsigned short MessageID
Definition activemsg.h:259
MessageID lookup_message_id(void) const
void report_message_handler_stats()
void(* MessageHandlerNoTimeout)(NodeID sender, const void *header, const void *payload, size_t payload_size)
Definition activemsg.h:262
ActiveMessageHandlerTable(void)
~ActiveMessageHandlerTable(void)
void construct_handler_table(void)
void record_message_handler_call(MessageID id, long long t_start, long long t_end)
unsigned TypeHash
Definition activemsg.h:279
void(* MessageHandler)(NodeID sender, const void *header, const void *payload, size_t payload_size, TimeLimit work_until)
Definition activemsg.h:260
static void append_handler_reg(ActiveMessageHandlerRegBase *new_reg)
HandlerEntry * lookup_message_handler(MessageID id)
static ActiveMessageHandlerRegBase * pending_handlers
Definition activemsg.h:295
std::vector< HandlerEntry > handlers
Definition activemsg.h:297
Definition activemsg.h:221
virtual void commit(size_t act_payload_size)=0
virtual void * add_local_completion(size_t size)=0
void * header_base
Definition activemsg.h:233
virtual void * add_remote_completion(size_t size)=0
size_t payload_size
Definition activemsg.h:235
void * payload_base
Definition activemsg.h:234
virtual ~ActiveMessageImpl()
Definition activemsg.h:223
Definition activemsg.h:69
Realm::Serialization::FixedBufferSerializer fbs
Definition activemsg.h:169
void init(NodeID _target, const LocalAddress &_src_payload_addr, size_t _bytes_per_line, size_t _lines, size_t _line_stride, const RemoteAddress &_dest_payload_addr)
static size_t recommended_max_payload(NodeID target, const void *data, size_t bytes_per_line, size_t lines, size_t line_stride, bool with_congestion)
ActiveMessage(const Realm::NodeSet &_targets, const void *_data, size_t _datalen)
ActiveMessageImpl * impl
Definition activemsg.h:167
ActiveMessage(NodeID _target, size_t _max_payload_size=0)
void init(NodeID _target, const LocalAddress &_src_payload_addr, size_t _datalen, const RemoteAddress &_dest_payload_addr)
uint64_t inline_capacity[INLINE_STORAGE/sizeof(uint64_t)]
Definition activemsg.h:171
void * payload_ptr(size_t datalen)
void init(NodeID _target, const void *_data, size_t _datalen)
void add_payload(const void *data, size_t bytes_per_line, size_t lines, size_t line_stride, int payload_mode=PAYLOAD_COPY)
void init(NodeID _target, size_t _max_payload_size=0)
ActiveMessage(const Realm::NodeSet &_targets, size_t _max_payload_size=0)
T * header
Definition activemsg.h:168
ActiveMessage(NodeID _target, const void *_data, size_t _datalen)
void init(const Realm::NodeSet &_targets, const void *_data, size_t _datalen)
bool operator<<(const T2 &to_append)
void add_payload(const void *data, size_t datalen, int payload_mode=PAYLOAD_COPY)
static size_t recommended_max_payload(NodeID target, bool with_congestion)
static size_t recommended_max_payload(NodeID target, const RemoteAddress &dest_payload_addr, bool with_congestion)
static size_t recommended_max_payload(const NodeSet &targets, const void *data, size_t bytes_per_line, size_t lines, size_t line_stride, bool with_congestion)
ActiveMessage(NodeID _target, const LocalAddress &_src_payload_addr, size_t _bytes_per_line, size_t _lines, size_t _line_stride, const RemoteAddress &_dest_payload_addr)
static size_t recommended_max_payload(const NodeSet &targets, bool with_congestion)
void add_local_completion(const CALLABLE &callable)
void add_remote_completion(const CALLABLE &callable)
static size_t recommended_max_payload(NodeID target, const LocalAddress &src_payload_addr, size_t bytes_per_line, size_t lines, size_t line_stride, const RemoteAddress &dest_payload_addr, bool with_congestion)
void init(const Realm::NodeSet &_targets, size_t _max_payload_size=0)
void init(NodeID _target, size_t _max_payload_size, const RemoteAddress &_dest_payload_addr)
ActiveMessage(NodeID _target, size_t _max_payload_size, const RemoteAddress &_dest_payload_addr)
ActiveMessage(NodeID _target, const LocalAddress &_src_payload_addr, size_t _datalen, const RemoteAddress &_dest_payload_addr)
Definition activemsg.h:192
virtual ~CompletionCallbackBase()
static void destroy_all(void *start, size_t bytes)
virtual size_t size() const =0
static void clone_all(void *dst, const void *src, size_t bytes)
static void invoke_all(void *start, size_t bytes)
virtual CompletionCallbackBase * clone_at(void *p) const =0
Definition activemsg.h:208
virtual CompletionCallbackBase * clone_at(void *p) const
CALLABLE callable
Definition activemsg.h:216
CompletionCallback(const CALLABLE &_callable)
virtual size_t size() const
Definition activemsg.h:361
size_t total_messages_handled
Definition activemsg.h:441
void drain_incoming_messages(size_t min_messages_handled)
int todo_newest
Definition activemsg.h:437
size_t drain_min_count
Definition activemsg.h:440
Message ** heads
Definition activemsg.h:433
bool return_messages(int sender, size_t num_handled, Message *head, Message **tail)
MessageBlock * current_block
Definition activemsg.h:446
int handlers_active
Definition activemsg.h:438
uintptr_t CallbackData
Definition activemsg.h:367
atomic< bool > bgwork_requested
Definition activemsg.h:431
std::vector< Thread * > handler_threads
Definition activemsg.h:445
int dedicated_threads
Definition activemsg.h:430
std::unordered_map< std::pair< NodeID, uint64_t >, std::unique_ptr< FragmentedMessage >, PairHash > frag_message
Definition activemsg.h:460
Mutex::CondVar condvar
Definition activemsg.h:443
Message *** tails
Definition activemsg.h:434
CoreReservation * core_rsrv
Definition activemsg.h:444
int get_messages(Message *&head, Message **&tail, bool wait)
bool add_incoming_message(NodeID sender, ActiveMessageHandlerTable::MessageID msgid, const void *hdr, size_t hdr_size, int hdr_mode, const void *payload, size_t payload_size, int payload_mode, CallbackFnptr callback_fnptr, CallbackData callback_data1, CallbackData callback_data2, TimeLimit work_until)
void start_handler_threads(size_t stack_size)
bool * in_handler
Definition activemsg.h:435
~IncomingMessageManager(void)
IncomingMessageManager(int _nodes, int _dedicated_threads, Realm::CoreReservationSet &crs)
size_t num_available_blocks
Definition activemsg.h:448
Mutex mutex
Definition activemsg.h:442
int shutdown_flag
Definition activemsg.h:432
int * todo_list
Definition activemsg.h:436
MessageBlock * available_blocks
Definition activemsg.h:447
bool drain_pending
Definition activemsg.h:439
virtual bool do_work(TimeLimit work_until)
size_t cfg_max_available_blocks
Definition activemsg.h:449
void handler_thread_loop(void)
Definition serialize.h:118
#define REALM_INTERNAL_API_EXTERNAL_LINKAGE
Definition compiler_support.h:218
Helper utility for reconstructing large ActiveMessages that were split into multiple network packets.
bool profile_activemsg_handlers
long long max_inline_message_time
thread_local bool in_message_handler
Definition activemsg.h:42
ActiveMessageHandlerTable activemsg_handler_table
int NodeID
Definition nodeset.h:40
@ PAYLOAD_EMPTY
Definition activemsg.h:63
@ PAYLOAD_KEEPREG
Definition activemsg.h:62
@ PAYLOAD_PENDING
Definition activemsg.h:61
@ PAYLOAD_SRCPTR
Definition activemsg.h:60
@ PAYLOAD_NONE
Definition activemsg.h:56
@ PAYLOAD_COPY
Definition activemsg.h:59
@ PAYLOAD_FREE
Definition activemsg.h:58
@ PAYLOAD_KEEP
Definition activemsg.h:57
Definition activemsg.h:240
void record(long long t_start, long long t_end)
atomic< size_t > count
Definition activemsg.h:241
atomic< size_t > minval
Definition activemsg.h:241
ActiveMessageHandlerStats(void)
atomic< size_t > maxval
Definition activemsg.h:241
atomic< size_t > sum
Definition activemsg.h:241
atomic< size_t > sum2
Definition activemsg.h:241
Definition activemsg.h:281
MessageHandlerNoTimeout handler_notimeout
Definition activemsg.h:285
std::optional< const FragmentInfo &(*)(const void *)> extract_frag_info
Definition activemsg.h:289
const char * name
Definition activemsg.h:283
ActiveMessageHandlerStats stats
Definition activemsg.h:287
TypeHash hash
Definition activemsg.h:282
MessageHandlerInline handler_inline
Definition activemsg.h:286
MessageHandler handler
Definition activemsg.h:284
Definition activemsg.h:247
uint32_t total_chunks
Definition activemsg.h:249
uint64_t msg_id
Definition activemsg.h:250
uint32_t chunk_id
Definition activemsg.h:248
Definition activemsg.h:410
static MessageBlock * new_block(size_t _total_size)
static void free_block(MessageBlock *block)
void recycle_message(Message *msg, IncomingMessageManager *manager)
Message * append_message(size_t hdr_bytes_needed, size_t payload_bytes_needed)
atomic< unsigned > use_count
Definition activemsg.h:423
size_t size_used
Definition activemsg.h:422
MessageBlock * next_free
Definition activemsg.h:424
Definition activemsg.h:395
CallbackFnptr callback_fnptr
Definition activemsg.h:406
CallbackData callback_data1
Definition activemsg.h:407
void * payload
Definition activemsg.h:403
bool hdr_needs_free
Definition activemsg.h:402
void * hdr
Definition activemsg.h:400
MessageBlock * block
Definition activemsg.h:396
size_t payload_size
Definition activemsg.h:404
Message * next_msg
Definition activemsg.h:397
ActiveMessageHandlerTable::HandlerEntry * handler
Definition activemsg.h:399
size_t hdr_size
Definition activemsg.h:401
NodeID sender
Definition activemsg.h:398
bool payload_needs_free
Definition activemsg.h:405
Definition activemsg.h:451
std::size_t operator()(const std::pair< NodeID, uint64_t > &p) const
Definition activemsg.h:452
Definition activemsg.h:464
UserHdr * operator->()
Definition activemsg.h:468
UserHdr & operator*()
Definition activemsg.h:470
const UserHdr * operator->() const
Definition activemsg.h:469
FragmentInfo frag_info
Definition activemsg.h:465
UserHdr user
Definition activemsg.h:466
const UserHdr & operator*() const
Definition activemsg.h:471
Definition activemsg.h:476
NodeID src
Definition ucp_internal.h:1
unsigned short msgid
Definition ucp_internal.h:2