108 class CoreReservationSet;
125 bool poll_use_bgwork,
188 TwoDPayload(
const void *_srcptr,
size_t _line_size,
size_t _line_count,
189 ptrdiff_t _line_stride,
int _mode);
218 size_t arg_size,
const void *payload,
size_t payload_size,
222 size_t arg_size,
const void *payload,
size_t line_size,
223 off_t line_stride,
size_t line_count,
int payload_mode,
227 size_t arg_size,
const SpanList &spans,
size_t payload_size,
238#ifdef REALM_PROFILE_AM_HANDLERS
240extern void record_activemsg_profiling(
int msgid,
const struct timespec &ts_start,
241 const struct timespec &ts_end);
250 struct timespec ts_end;
251 clock_gettime(CLOCK_MONOTONIC, &ts_end);
252 record_activemsg_profiling(MSGID, ts_start, ts_end);
256 struct timespec ts_start;
270template <
class MSGTYPE>
274template <
class MSGTYPE>
278template <
class MSGTYPE,
int MSGID, void (*SHORT_HNDL_PTR)(MSGTYPE),
279 void (*MED_HNDL_PTR)(MSGTYPE,
const void *, size_t),
int MSG_N>
283template <
class MSGTYPE,
int MSGID,
void (*SHORT_HNDL_PTR)(MSGTYPE),
int MSG_N>
284class IncomingShortMessage :
public Realm::IncomingMessage {
286 IncomingShortMessage(
int _sender)
290 virtual void run_handler(
void)
293 (*SHORT_HNDL_PTR)(u.typed);
296 virtual int get_peer(
void) {
return sender; }
297 virtual int get_msgid(
void) {
return MSGID; }
298 virtual size_t get_msgsize(
void) {
return sizeof(MSGTYPE); }
307template <
class MSGTYPE,
int MSGID,
308 void (*MED_HNDL_PTR)(MSGTYPE,
const void *, size_t),
int MSG_N>
309class IncomingMediumMessage : public
Realm::IncomingMessage {
311 IncomingMediumMessage(int _sender, const void *_msgdata, size_t _msglen)
312 : sender(_sender), msgdata(_msgdata), msglen(_msglen)
315 virtual void run_handler(
void)
319 (*MED_HNDL_PTR)(u.typed, msgdata, msglen);
324 virtual int get_peer(
void) {
return sender; }
325 virtual int get_msgid(
void) {
return MSGID; }
326 virtual size_t get_msgsize(
void) {
return sizeof(MSGTYPE) + msglen; }
338#define HANDLERARG_DECL_1 handlerarg_t arg0
339#define HANDLERARG_DECL_2 \
342#define HANDLERARG_DECL_3 \
345#define HANDLERARG_DECL_4 \
348#define HANDLERARG_DECL_5 \
351#define HANDLERARG_DECL_6 \
354#define HANDLERARG_DECL_7 \
357#define HANDLERARG_DECL_8 \
360#define HANDLERARG_DECL_9 \
363#define HANDLERARG_DECL_10 \
366#define HANDLERARG_DECL_11 \
367 HANDLERARG_DECL_10; \
369#define HANDLERARG_DECL_12 \
370 HANDLERARG_DECL_11; \
372#define HANDLERARG_DECL_13 \
373 HANDLERARG_DECL_12; \
375#define HANDLERARG_DECL_14 \
376 HANDLERARG_DECL_13; \
378#define HANDLERARG_DECL_15 \
379 HANDLERARG_DECL_14; \
381#define HANDLERARG_DECL_16 \
382 HANDLERARG_DECL_15; \
385#define HANDLERARG_VALS_1 arg0
386#define HANDLERARG_VALS_2 HANDLERARG_VALS_1, arg1
387#define HANDLERARG_VALS_3 HANDLERARG_VALS_2, arg2
388#define HANDLERARG_VALS_4 HANDLERARG_VALS_3, arg3
389#define HANDLERARG_VALS_5 HANDLERARG_VALS_4, arg4
390#define HANDLERARG_VALS_6 HANDLERARG_VALS_5, arg5
391#define HANDLERARG_VALS_7 HANDLERARG_VALS_6, arg6
392#define HANDLERARG_VALS_8 HANDLERARG_VALS_7, arg7
393#define HANDLERARG_VALS_9 HANDLERARG_VALS_8, arg8
394#define HANDLERARG_VALS_10 HANDLERARG_VALS_9, arg9
395#define HANDLERARG_VALS_11 HANDLERARG_VALS_10, arg10
396#define HANDLERARG_VALS_12 HANDLERARG_VALS_11, arg11
397#define HANDLERARG_VALS_13 HANDLERARG_VALS_12, arg12
398#define HANDLERARG_VALS_14 HANDLERARG_VALS_13, arg13
399#define HANDLERARG_VALS_15 HANDLERARG_VALS_14, arg14
400#define HANDLERARG_VALS_16 HANDLERARG_VALS_15, arg15
402#define HANDLERARG_PARAMS_1 handlerarg_t arg0
403#define HANDLERARG_PARAMS_2 HANDLERARG_PARAMS_1, handlerarg_t arg1
404#define HANDLERARG_PARAMS_3 HANDLERARG_PARAMS_2, handlerarg_t arg2
405#define HANDLERARG_PARAMS_4 HANDLERARG_PARAMS_3, handlerarg_t arg3
406#define HANDLERARG_PARAMS_5 HANDLERARG_PARAMS_4, handlerarg_t arg4
407#define HANDLERARG_PARAMS_6 HANDLERARG_PARAMS_5, handlerarg_t arg5
408#define HANDLERARG_PARAMS_7 HANDLERARG_PARAMS_6, handlerarg_t arg6
409#define HANDLERARG_PARAMS_8 HANDLERARG_PARAMS_7, handlerarg_t arg7
410#define HANDLERARG_PARAMS_9 HANDLERARG_PARAMS_8, handlerarg_t arg8
411#define HANDLERARG_PARAMS_10 HANDLERARG_PARAMS_9, handlerarg_t arg9
412#define HANDLERARG_PARAMS_11 HANDLERARG_PARAMS_10, handlerarg_t arg10
413#define HANDLERARG_PARAMS_12 HANDLERARG_PARAMS_11, handlerarg_t arg11
414#define HANDLERARG_PARAMS_13 HANDLERARG_PARAMS_12, handlerarg_t arg12
415#define HANDLERARG_PARAMS_14 HANDLERARG_PARAMS_13, handlerarg_t arg13
416#define HANDLERARG_PARAMS_15 HANDLERARG_PARAMS_14, handlerarg_t arg14
417#define HANDLERARG_PARAMS_16 HANDLERARG_PARAMS_15, handlerarg_t arg15
419#define HANDLERARG_COPY_1(u) (u).raw.arg0 = arg0
420#define HANDLERARG_COPY_2(u) \
421 HANDLERARG_COPY_1(u); \
423#define HANDLERARG_COPY_3(u) \
424 HANDLERARG_COPY_2(u); \
426#define HANDLERARG_COPY_4(u) \
427 HANDLERARG_COPY_3(u); \
429#define HANDLERARG_COPY_5(u) \
430 HANDLERARG_COPY_4(u); \
432#define HANDLERARG_COPY_6(u) \
433 HANDLERARG_COPY_5(u); \
435#define HANDLERARG_COPY_7(u) \
436 HANDLERARG_COPY_6(u); \
438#define HANDLERARG_COPY_8(u) \
439 HANDLERARG_COPY_7(u); \
441#define HANDLERARG_COPY_9(u) \
442 HANDLERARG_COPY_8(u); \
444#define HANDLERARG_COPY_10(u) \
445 HANDLERARG_COPY_9(u); \
447#define HANDLERARG_COPY_11(u) \
448 HANDLERARG_COPY_10(u); \
449 (u).raw.arg10 = arg10
450#define HANDLERARG_COPY_12(u) \
451 HANDLERARG_COPY_11(u); \
452 (u).raw.arg11 = arg11
453#define HANDLERARG_COPY_13(u) \
454 HANDLERARG_COPY_12(u); \
455 (u).raw.arg12 = arg12
456#define HANDLERARG_COPY_14(u) \
457 HANDLERARG_COPY_13(u); \
458 (u).raw.arg13 = arg13
459#define HANDLERARG_COPY_15(u) \
460 HANDLERARG_COPY_14(u); \
461 (u).raw.arg14 = arg14
462#define HANDLERARG_COPY_16(u) \
463 HANDLERARG_COPY_15(u); \
464 (u).raw.arg15 = arg15
466#define MACROPROXY(a, ...) a(__VA_ARGS__)
472#define SPECIALIZED_RAW_ARGS(n) \
473 template <class MSGTYPE, int MSGID, void (*SHORT_HNDL_PTR)(MSGTYPE), \
474 void (*MED_HNDL_PTR)(MSGTYPE, const void *, size_t)> \
475 struct MessageRawArgs<MSGTYPE, MSGID, SHORT_HNDL_PTR, MED_HNDL_PTR, n> { \
476 HANDLERARG_DECL_##n; \
478 typedef IncomingShortMessage<MSGTYPE, MSGID, SHORT_HNDL_PTR, n> ISHORT; \
479 typedef IncomingMediumMessage<MSGTYPE, MSGID, MED_HNDL_PTR, n> IMED; \
480 static void handler_short(token_t token, HANDLERARG_PARAMS_##n) \
482 Realm::NodeID src = get_message_source(token); \
484 ISHORT *imsg = new ISHORT(src); \
485 HANDLERARG_COPY_##n(imsg->u); \
486 record_message(src, false); \
487 enqueue_incoming(src, imsg); \
490 static void handler_medium(token_t token, void *buf, size_t nbytes, \
491 HANDLERARG_PARAMS_##n) \
493 Realm::NodeID src = get_message_source(token); \
495 bool handle_now = adjust_long_msgsize(src, buf, nbytes, arg0 ); \
497 IMED *imsg = new IMED(src, buf, nbytes); \
498 HANDLERARG_COPY_##n(imsg->u); \
501 uint64_t srcptr = reinterpret_cast<uintptr_t>(imsg->u.typed.srcptr); \
502 enqueue_incoming(src, imsg); \
505 assert(nbytes > 0); \
506 record_message(src, true); \
507 send_srcptr_release(token, srcptr); \
509 record_message(src, false); \
511 record_message(src, false); \
516SPECIALIZED_RAW_ARGS(2);
517SPECIALIZED_RAW_ARGS(3);
518SPECIALIZED_RAW_ARGS(4);
519SPECIALIZED_RAW_ARGS(5);
520SPECIALIZED_RAW_ARGS(6);
521SPECIALIZED_RAW_ARGS(7);
522SPECIALIZED_RAW_ARGS(8);
523SPECIALIZED_RAW_ARGS(9);
524SPECIALIZED_RAW_ARGS(10);
525SPECIALIZED_RAW_ARGS(11);
526SPECIALIZED_RAW_ARGS(12);
527SPECIALIZED_RAW_ARGS(13);
528SPECIALIZED_RAW_ARGS(14);
529SPECIALIZED_RAW_ARGS(15);
530SPECIALIZED_RAW_ARGS(16);
533#ifdef ACTIVE_MESSAGE_TRACE
534void record_am_handler(
int msgid,
const char *description,
bool reply =
false);
Definition gasnetmsg.h:262
ActiveMsgProfilingHelper(void)
Definition gasnetmsg.h:266
Definition gasnetmsg.h:172
virtual ~ContiguousPayload(void)
Definition gasnetmsg.h:175
void * srcptr
Definition gasnetmsg.h:181
virtual int get_payload_mode(void)
Definition gasnetmsg.h:178
int mode
Definition gasnetmsg.h:183
virtual void copy_data(void *dest)
virtual void * get_contig_pointer(void)
Definition gasnetmsg.h:177
size_t size
Definition gasnetmsg.h:182
ContiguousPayload(void *_srcptr, size_t _size, int _mode)
Definition gasnetmsg.h:157
PayloadSource(void)
Definition gasnetmsg.h:159
virtual void copy_data(void *dest)=0
virtual void * get_contig_pointer(void)
Definition gasnetmsg.h:164
virtual int get_payload_mode(void)
Definition gasnetmsg.h:169
virtual ~PayloadSource(void)
Definition gasnetmsg.h:160
Definition gasnetmsg.h:601
Realm::atomic< PendingCompletionGroup * > groups[1<< LOG2_MAXGROUPS]
Definition gasnetmsg.h:620
~PendingCompletionManager()
bool mark_ready(PendingCompletion *comp)
PendingCompletion * get_available()
Realm::atomic< size_t > num_groups
Definition gasnetmsg.h:619
Realm::atomic< PendingCompletion * > first_free
Definition gasnetmsg.h:618
static const size_t LOG2_MAXGROUPS
Definition gasnetmsg.h:614
Realm::Mutex mutex
Definition gasnetmsg.h:617
void invoke_completions(int index, bool do_local, bool do_remote)
PendingCompletionManager()
Definition gasnetmsg.h:548
size_t last_message_count
Definition gasnetmsg.h:556
bool is_quiescent
Definition gasnetmsg.h:560
int messages_received
Definition gasnetmsg.h:559
Realm::Mutex::CondVar condvar
Definition gasnetmsg.h:558
Realm::Mutex mutex
Definition gasnetmsg.h:557
size_t sample_messages_received_count(void)
bool perform_check(size_t sampled_receive_count)
static const size_t ALIGNMENT
Definition activemsg.h:183
Definition activemsg.h:345
Definition gasnetmsg.h:203
int mode
Definition gasnetmsg.h:212
virtual ~SpanPayload(void)
Definition gasnetmsg.h:206
SpanList spans
Definition gasnetmsg.h:210
SpanPayload(const SpanList &_spans, size_t _size, int _mode)
size_t size
Definition gasnetmsg.h:211
virtual void copy_data(void *dest)
Definition gasnetmsg.h:186
size_t line_count
Definition gasnetmsg.h:195
TwoDPayload(const void *_srcptr, size_t _line_size, size_t _line_count, ptrdiff_t _line_stride, int _mode)
virtual ~TwoDPayload(void)
Definition gasnetmsg.h:190
ptrdiff_t line_stride
Definition gasnetmsg.h:196
size_t line_size
Definition gasnetmsg.h:195
virtual void copy_data(void *dest)
const void * srcptr
Definition gasnetmsg.h:194
int mode
Definition gasnetmsg.h:197
void init_endpoints(size_t gasnet_mem_size, size_t registered_mem_size, size_t registered_ib_mem_size, Realm::CoreReservationSet &crs, int num_polling_threads, Realm::BackgroundWorkManager &bgwork, bool poll_use_bgwork, Realm::IncomingMessageManager *message_manager)
void record_message(Realm::NodeID source, bool sent_reply)
void send_srcptr_release(token_t token, uint64_t srcptr)
void start_handler_threads(size_t stacksize)
std::pair< const void *, size_t > SpanListEntry
Definition gasnetmsg.h:200
void gasnet_parse_command_line(std::vector< std::string > &cmdline)
void * token_t
Definition gasnetmsg.h:118
void dummy_short_handler(MSGTYPE dummy)
Definition gasnetmsg.h:271
int32_t handlerarg_t
Definition gasnetmsg.h:117
void enqueue_message(Realm::NodeID target, int msgid, const void *args, size_t arg_size, const void *payload, size_t payload_size, int payload_mode, PendingCompletion *comp, void *dstptr=0)
void report_activemsg_status(FILE *f)
size_t get_lmb_size(Realm::NodeID target_node)
Realm::NodeID get_message_source(token_t token)
PendingCompletionManager completion_manager
std::vector< SpanListEntry > SpanList
Definition gasnetmsg.h:201
QuiescenceChecker quiescence_checker
bool adjust_long_msgsize(Realm::NodeID source, void *&ptr, size_t &buffer_size, int frag_info)
void stop_activemsg_threads(void)
void handle_long_msgptr(Realm::NodeID source, int msgptr_index)
@ MSGID_NEW_ACTIVEMSG
Definition gasnetmsg.h:545
void release_srcptr(void *ptr)
void start_polling_threads(void)
ActiveMessageIDs
Definition gasnetmsg.h:39
@ MEM_STORAGE_RELEASE_REQ_MSGID
Definition gasnetmsg.h:102
@ APPROX_IMAGE_RESPONSE_MSGID
Definition gasnetmsg.h:91
@ XFERDES_DESTROY_MSGID
Definition gasnetmsg.h:81
@ REMOTE_MALLOC_RPLID
Definition gasnetmsg.h:50
@ REMOTE_IB_ALLOC_RESPONSE_MSGID
Definition gasnetmsg.h:96
@ CREATE_ALLOC_MSGID
Definition gasnetmsg.h:51
@ REMOTE_WRITE_FENCE_ACK_MSGID
Definition gasnetmsg.h:66
@ XFERDES_REMOTEWRITE_ACK_MSGID
Definition gasnetmsg.h:79
@ CREATE_ALLOC_RPLID
Definition gasnetmsg.h:52
@ LOCK_GRANT_MSGID
Definition gasnetmsg.h:45
@ BARRIER_MIGRATE_MSGID
Definition gasnetmsg.h:73
@ SPAWN_TASK_MSGID
Definition gasnetmsg.h:42
@ REMOTE_ID_REQUEST_MSGID
Definition gasnetmsg.h:93
@ XFERDES_UPDATE_BYTES_WRITE_MSGID
Definition gasnetmsg.h:83
@ EVENT_SUBSCRIBE_MSGID
Definition gasnetmsg.h:46
@ REMOTE_SPARSITY_CONTRIB_MSGID
Definition gasnetmsg.h:89
@ METADATA_INVALIDATE_MSGID
Definition gasnetmsg.h:76
@ REGISTER_TASK_COMPLETE_MSGID
Definition gasnetmsg.h:86
@ VALID_MASK_FTH_MSGID
Definition gasnetmsg.h:57
@ CANCEL_OPERATION_MSGID
Definition gasnetmsg.h:104
@ BARRIER_SUBSCRIBE_MSGID
Definition gasnetmsg.h:71
@ LOCK_RELEASE_MSGID
Definition gasnetmsg.h:44
@ CREATE_INST_RPLID
Definition gasnetmsg.h:54
@ ROLL_UP_DATA_MSGID
Definition gasnetmsg.h:59
@ REMOTE_MALLOC_MSGID
Definition gasnetmsg.h:49
@ REMOTE_IB_FREE_REQUEST_MSGID
Definition gasnetmsg.h:97
@ MEM_STORAGE_RELEASE_RESP_MSGID
Definition gasnetmsg.h:103
@ REMOTE_SERDEZ_MSGID
Definition gasnetmsg.h:64
@ MEM_STORAGE_ALLOC_REQ_MSGID
Definition gasnetmsg.h:100
@ REMOTE_ID_RESPONSE_MSGID
Definition gasnetmsg.h:94
@ REGISTER_TASK_MSGID
Definition gasnetmsg.h:85
@ EVENT_TRIGGER_MSGID
Definition gasnetmsg.h:47
@ EVENT_UPDATE_MSGID
Definition gasnetmsg.h:48
@ VALID_MASK_DATA_MSGID
Definition gasnetmsg.h:56
@ BARRIER_TRIGGER_MSGID
Definition gasnetmsg.h:72
@ CLEAR_TIMER_MSGID
Definition gasnetmsg.h:60
@ REMOTE_FILL_MSGID
Definition gasnetmsg.h:99
@ LOCK_REQUEST_MSGID
Definition gasnetmsg.h:43
@ SET_CONTRIB_COUNT_MSGID
Definition gasnetmsg.h:92
@ DESTROY_INST_MSGID
Definition gasnetmsg.h:61
@ MEM_STORAGE_ALLOC_RESP_MSGID
Definition gasnetmsg.h:101
@ METADATA_INVALIDATE_ACK_MSGID
Definition gasnetmsg.h:77
@ REMOTE_SPARSITY_REQUEST_MSGID
Definition gasnetmsg.h:90
@ REMOTE_IB_ALLOC_REQUEST_MSGID
Definition gasnetmsg.h:95
@ REMOTE_COPY_MSGID
Definition gasnetmsg.h:98
@ REMOTE_WRITE_MSGID
Definition gasnetmsg.h:62
@ XFERDES_CREATE_MSGID
Definition gasnetmsg.h:80
@ FIRST_AVAILABLE
Definition gasnetmsg.h:40
@ XFERDES_UPDATE_BYTES_READ_MSGID
Definition gasnetmsg.h:84
@ MACHINE_SHUTDOWN_MSGID
Definition gasnetmsg.h:69
@ REMOTE_REDLIST_MSGID
Definition gasnetmsg.h:68
@ BARRIER_ADJUST_MSGID
Definition gasnetmsg.h:70
@ XFERDES_NOTIFY_COMPLETION_MSGID
Definition gasnetmsg.h:82
@ REMOTE_WRITE_FENCE_MSGID
Definition gasnetmsg.h:65
@ METADATA_REQUEST_MSGID
Definition gasnetmsg.h:74
@ METADATA_RESPONSE_MSGID
Definition gasnetmsg.h:75
@ XFERDES_REMOTEWRITE_MSGID
Definition gasnetmsg.h:78
@ REMOTE_MICROOP_MSGID
Definition gasnetmsg.h:87
@ REMOTE_REDUCE_MSGID
Definition gasnetmsg.h:63
@ REMOTE_MICROOP_COMPLETE_MSGID
Definition gasnetmsg.h:88
@ ROLL_UP_TIMER_MSGID
Definition gasnetmsg.h:58
@ DESTROY_LOCK_MSGID
Definition gasnetmsg.h:67
@ NODE_ANNOUNCE_MSGID
Definition gasnetmsg.h:41
@ VALID_MASK_REQ_MSGID
Definition gasnetmsg.h:55
@ CREATE_INST_MSGID
Definition gasnetmsg.h:53
void dummy_medium_handler(MSGTYPE dummy, const void *data, size_t datalen)
Definition gasnetmsg.h:275
void flush_activemsg_channels(void)
Definition activemsg.h:38
int NodeID
Definition nodeset.h:40
@ PAYLOAD_KEEP
Definition activemsg.h:53
Definition gasnetmsg.h:138
handlerarg_t comp_info
Definition gasnetmsg.h:147
handlerarg_t pad2
Definition gasnetmsg.h:148
handlerarg_t pad1
Definition gasnetmsg.h:148
static const handlerarg_t COMP_INFO_MAGIC
Definition gasnetmsg.h:140
handlerarg_t frag_info
Definition gasnetmsg.h:146
void set_magic(void)
Definition gasnetmsg.h:141
static const handlerarg_t FRAG_INFO_MAGIC
Definition gasnetmsg.h:139
Definition gasnetmsg.h:151
void * srcptr
Definition gasnetmsg.h:152
Definition gasnetmsg.h:280
Definition gasnetmsg.h:595
static const size_t LOG2_GROUPSIZE
Definition gasnetmsg.h:596
PendingCompletion entries[1<< LOG2_GROUPSIZE]
Definition gasnetmsg.h:598
Definition gasnetmsg.h:565
static const unsigned REMOTE_PENDING_BIT
Definition gasnetmsg.h:583
void * add_local_completion(size_t bytes)
int index
Definition gasnetmsg.h:579
bool invoke_local_completions()
void * add_remote_completion(size_t bytes)
static const unsigned LOCAL_PENDING_BIT
Definition gasnetmsg.h:582
static const unsigned READY_BIT
Definition gasnetmsg.h:584
bool invoke_remote_completions()
size_t local_bytes
Definition gasnetmsg.h:586
PendingCompletion * next_free
Definition gasnetmsg.h:580
Realm::atomic< unsigned > state
Definition gasnetmsg.h:585
size_t remote_bytes
Definition gasnetmsg.h:586
static const size_t TOTAL_CAPACITY
Definition gasnetmsg.h:588
Storage_aligned storage
Definition gasnetmsg.h:592
char Storage_unaligned[TOTAL_CAPACITY]
Definition gasnetmsg.h:589
REALM_ALIGNED_TYPE_CONST(Storage_aligned, Storage_unaligned, Realm::CompletionCallbackBase::ALIGNMENT)
unsigned short msgid
Definition ucp_internal.h:2
Definition gasnetmsg.h:538
T data
Definition gasnetmsg.h:539
uint64_t padding
Definition gasnetmsg.h:540