Realm
A distributed, event-based tasking library
Loading...
Searching...
No Matches
gasnetex_wrapper.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#ifndef GASNETEX_WRAPPER_H
19#define GASNETEX_WRAPPER_H
20
21#include <stdint.h>
22#include <stddef.h>
23
24#ifndef GEX_NO_PROTOTYPES
25#include "gex_export.h"
26#endif
27
28typedef uint32_t gex_flags_t;
29typedef uint32_t gex_rank_t;
30typedef uint16_t gex_ep_index_t;
31typedef uint32_t gex_dt_t;
32typedef uint32_t gex_op_t;
33typedef int32_t gex_am_arg_t;
34typedef uint32_t gex_ep_capabilities_t;
35
36typedef void *gex_client_opaque_t;
37typedef void *gex_ep_opaque_t;
38typedef void *gex_tm_opaque_t;
40typedef void *gex_mk_opaque_t;
41typedef void *gex_addr_opaque_t;
42typedef void *gex_event_opaque_t;
44
45#define __GASNET_ERR_BASE 10000
46#define GEX_WRAPPER_OK 0
47#define GEX_WRAPPER_NOT_VALID -1
48#define GEX_WRAPPER_ERR_NOT_READY (__GASNET_ERR_BASE + 4)
49#define GEX_WRAPPER_EP_INVALID ((gex_ep_opaque_t)(uintptr_t)0)
50#define GEX_WRAPPER_MK_INVALID ((gex_mk_opaque_t)(uintptr_t)0)
51#define GEX_WRAPPER_SEGMENT_INVALID ((gex_segment_opaque_t)(uintptr_t)0)
52#define GEX_WRAPPER_EVENT_INVALID ((gex_event_opaque_t)(uintptr_t)0)
53#define GEX_WRAPPER_EVENT_NO_OP ((gex_event_opaque_t)(uintptr_t)1)
54#define GEX_WRAPPER_EVENT_NOW ((gex_event_opaque_t *)(uintptr_t)1)
55#define GEX_WRAPPER_EVENT_DEFER ((gex_event_opaque_t *)(uintptr_t)2)
56#define GEX_WRAPPER_EVENT_GROUP ((gex_event_opaque_t *)(uintptr_t)3)
57#define GEX_WRAPPER_AM_SRCDESC_NO_OP NULL
58#define GEX_WRAPPER_DT_U64 1 << 3
59#define GEX_WRAPPER_OP_ADD 1 << 3
60#define GEX_WRAPPER_EP_CAPABILITY_RMA (1U << 0)
61#define GEX_WRAPPER_MK_HOST ((gex_mk_opaque_t)(uintptr_t)1)
62#define GEX_WRAPPER_FLAG_IMMEDIATE (1U << 0)
63#define GEX_WRAPPER_FLAG_AM_PREPARE_LEAST_CLIENT (1U << 11)
64#define GEX_WRAPPER_FLAG_AM_PREPARE_LEAST_ALLOC (1U << 12)
65
66#define GEX_WRAPPER_CONDUIT_ARIES 0
67#define GEX_WRAPPER_CONDUIT_IBV 1
68#define GEX_WRAPPER_CONDUIT_MPI 2
69#define GEX_WRAPPER_CONDUIT_OFI 3
70#define GEX_WRAPPER_CONDUIT_SMP 4
71#define GEX_WRAPPER_CONDUIT_UCX 5
72#define GEX_WRAPPER_CONDUIT_UDP 6
73
77typedef struct gex_wrapper_handle_s {
78 /* variable */
80 uint16_t max_eps;
89
90 /* combined */
91
92 int (*gex_client_init)(gex_client_opaque_t *client_p, /*INOUT*/
93 gex_ep_opaque_t *ep_p, /*INOUT*/
94 gex_tm_opaque_t *tm_p, /*INOUT*/
95 gex_rank_t *rank, /*OUT*/
96 gex_rank_t *size, /*OUT*/
97 const char *clientName, /*IN*/
98 int *argc, /*IN*/
99 char ***argv, /*IN*/
100 gex_flags_t flags, /*IN*/
101 const void *val /*IN*/
102 );
103
104 int (*gex_ep_create)(gex_ep_opaque_t *ep_p, /*INOUT*/
105 gex_ep_index_t *ep_index, /*OUT*/
106 gex_client_opaque_t client, /*IN*/
107 gex_ep_capabilities_t capabilities, /*IN*/
108 gex_flags_t flags, /*IN*/
109 const void *val /*IN*/
110 );
111
112 void *(*gex_segment_attach_query_addr)(gex_segment_opaque_t *segment_p,
113 gex_tm_opaque_t tm, uintptr_t size);
114
116 int device, gex_flags_t flags);
117
119 int device, gex_flags_t flags);
120
121 int (*gex_segment_create)(gex_segment_opaque_t *segment_p, // OUT
123 uintptr_t length, gex_mk_opaque_t kind, gex_flags_t flags);
124
126 gex_flags_t flags);
127
128 void (*gex_query_shared_peers)(gex_rank_t *num_shared_ranks, gex_rank_t **shared_ranks);
129
131
132 /* wrapper */
133
134 const char *(*gex_error_name)(int error);
135
136 const char *(*gex_error_desc)(int error);
137
139 gex_ep_opaque_t *eps, // IN
140 size_t num_eps, gex_flags_t flags);
141
143
145
146 void *(*gex_am_src_desc_addr)(gex_am_src_desc_opaque_t sd);
147
148 int (*gex_am_poll)(void);
149
150 /* rma */
151
153 gex_ep_index_t remote_ep_index, void *dest,
154 gex_rank_t rank, void *src, size_t nbytes,
155 gex_flags_t flags);
156
158 gex_ep_index_t remote_ep_index, gex_rank_t rank,
159 void *dest, const void *src, size_t nbytes,
160 gex_event_opaque_t *lc_opt, gex_flags_t flags);
161
162 /* collective */
163
165
166 void (*gex_coll_bcast)(gex_tm_opaque_t tm, gex_rank_t root, void *dst, const void *src,
167 size_t nbytes, gex_flags_t flags);
168
169 void (*gex_coll_gather)(gex_tm_opaque_t tm, gex_rank_t root, const void *val_in,
170 void *vals_out, size_t bytes, gex_flags_t flags);
171
172 void (*gex_coll_allgather)(gex_tm_opaque_t tm, const void *val_in, void *vals_out,
173 size_t bytes, gex_flags_t flags);
174
175 void (*gex_coll_allgatherv)(gex_tm_opaque_t tm, const void *val_in, void *vals_out,
176 int *bytes, int *offsets, gex_flags_t flags);
177
179 gex_dt_t dt, size_t dt_sz, size_t dt_cnt,
180 gex_op_t op, gex_flags_t flags);
181
182 /* gasnetex_handlers */
183
185 gex_ep_index_t tgt_ep_index, const gex_am_arg_t *args,
186 size_t nargs, gex_flags_t flags);
187
189 gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0,
190 const void *hdr, size_t hdr_bytes, gex_flags_t flags);
191
193 gex_ep_index_t tgt_ep_index, size_t hdr_bytes,
194 gex_event_opaque_t *lc_opt, gex_flags_t flags);
195
197 gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0,
198 const void *hdr, size_t hdr_bytes, const void *data,
199 size_t data_bytes, gex_event_opaque_t *lc_opt,
200 gex_flags_t flags);
201
203 gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index,
204 size_t hdr_bytes, const void *data, size_t min_data_bytes, size_t max_data_bytes,
205 gex_event_opaque_t *lc_opt, gex_flags_t flags);
206
208 const void *hdr, size_t hdr_bytes, size_t data_bytes);
209
210 size_t (*max_request_long)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank,
211 gex_ep_index_t tgt_ep_index, size_t hdr_bytes,
212 gex_event_opaque_t *lc_opt, gex_flags_t flags);
213
215 gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0,
216 const void *hdr, size_t hdr_bytes, const void *data,
217 size_t data_bytes, gex_event_opaque_t *lc_opt,
218 gex_flags_t flags, uintptr_t dest_addr);
219
220 // sends a long as a "reverse get": the _header_ is sent as the
221 // payload of a medium that contains the src ep_index/ptr so that
222 // the target can do an RMA get of the actual payload
224 gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0,
225 const void *hdr, size_t hdr_bytes,
226 gex_ep_index_t payload_ep_index, const void *payload,
227 size_t payload_bytes, gex_event_opaque_t *lc_opt,
228 gex_flags_t flags, uintptr_t dest_addr);
229
230 // send the header of a long after the payload has been delivered via
231 // an RMA put: header is sent as a medium
233 gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0,
234 const void *hdr, size_t hdr_bytes, uintptr_t dest_addr,
235 size_t payload_bytes, gex_event_opaque_t *lc_opt,
236 gex_flags_t flags);
237
239 gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index,
240 const void *data, size_t min_data_bytes, size_t max_data_bytes,
241 gex_event_opaque_t *lc_opt, gex_flags_t flags);
242
244 gex_am_arg_t cksum, size_t data_bytes);
245
247
248/* callback table for handlers, this is used for handlers to callback the functions inside
249 * the GASNetEXInternal */
250
251typedef struct gex_callback_handle_s {
252 void *gex_internal; // this is a pointer to the GASNetEXInternal object
254 const void *hdr, size_t hdr_bytes);
256 const void *hdr, size_t hdr_bytes, const void *data,
257 size_t data_bytes);
259 const void *hdr, size_t hdr_bytes, const void *data,
260 size_t data_bytes);
262 gex_ep_index_t src_ep_index, gex_ep_index_t tgt_ep_index,
263 gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes,
264 uintptr_t src_ptr, uintptr_t tgt_ptr, size_t payload_bytes);
265 size_t (*handle_batch)(void *gex_internal, gex_rank_t srcrank, gex_am_arg_t arg0,
266 gex_am_arg_t cksum, const void *data, size_t data_bytes,
267 gex_am_arg_t *comps);
269 const gex_am_arg_t *args, size_t nargs);
270
271 // ^--------- ADD NEW APIS AND FIELDS HERE -------------^
272
274
276
277#ifdef __cplusplus
278extern "C" {
279#endif
280#ifndef GEX_NO_PROTOTYPES
282#endif /*GEX_PROTOTYPES*/
283#ifdef __cplusplus
284}
285#endif
286
287#endif
bootstrap_handle_t * handle
Definition bootstrap.h:61
uint32_t gex_ep_capabilities_t
Definition gasnetex_wrapper.h:34
void * gex_tm_opaque_t
Definition gasnetex_wrapper.h:38
void * gex_event_opaque_t
Definition gasnetex_wrapper.h:42
int32_t gex_am_arg_t
Definition gasnetex_wrapper.h:33
uint16_t gex_ep_index_t
Definition gasnetex_wrapper.h:30
uint32_t gex_op_t
Definition gasnetex_wrapper.h:32
struct gex_wrapper_handle_s gex_wrapper_handle_t
Handle structure that contains the full API for the wrapper.
void * gex_am_src_desc_opaque_t
Definition gasnetex_wrapper.h:43
void * gex_addr_opaque_t
Definition gasnetex_wrapper.h:41
uint32_t gex_rank_t
Definition gasnetex_wrapper.h:29
uint32_t gex_dt_t
Definition gasnetex_wrapper.h:31
void * gex_mk_opaque_t
Definition gasnetex_wrapper.h:40
uint32_t gex_flags_t
Definition gasnetex_wrapper.h:28
void * gex_segment_opaque_t
Definition gasnetex_wrapper.h:39
void * gex_ep_opaque_t
Definition gasnetex_wrapper.h:37
int GEX_EXPORT realm_gex_wrapper_init(gex_wrapper_handle_t *handle)
struct gex_callback_handle_s gex_callback_handle_t
void * gex_client_opaque_t
Definition gasnetex_wrapper.h:36
int(* gex_wrapper_init_pfn)(gex_wrapper_handle_t *handle)
Definition gasnetex_wrapper.h:275
Definition gasnetex_wrapper.h:251
void * gex_internal
Definition gasnetex_wrapper.h:252
void(* handle_completion_reply)(void *gex_internal, gex_rank_t srcrank, const gex_am_arg_t *args, size_t nargs)
Definition gasnetex_wrapper.h:268
gex_am_arg_t(* handle_short)(void *gex_internal, gex_rank_t srcrank, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes)
Definition gasnetex_wrapper.h:253
size_t(* handle_batch)(void *gex_internal, gex_rank_t srcrank, gex_am_arg_t arg0, gex_am_arg_t cksum, const void *data, size_t data_bytes, gex_am_arg_t *comps)
Definition gasnetex_wrapper.h:265
gex_am_arg_t(* handle_long)(void *gex_internal, gex_rank_t srcrank, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, const void *data, size_t data_bytes)
Definition gasnetex_wrapper.h:258
void(* handle_reverse_get)(void *gex_internal, gex_rank_t srcrank, gex_ep_index_t src_ep_index, gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, uintptr_t src_ptr, uintptr_t tgt_ptr, size_t payload_bytes)
Definition gasnetex_wrapper.h:261
gex_am_arg_t(* handle_medium)(void *gex_internal, gex_rank_t srcrank, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, const void *data, size_t data_bytes)
Definition gasnetex_wrapper.h:255
Handle structure that contains the full API for the wrapper.
Definition gasnetex_wrapper.h:77
bool GEX_HAVE_MK_CLASS_HIP
Definition gasnetex_wrapper.h:88
void(* gex_coll_bcast)(gex_tm_opaque_t tm, gex_rank_t root, void *dst, const void *src, size_t nbytes, gex_flags_t flags)
Definition gasnetex_wrapper.h:166
size_t(* gex_am_src_desc_size)(gex_am_src_desc_opaque_t sd)
Definition gasnetex_wrapper.h:144
size_t(* max_request_long)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, size_t hdr_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags)
Definition gasnetex_wrapper.h:210
void(* gex_coll_barrier)(gex_tm_opaque_t tm, gex_flags_t flags)
Definition gasnetex_wrapper.h:164
bool GEX_NATIVE_NP_ALLOC_REQ_MEDIUM
Definition gasnetex_wrapper.h:86
int(* gex_mk_create_cuda)(gex_mk_opaque_t *memkind_p, gex_client_opaque_t client, int device, gex_flags_t flags)
Definition gasnetex_wrapper.h:115
int(* gex_ep_create)(gex_ep_opaque_t *ep_p, gex_ep_index_t *ep_index, gex_client_opaque_t client, gex_ep_capabilities_t capabilities, gex_flags_t flags, const void *val)
Definition gasnetex_wrapper.h:104
int GEX_RELEASE
Definition gasnetex_wrapper.h:83
void(* gex_query_shared_peers)(gex_rank_t *num_shared_ranks, gex_rank_t **shared_ranks)
Definition gasnetex_wrapper.h:128
int(* gex_segment_create)(gex_segment_opaque_t *segment_p, gex_client_opaque_t client, gex_addr_opaque_t address, uintptr_t length, gex_mk_opaque_t kind, gex_flags_t flags)
Definition gasnetex_wrapper.h:121
int(* gex_am_poll)(void)
Definition gasnetex_wrapper.h:148
int(* send_request_put_header)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, uintptr_t dest_addr, size_t payload_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags)
Definition gasnetex_wrapper.h:232
void(* gex_coll_allgatherv)(gex_tm_opaque_t tm, const void *val_in, void *vals_out, int *bytes, int *offsets, gex_flags_t flags)
Definition gasnetex_wrapper.h:175
uint16_t max_eps
Definition gasnetex_wrapper.h:80
gex_am_src_desc_opaque_t(* prepare_request_medium)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, size_t hdr_bytes, const void *data, size_t min_data_bytes, size_t max_data_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags)
Definition gasnetex_wrapper.h:202
size_t(* max_request_medium)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, size_t hdr_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags)
Definition gasnetex_wrapper.h:192
int(* send_completion_reply)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, const gex_am_arg_t *args, size_t nargs, gex_flags_t flags)
Definition gasnetex_wrapper.h:184
int(* gex_mk_create_hip)(gex_mk_opaque_t *memkind_p, gex_client_opaque_t client, int device, gex_flags_t flags)
Definition gasnetex_wrapper.h:118
int GEX_API
Definition gasnetex_wrapper.h:84
gex_event_opaque_t(* gex_rma_iput)(gex_ep_opaque_t local_ep, gex_ep_index_t remote_ep_index, gex_rank_t rank, void *dest, const void *src, size_t nbytes, gex_event_opaque_t *lc_opt, gex_flags_t flags)
Definition gasnetex_wrapper.h:157
void(* gex_nbi_wait_ec_am)(gex_flags_t flags)
Definition gasnetex_wrapper.h:130
bool GEX_RMA_HONORS_IMMEDIATE_FLAG
Definition gasnetex_wrapper.h:85
bool GEX_HAVE_MK_CLASS_CUDA_UVA
Definition gasnetex_wrapper.h:87
gex_event_opaque_t(* gex_coll_ireduce)(gex_tm_opaque_t tm, void *dst, const void *src, gex_dt_t dt, size_t dt_sz, size_t dt_cnt, gex_op_t op, gex_flags_t flags)
Definition gasnetex_wrapper.h:178
gex_am_src_desc_opaque_t(* prepare_request_batch)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, const void *data, size_t min_data_bytes, size_t max_data_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags)
Definition gasnetex_wrapper.h:238
void(* commit_request_batch)(gex_am_src_desc_opaque_t srcdesc, gex_am_arg_t arg0, gex_am_arg_t cksum, size_t data_bytes)
Definition gasnetex_wrapper.h:243
int(* send_request_rget)(gex_tm_opaque_t prim_tm, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, gex_ep_index_t payload_ep_index, const void *payload, size_t payload_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags, uintptr_t dest_addr)
Definition gasnetex_wrapper.h:223
int(* gex_event_test)(gex_event_opaque_t event)
Definition gasnetex_wrapper.h:142
int(* gex_client_init)(gex_client_opaque_t *client_p, gex_ep_opaque_t *ep_p, gex_tm_opaque_t *tm_p, gex_rank_t *rank, gex_rank_t *size, const char *clientName, int *argc, char ***argv, gex_flags_t flags, const void *val)
Definition gasnetex_wrapper.h:92
size_t handle_size
Definition gasnetex_wrapper.h:79
int(* send_request_long)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, const void *data, size_t data_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags, uintptr_t dest_addr)
Definition gasnetex_wrapper.h:214
int(* send_request_medium)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, const void *data, size_t data_bytes, gex_event_opaque_t *lc_opt, gex_flags_t flags)
Definition gasnetex_wrapper.h:196
int(* send_request_short)(gex_ep_opaque_t src_ep, gex_rank_t tgt_rank, gex_ep_index_t tgt_ep_index, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, gex_flags_t flags)
Definition gasnetex_wrapper.h:188
void(* commit_request_medium)(gex_am_src_desc_opaque_t srcdesc, gex_am_arg_t arg0, const void *hdr, size_t hdr_bytes, size_t data_bytes)
Definition gasnetex_wrapper.h:207
void(* gex_coll_allgather)(gex_tm_opaque_t tm, const void *val_in, void *vals_out, size_t bytes, gex_flags_t flags)
Definition gasnetex_wrapper.h:172
void(* gex_ep_bind_segment)(gex_ep_opaque_t ep, gex_segment_opaque_t segment, gex_flags_t flags)
Definition gasnetex_wrapper.h:125
int conduit
Definition gasnetex_wrapper.h:81
gex_event_opaque_t(* gex_rma_iget)(gex_ep_opaque_t local_ep, gex_ep_index_t remote_ep_index, void *dest, gex_rank_t rank, void *src, size_t nbytes, gex_flags_t flags)
Definition gasnetex_wrapper.h:152
size_t AM_LUBRequestMedium
Definition gasnetex_wrapper.h:82
int(* gex_ep_publish_bound_segment)(gex_tm_opaque_t tm, gex_ep_opaque_t *eps, size_t num_eps, gex_flags_t flags)
Definition gasnetex_wrapper.h:138
void(* gex_coll_gather)(gex_tm_opaque_t tm, gex_rank_t root, const void *val_in, void *vals_out, size_t bytes, gex_flags_t flags)
Definition gasnetex_wrapper.h:169
NodeID src
Definition ucp_internal.h:1