Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
gasnetmsg.h
Go to the documentation of this file.
1/*
2 * Copyright 2025 Stanford University, NVIDIA Corporation
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18// internal messaging subsystem using GASNet-1
19
20#ifndef GASNETMSG_H
21#define GASNETMSG_H
22
23#include <assert.h>
24#include <stddef.h>
25#include <stdlib.h>
26#include <stdio.h>
27#include <vector>
28#include <string>
29
30#include <sys/types.h>
31
32#include "realm/realm_config.h"
33#include "realm/mutex.h"
34#include "realm/activemsg.h"
35#include "realm/bgwork.h"
36#include "realm/atomics.h"
37
39{
75 METADATA_RESPONSE_MSGID, // should really be a reply
105};
106
107namespace Realm {
108 class CoreReservationSet;
109};
110
111// for uint64_t, int32_t
112#include <stdint.h>
113
114#include <vector>
115
116// these need to be consistent with gasnet.h - fragile for now
117typedef int32_t handlerarg_t;
118typedef void *token_t;
119
120// gasnet_hsl_t in object form for templating goodness
121extern void gasnet_parse_command_line(std::vector<std::string> &cmdline);
122extern void init_endpoints(size_t gasnet_mem_size, size_t registered_mem_size,
123 size_t registered_ib_mem_size, Realm::CoreReservationSet &crs,
124 int num_polling_threads, Realm::BackgroundWorkManager &bgwork,
125 bool poll_use_bgwork,
126 Realm::IncomingMessageManager *message_manager);
127extern void start_polling_threads(void);
128extern void start_handler_threads(size_t stacksize);
129extern void flush_activemsg_channels(void);
130extern void stop_activemsg_threads(void);
131extern void report_activemsg_status(FILE *f);
132
133// returns the largest payload that can be sent to a node (to a non-pinned
134// address)
135extern size_t get_lmb_size(Realm::NodeID target_node);
136
137/* Necessary base structure for all medium and long active messages */
150
151struct BaseReply {
152 void *srcptr;
153};
154
155extern void release_srcptr(void *ptr);
156
158public:
160 virtual ~PayloadSource(void) {}
161
162public:
163 virtual void copy_data(void *dest) = 0;
164 virtual void *get_contig_pointer(void)
165 {
166 assert(false);
167 return 0;
168 }
169 virtual int get_payload_mode(void) { return Realm::PAYLOAD_KEEP; }
170};
171
173public:
174 ContiguousPayload(void *_srcptr, size_t _size, int _mode);
175 virtual ~ContiguousPayload(void) {}
176 virtual void copy_data(void *dest);
177 virtual void *get_contig_pointer(void) { return srcptr; }
178 virtual int get_payload_mode(void) { return mode; }
179
180protected:
181 void *srcptr;
182 size_t size;
183 int mode;
184};
185
187public:
188 TwoDPayload(const void *_srcptr, size_t _line_size, size_t _line_count,
189 ptrdiff_t _line_stride, int _mode);
190 virtual ~TwoDPayload(void) {}
191 virtual void copy_data(void *dest);
192
193protected:
194 const void *srcptr;
196 ptrdiff_t line_stride;
197 int mode;
198};
199
200typedef std::pair<const void *, size_t> SpanListEntry;
201typedef std::vector<SpanListEntry> SpanList;
202
204public:
205 SpanPayload(const SpanList &_spans, size_t _size, int _mode);
206 virtual ~SpanPayload(void) {}
207 virtual void copy_data(void *dest);
208
209protected:
211 size_t size;
212 int mode;
213};
214
215struct PendingCompletion;
216
217extern void enqueue_message(Realm::NodeID target, int msgid, const void *args,
218 size_t arg_size, const void *payload, size_t payload_size,
219 int payload_mode, PendingCompletion *comp, void *dstptr = 0);
220
221extern void enqueue_message(Realm::NodeID target, int msgid, const void *args,
222 size_t arg_size, const void *payload, size_t line_size,
223 off_t line_stride, size_t line_count, int payload_mode,
224 PendingCompletion *comp, void *dstptr = 0);
225
226extern void enqueue_message(Realm::NodeID target, int msgid, const void *args,
227 size_t arg_size, const SpanList &spans, size_t payload_size,
228 int payload_mode, PendingCompletion *comp, void *dstptr = 0);
229
230// extern void enqueue_incoming(Realm::NodeID sender, Realm::IncomingMessage *msg);
231
232extern void handle_long_msgptr(Realm::NodeID source, int msgptr_index);
233// extern size_t adjust_long_msgsize(gasnet_node_t source, void *ptr, size_t orig_size);
234extern bool adjust_long_msgsize(Realm::NodeID source, void *&ptr, size_t &buffer_size,
235 int frag_info);
236extern void record_message(Realm::NodeID source, bool sent_reply);
237
238#ifdef REALM_PROFILE_AM_HANDLERS
239// have to define this two different ways because we can't put ifdefs in the macros below
240extern void record_activemsg_profiling(int msgid, const struct timespec &ts_start,
241 const struct timespec &ts_end);
242
243template <int MSGID>
245public:
246 ActiveMsgProfilingHelper(void) { clock_gettime(CLOCK_MONOTONIC, &ts_start); }
247
249 {
250 struct timespec ts_end;
251 clock_gettime(CLOCK_MONOTONIC, &ts_end);
252 record_activemsg_profiling(MSGID, ts_start, ts_end);
253 }
254
255protected:
256 struct timespec ts_start;
257};
258
259#else
260// not measuring AM handler times, so need a dummy class
261template <int MSGID>
263public:
264 // have to define a constructor or the uses of this below will be
265 // reported as unused variables...
267};
268#endif
269
270template <class MSGTYPE>
271void dummy_short_handler(MSGTYPE dummy)
272{}
273
274template <class MSGTYPE>
275void dummy_medium_handler(MSGTYPE dummy, const void *data, size_t datalen)
276{}
277
278template <class MSGTYPE, int MSGID, void (*SHORT_HNDL_PTR)(MSGTYPE),
279 void (*MED_HNDL_PTR)(MSGTYPE, const void *, size_t), int MSG_N>
281
282#if 0
283template <class MSGTYPE, int MSGID, void (*SHORT_HNDL_PTR)(MSGTYPE), int MSG_N>
284class IncomingShortMessage : public Realm::IncomingMessage {
285 public:
286 IncomingShortMessage(int _sender)
287 : sender(_sender)
288 {}
289
290 virtual void run_handler(void)
291 {
293 (*SHORT_HNDL_PTR)(u.typed);
294 }
295
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); }
299
300 int sender;
301 union {
303 MSGTYPE typed;
304 } u;
305};
306
307template <class MSGTYPE, int MSGID,
308 void (*MED_HNDL_PTR)(MSGTYPE, const void *, size_t), int MSG_N>
309class IncomingMediumMessage : public Realm::IncomingMessage {
310 public:
311 IncomingMediumMessage(int _sender, const void *_msgdata, size_t _msglen)
312 : sender(_sender), msgdata(_msgdata), msglen(_msglen)
313 {}
314
315 virtual void run_handler(void)
316 {
317 {
319 (*MED_HNDL_PTR)(u.typed, msgdata, msglen);
320 }
321 handle_long_msgptr(sender, msgdata);
322 }
323
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; }
327
328 int sender;
329 const void *msgdata;
330 size_t msglen;
331 union {
333 MSGTYPE typed;
334 } u;
335};
336#endif
337
338#define HANDLERARG_DECL_1 handlerarg_t arg0
339#define HANDLERARG_DECL_2 \
340 HANDLERARG_DECL_1; \
341 handlerarg_t arg1
342#define HANDLERARG_DECL_3 \
343 HANDLERARG_DECL_2; \
344 handlerarg_t arg2
345#define HANDLERARG_DECL_4 \
346 HANDLERARG_DECL_3; \
347 handlerarg_t arg3
348#define HANDLERARG_DECL_5 \
349 HANDLERARG_DECL_4; \
350 handlerarg_t arg4
351#define HANDLERARG_DECL_6 \
352 HANDLERARG_DECL_5; \
353 handlerarg_t arg5
354#define HANDLERARG_DECL_7 \
355 HANDLERARG_DECL_6; \
356 handlerarg_t arg6
357#define HANDLERARG_DECL_8 \
358 HANDLERARG_DECL_7; \
359 handlerarg_t arg7
360#define HANDLERARG_DECL_9 \
361 HANDLERARG_DECL_8; \
362 handlerarg_t arg8
363#define HANDLERARG_DECL_10 \
364 HANDLERARG_DECL_9; \
365 handlerarg_t arg9
366#define HANDLERARG_DECL_11 \
367 HANDLERARG_DECL_10; \
368 handlerarg_t arg10
369#define HANDLERARG_DECL_12 \
370 HANDLERARG_DECL_11; \
371 handlerarg_t arg11
372#define HANDLERARG_DECL_13 \
373 HANDLERARG_DECL_12; \
374 handlerarg_t arg12
375#define HANDLERARG_DECL_14 \
376 HANDLERARG_DECL_13; \
377 handlerarg_t arg13
378#define HANDLERARG_DECL_15 \
379 HANDLERARG_DECL_14; \
380 handlerarg_t arg14
381#define HANDLERARG_DECL_16 \
382 HANDLERARG_DECL_15; \
383 handlerarg_t arg15
384
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
401
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
418
419#define HANDLERARG_COPY_1(u) (u).raw.arg0 = arg0
420#define HANDLERARG_COPY_2(u) \
421 HANDLERARG_COPY_1(u); \
422 (u).raw.arg1 = arg1
423#define HANDLERARG_COPY_3(u) \
424 HANDLERARG_COPY_2(u); \
425 (u).raw.arg2 = arg2
426#define HANDLERARG_COPY_4(u) \
427 HANDLERARG_COPY_3(u); \
428 (u).raw.arg3 = arg3
429#define HANDLERARG_COPY_5(u) \
430 HANDLERARG_COPY_4(u); \
431 (u).raw.arg4 = arg4
432#define HANDLERARG_COPY_6(u) \
433 HANDLERARG_COPY_5(u); \
434 (u).raw.arg5 = arg5
435#define HANDLERARG_COPY_7(u) \
436 HANDLERARG_COPY_6(u); \
437 (u).raw.arg6 = arg6
438#define HANDLERARG_COPY_8(u) \
439 HANDLERARG_COPY_7(u); \
440 (u).raw.arg7 = arg7
441#define HANDLERARG_COPY_9(u) \
442 HANDLERARG_COPY_8(u); \
443 (u).raw.arg8 = arg8
444#define HANDLERARG_COPY_10(u) \
445 HANDLERARG_COPY_9(u); \
446 (u).raw.arg9 = arg9
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
465
466#define MACROPROXY(a, ...) a(__VA_ARGS__)
467
469extern void send_srcptr_release(token_t token, uint64_t srcptr);
470
471#if 0
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; \
477 \
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) \
481 { \
482 Realm::NodeID src = get_message_source(token); \
483 /*printf("handling message from node %d (id=%d)\n", src, MSGID);*/ \
484 ISHORT *imsg = new ISHORT(src); \
485 HANDLERARG_COPY_##n(imsg->u); \
486 record_message(src, false); \
487 enqueue_incoming(src, imsg); \
488 } \
489 \
490 static void handler_medium(token_t token, void *buf, size_t nbytes, \
491 HANDLERARG_PARAMS_##n) \
492 { \
493 Realm::NodeID src = get_message_source(token); \
494 /*printf("handling medium message from node %d (id=%d)\n", src, MSGID);*/ \
495 bool handle_now = adjust_long_msgsize(src, buf, nbytes, arg0 /*, arg1*/); \
496 if(handle_now) { \
497 IMED *imsg = new IMED(src, buf, nbytes); \
498 HANDLERARG_COPY_##n(imsg->u); \
499 /* save a copy of the srcptr - imsg may be freed any time*/ \
500 /* after we enqueue it */ \
501 uint64_t srcptr = reinterpret_cast<uintptr_t>(imsg->u.typed.srcptr); \
502 enqueue_incoming(src, imsg); \
503 /* we can (and should) release the srcptr immediately */ \
504 if(srcptr) { \
505 assert(nbytes > 0); \
506 record_message(src, true); \
507 send_srcptr_release(token, srcptr); \
508 } else \
509 record_message(src, false); \
510 } else \
511 record_message(src, false); \
512 } \
513 };
514
515// all messages are at least 8 bytes - no RAW_ARGS(1)
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);
531#endif
532
533#ifdef ACTIVE_MESSAGE_TRACE
534void record_am_handler(int msgid, const char *description, bool reply = false);
535#endif
536
537template <typename T>
540 uint64_t padding;
541};
542
543enum
544{
547
562
564
567
568 void *add_local_completion(size_t bytes);
569 void *add_remote_completion(size_t bytes);
570
571 // marks ready and returns true if non-empty, else resets and returns false
573
574 // these two calls can be concurrent, which complicates the determination of
575 // who can free the entry
578
579 int index;
581 // these three bits need to be in a single atomic location
582 static const unsigned LOCAL_PENDING_BIT = 1;
583 static const unsigned REMOTE_PENDING_BIT = 2;
584 static const unsigned READY_BIT = 4;
587
588 static const size_t TOTAL_CAPACITY = 256;
592 Storage_aligned storage;
593};
594
596 static const size_t LOG2_GROUPSIZE = 8; // 256 per group
597
599};
600
602public:
605
607
608 // marks a completion ready or recycles an empty completion
610
611 void invoke_completions(int index, bool do_local, bool do_remote);
612
613protected:
614 static const size_t LOG2_MAXGROUPS = 12; // 4K groups -> 1M completions
615
616 // protects pops from the free list (to avoid A-B-A problem), but NOT pushes
619 Realm::atomic<size_t> num_groups; // number of groups currently allocated
621};
622
624
625#endif
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
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)
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)
Definition bgwork.h:36
static const size_t ALIGNMENT
Definition activemsg.h:183
Definition threads.h:382
Definition activemsg.h:345
Definition mutex.h:325
Definition mutex.h:223
Definition atomics.h:31
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