OpenMPI 0.1.1

- Main Page
- Related Pages
- Modules
- Data Structures
- Files

- File List
- Globals

pml_ob1_hdr.h
Go to the documentation of this file.
1 /*
2 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
3 * University Research and Technology
4 * Corporation. All rights reserved.
5 * Copyright (c) 2004-2005 The University of Tennessee and The University
6 * of Tennessee Research Foundation. All rights
7 * reserved.
8 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
9 * University of Stuttgart. All rights reserved.
10 * Copyright (c) 2004-2005 The Regents of the University of California.
11 * All rights reserved.
12 * Copyright (c) 2009 IBM Corporation. All rights reserved.
13 * $COPYRIGHT$
14 *
15 * Additional copyrights may follow
16 *
17 * $HEADER$
18 */
19 /**
20 * @file
21 */
22 #ifndef MCA_PML_OB1_HEADER_H
23 #define MCA_PML_OB1_HEADER_H
24
25 #include "ompi_config.h"
26 #ifdef HAVE_SYS_TYPES_H
27 #include <sys/types.h>
28 #endif
29 #ifdef HAVE_NETINET_IN_H
30 #include <netinet/in.h>
31 #endif
32
33 #include "opal/types.h"
34 #include "opal/util/arch.h"
35 #include "ompi/mca/btl/btl.h"
36 #include "ompi/proc/proc.h"
37
38 #define MCA_PML_OB1_HDR_TYPE_MATCH (MCA_BTL_TAG_PML + 1)
39 #define MCA_PML_OB1_HDR_TYPE_RNDV (MCA_BTL_TAG_PML + 2)
40 #define MCA_PML_OB1_HDR_TYPE_RGET (MCA_BTL_TAG_PML + 3)
41 #define MCA_PML_OB1_HDR_TYPE_ACK (MCA_BTL_TAG_PML + 4)
42 #define MCA_PML_OB1_HDR_TYPE_NACK (MCA_BTL_TAG_PML + 5)
43 #define MCA_PML_OB1_HDR_TYPE_FRAG (MCA_BTL_TAG_PML + 6)
44 #define MCA_PML_OB1_HDR_TYPE_GET (MCA_BTL_TAG_PML + 7)
45 #define MCA_PML_OB1_HDR_TYPE_PUT (MCA_BTL_TAG_PML + 8)
46 #define MCA_PML_OB1_HDR_TYPE_FIN (MCA_BTL_TAG_PML + 9)
47
48 #define MCA_PML_OB1_HDR_FLAGS_ACK 1 /* is an ack required */
49 #define MCA_PML_OB1_HDR_FLAGS_NBO 2 /* is the hdr in network byte order */
50 #define MCA_PML_OB1_HDR_FLAGS_PIN 4 /* is user buffer pinned */
51 #define MCA_PML_OB1_HDR_FLAGS_CONTIG 8 /* is user buffer contiguous */
52 #define MCA_PML_OB1_HDR_FLAGS_NORDMA 16 /* rest will be send by copy-in-out */
53
54 /**
55 * Common hdr attributes - must be first element in each hdr type
56 */
57 struct mca_pml_ob1_common_hdr_t {
58 uint8_t hdr_type; /**< type of envelope */
59 uint8_t hdr_flags; /**< flags indicating how fragment should be processed */
60 };
61 typedef struct mca_pml_ob1_common_hdr_t mca_pml_ob1_common_hdr_t;
62
63 #define MCA_PML_OB1_COMMON_HDR_NTOH(h)
64 #define MCA_PML_OB1_COMMON_HDR_HTON(h)
65
66 /**
67 * Header definition for the first fragment, contains the
68 * attributes required to match the corresponding posted receive.
69 */
70 struct mca_pml_ob1_match_hdr_t {
71 mca_pml_ob1_common_hdr_t hdr_common; /**< common attributes */
72 uint16_t hdr_ctx; /**< communicator index */
73 int32_t hdr_src; /**< source rank */
74 int32_t hdr_tag; /**< user tag */
75 uint16_t hdr_seq; /**< message sequence number */
76 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
77 uint8_t hdr_padding[2]; /**< explicitly pad to 16 bytes. Compilers seem to already prefer to do this, but make it explicit just in case */
78 #endif
79 };
80 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
81 #define OMPI_PML_OB1_MATCH_HDR_LEN 16
82 #else
83 #define OMPI_PML_OB1_MATCH_HDR_LEN 14
84 #endif
85
86 typedef struct mca_pml_ob1_match_hdr_t mca_pml_ob1_match_hdr_t;
87
88 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
89 #define MCA_PML_OB1_MATCH_HDR_FILL(h) \
90 do { \
91 (h).hdr_padding[0] = 0; \
92 (h).hdr_padding[1] = 0; \
93 } while(0)
94 #else
95 #define MCA_PML_OB1_MATCH_HDR_FILL(h)
96 #endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG */
97
98 #define MCA_PML_OB1_MATCH_HDR_NTOH(h) \
99 do { \
100 MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
101 (h).hdr_ctx = ntohs((h).hdr_ctx); \
102 (h).hdr_src = ntohl((h).hdr_src); \
103 (h).hdr_tag = ntohl((h).hdr_tag); \
104 (h).hdr_seq = ntohs((h).hdr_seq); \
105 } while (0)
106
107 #define MCA_PML_OB1_MATCH_HDR_HTON(h) \
108 do { \
109 MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
110 MCA_PML_OB1_MATCH_HDR_FILL(h); \
111 (h).hdr_ctx = htons((h).hdr_ctx); \
112 (h).hdr_src = htonl((h).hdr_src); \
113 (h).hdr_tag = htonl((h).hdr_tag); \
114 (h).hdr_seq = htons((h).hdr_seq); \
115 } while (0)
116
117 /**
118 * Header definition for the first fragment when an acknowledgment
119 * is required. This could be the first fragment of a large message
120 * or a short message that requires an ack (synchronous).
121 */
122 struct mca_pml_ob1_rendezvous_hdr_t {
123 mca_pml_ob1_match_hdr_t hdr_match;
124 uint64_t hdr_msg_length; /**< message length */
125 ompi_ptr_t hdr_src_req; /**< pointer to source request - returned in ack */
126 };
127 typedef struct mca_pml_ob1_rendezvous_hdr_t mca_pml_ob1_rendezvous_hdr_t;
128
129 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
130 #define MCA_PML_OB1_RNDV_HDR_FILL(h) \
131 MCA_PML_OB1_MATCH_HDR_FILL((h).hdr_match)
132 #else
133 #define MCA_PML_OB1_RNDV_HDR_FILL(h)
134 #endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG */
135
136 /* Note that hdr_src_req is not put in network byte order because it
137 is never processed by the receiver, other than being copied into
138 the ack header */
139 #define MCA_PML_OB1_RNDV_HDR_NTOH(h) \
140 do { \
141 MCA_PML_OB1_MATCH_HDR_NTOH((h).hdr_match); \
142 (h).hdr_msg_length = ntoh64((h).hdr_msg_length); \
143 } while (0)
144
145 #define MCA_PML_OB1_RNDV_HDR_HTON(h) \
146 do { \
147 MCA_PML_OB1_MATCH_HDR_HTON((h).hdr_match); \
148 MCA_PML_OB1_RNDV_HDR_FILL(h); \
149 (h).hdr_msg_length = hton64((h).hdr_msg_length); \
150 } while (0)
151
152 /**
153 * Header definition for a combined rdma rendezvous/get
154 */
155 struct mca_pml_ob1_rget_hdr_t {
156 mca_pml_ob1_rendezvous_hdr_t hdr_rndv;
157 uint32_t hdr_seg_cnt; /**< number of segments for rdma */
158 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
159 uint8_t hdr_padding[4];
160 #endif
161 ompi_ptr_t hdr_des; /**< source descriptor */
162 mca_btl_base_segment_t hdr_segs[1]; /**< list of segments for rdma */
163 };
164 typedef struct mca_pml_ob1_rget_hdr_t mca_pml_ob1_rget_hdr_t;
165
166 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
167 #define MCA_PML_OB1_RGET_HDR_FILL(h) \
168 do { \
169 MCA_PML_OB1_RNDV_HDR_FILL((h).hdr_rndv); \
170 (h).hdr_padding[0] = 0; \
171 (h).hdr_padding[1] = 0; \
172 (h).hdr_padding[2] = 0; \
173 (h).hdr_padding[3] = 0; \
174 } while(0)
175 #else
176 #define MCA_PML_OB1_RGET_HDR_FILL(h)
177 #endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG */
178
179 #define MCA_PML_OB1_RGET_HDR_NTOH(h) \
180 do { \
181 MCA_PML_OB1_RNDV_HDR_NTOH((h).hdr_rndv); \
182 (h).hdr_seg_cnt = ntohl((h).hdr_seg_cnt); \
183 } while (0)
184
185 #define MCA_PML_OB1_RGET_HDR_HTON(h) \
186 do { \
187 MCA_PML_OB1_RNDV_HDR_HTON((h).hdr_rndv); \
188 MCA_PML_OB1_RGET_HDR_FILL(h); \
189 (h).hdr_seg_cnt = htonl((h).hdr_seg_cnt); \
190 } while (0)
191
192 /**
193 * Header for subsequent fragments.
194 */
195 struct mca_pml_ob1_frag_hdr_t {
196 mca_pml_ob1_common_hdr_t hdr_common; /**< common attributes */
197 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
198 uint8_t hdr_padding[6];
199 #endif
200 uint64_t hdr_frag_offset; /**< offset into message */
201 ompi_ptr_t hdr_src_req; /**< pointer to source request */
202 ompi_ptr_t hdr_dst_req; /**< pointer to matched receive */
203 };
204 typedef struct mca_pml_ob1_frag_hdr_t mca_pml_ob1_frag_hdr_t;
205
206 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
207 #define MCA_PML_OB1_FRAG_HDR_FILL(h) \
208 do { \
209 (h).hdr_padding[0] = 0; \
210 (h).hdr_padding[1] = 0; \
211 (h).hdr_padding[2] = 0; \
212 (h).hdr_padding[3] = 0; \
213 (h).hdr_padding[4] = 0; \
214 (h).hdr_padding[5] = 0; \
215 } while(0)
216 #else
217 #define MCA_PML_OB1_FRAG_HDR_FILL(h)
218 #endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG */
219
220 #define MCA_PML_OB1_FRAG_HDR_NTOH(h) \
221 do { \
222 MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
223 (h).hdr_frag_offset = ntoh64((h).hdr_frag_offset); \
224 } while (0)
225
226 #define MCA_PML_OB1_FRAG_HDR_HTON(h) \
227 do { \
228 MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
229 MCA_PML_OB1_FRAG_HDR_FILL(h); \
230 (h).hdr_frag_offset = hton64((h).hdr_frag_offset); \
231 } while (0)
232
233 /**
234 * Header used to acknowledgment outstanding fragment(s).
235 */
236
237 struct mca_pml_ob1_ack_hdr_t {
238 mca_pml_ob1_common_hdr_t hdr_common; /**< common attributes */
239 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
240 uint8_t hdr_padding[6];
241 #endif
242 ompi_ptr_t hdr_src_req; /**< source request */
243 ompi_ptr_t hdr_dst_req; /**< matched receive request */
244 uint64_t hdr_send_offset; /**< starting point of copy in/out */
245 };
246 typedef struct mca_pml_ob1_ack_hdr_t mca_pml_ob1_ack_hdr_t;
247
248 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
249 #define MCA_PML_OB1_ACK_HDR_FILL(h) \
250 do { \
251 (h).hdr_padding[0] = 0; \
252 (h).hdr_padding[1] = 0; \
253 (h).hdr_padding[2] = 0; \
254 (h).hdr_padding[3] = 0; \
255 (h).hdr_padding[4] = 0; \
256 (h).hdr_padding[5] = 0; \
257 } while (0)
258 #else
259 #define MCA_PML_OB1_ACK_HDR_FILL(h)
260 #endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG */
261
262 /* Note that the request headers are not put in NBO because the
263 src_req is already in receiver's byte order and the dst_req is not
264 used by the receiver for anything other than backpointers in return
265 headers */
266 #define MCA_PML_OB1_ACK_HDR_NTOH(h) \
267 do { \
268 MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
269 (h).hdr_send_offset = ntoh64((h).hdr_send_offset); \
270 } while (0)
271
272 #define MCA_PML_OB1_ACK_HDR_HTON(h) \
273 do { \
274 MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
275 MCA_PML_OB1_ACK_HDR_FILL(h); \
276 (h).hdr_send_offset = hton64((h).hdr_send_offset); \
277 } while (0)
278
279 /**
280 * Header used to initiate an RDMA operation.
281 */
282
283 struct mca_pml_ob1_rdma_hdr_t {
284 mca_pml_ob1_common_hdr_t hdr_common; /**< common attributes */
285 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
286 uint8_t hdr_padding[2]; /** two to pad out the hdr to a 4 byte alignment. hdr_req will then be 8 byte aligned after 4 for hdr_seg_cnt */
287 #endif
288 uint32_t hdr_seg_cnt; /**< number of segments for rdma */
289 ompi_ptr_t hdr_req; /**< destination request */
290 ompi_ptr_t hdr_des; /**< source descriptor */
291 uint64_t hdr_rdma_offset; /**< current offset into user buffer */
292 mca_btl_base_segment_t hdr_segs[1]; /**< list of segments for rdma */
293 };
294 typedef struct mca_pml_ob1_rdma_hdr_t mca_pml_ob1_rdma_hdr_t;
295
296 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
297 #define MCA_PML_OB1_RDMA_HDR_FILL(h) \
298 do { \
299 (h).hdr_padding[0] = 0; \
300 (h).hdr_padding[1] = 0; \
301 } while(0)
302 #else
303 #define MCA_PML_OB1_RDMA_HDR_FILL(h)
304 #endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG */
305
306 #define MCA_PML_OB1_RDMA_HDR_NTOH(h) \
307 do { \
308 MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
309 (h).hdr_seg_cnt = ntohl((h).hdr_seg_cnt); \
310 (h).hdr_rdma_offset = ntoh64((h).hdr_rdma_offset); \
311 } while (0)
312
313 #define MCA_PML_OB1_RDMA_HDR_HTON(h) \
314 do { \
315 MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
316 MCA_PML_OB1_RDMA_HDR_FILL(h); \
317 (h).hdr_seg_cnt = htonl((h).hdr_seg_cnt); \
318 (h).hdr_rdma_offset = hton64((h).hdr_rdma_offset); \
319 } while (0)
320
321 /**
322 * Header used to complete an RDMA operation.
323 */
324
325 struct mca_pml_ob1_fin_hdr_t {
326 mca_pml_ob1_common_hdr_t hdr_common; /**< common attributes */
327 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
328 uint8_t hdr_padding[2];
329 #endif
330 uint32_t hdr_fail; /**< RDMA operation failed */
331 ompi_ptr_t hdr_des; /**< completed descriptor */
332 };
333 typedef struct mca_pml_ob1_fin_hdr_t mca_pml_ob1_fin_hdr_t;
334
335 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
336 #define MCA_PML_OB1_FIN_HDR_FILL(h) \
337 do { \
338 (h).hdr_padding[0] = 0; \
339 (h).hdr_padding[1] = 0; \
340 } while (0)
341 #else
342 #define MCA_PML_OB1_FIN_HDR_FILL(h)
343 #endif /* OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG */
344
345 #define MCA_PML_OB1_FIN_HDR_NTOH(h) \
346 do { \
347 MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
348 } while (0)
349
350 #define MCA_PML_OB1_FIN_HDR_HTON(h) \
351 do { \
352 MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
353 MCA_PML_OB1_FIN_HDR_FILL(h); \
354 } while (0)
355
356 /**
357 * Union of defined hdr types.
358 */
359 union mca_pml_ob1_hdr_t {
360 mca_pml_ob1_common_hdr_t hdr_common;
361 mca_pml_ob1_match_hdr_t hdr_match;
362 mca_pml_ob1_rendezvous_hdr_t hdr_rndv;
363 mca_pml_ob1_rget_hdr_t hdr_rget;
364 mca_pml_ob1_frag_hdr_t hdr_frag;
365 mca_pml_ob1_ack_hdr_t hdr_ack;
366 mca_pml_ob1_rdma_hdr_t hdr_rdma;
367 mca_pml_ob1_fin_hdr_t hdr_fin;
368 };
369 typedef union mca_pml_ob1_hdr_t mca_pml_ob1_hdr_t;
370
371 #if !defined(WORDS_BIGENDIAN) && OPAL_ENABLE_HETEROGENEOUS_SUPPORT
372 static inline __opal_attribute_always_inline__ void
373 ob1_hdr_ntoh(mca_pml_ob1_hdr_t *hdr, const uint8_t hdr_type)
374 {
375 if(!(hdr->hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_NBO))
376 return;
377
378 switch(hdr_type) {
379 case MCA_PML_OB1_HDR_TYPE_MATCH:
380 MCA_PML_OB1_MATCH_HDR_NTOH(hdr->hdr_match);
381 break;
382 case MCA_PML_OB1_HDR_TYPE_RNDV:
383 MCA_PML_OB1_RNDV_HDR_NTOH(hdr->hdr_rndv);
384 break;
385 case MCA_PML_OB1_HDR_TYPE_RGET:
386 MCA_PML_OB1_RGET_HDR_NTOH(hdr->hdr_rget);
387 break;
388 case MCA_PML_OB1_HDR_TYPE_ACK:
389 MCA_PML_OB1_ACK_HDR_NTOH(hdr->hdr_ack);
390 break;
391 case MCA_PML_OB1_HDR_TYPE_FRAG:
392 MCA_PML_OB1_FRAG_HDR_NTOH(hdr->hdr_frag);
393 break;
394 case MCA_PML_OB1_HDR_TYPE_PUT:
395 MCA_PML_OB1_RDMA_HDR_NTOH(hdr->hdr_rdma);
396 break;
397 case MCA_PML_OB1_HDR_TYPE_FIN:
398 MCA_PML_OB1_FIN_HDR_NTOH(hdr->hdr_fin);
399 break;
400 default:
401 assert(0);
402 break;
403 }
404 }
405 #else
406 #define ob1_hdr_ntoh(h, t) do{}while(0)
407 #endif
408
409 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
410 #define ob1_hdr_hton(h, t, p) \
411 ob1_hdr_hton_intr((mca_pml_ob1_hdr_t*)h, t, p)
412 static inline __opal_attribute_always_inline__ void
413 ob1_hdr_hton_intr(mca_pml_ob1_hdr_t *hdr, const uint8_t hdr_type,
414 const ompi_proc_t *proc)
415 {
416 #ifdef WORDS_BIGENDIAN
417 hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
418 #else
419
420 if(!(proc->proc_arch & OPAL_ARCH_ISBIGENDIAN))
421 return;
422
423 hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
424 switch(hdr_type) {
425 case MCA_PML_OB1_HDR_TYPE_MATCH:
426 MCA_PML_OB1_MATCH_HDR_HTON(hdr->hdr_match);
427 break;
428 case MCA_PML_OB1_HDR_TYPE_RNDV:
429 MCA_PML_OB1_RNDV_HDR_HTON(hdr->hdr_rndv);
430 break;
431 case MCA_PML_OB1_HDR_TYPE_RGET:
432 MCA_PML_OB1_RGET_HDR_HTON(hdr->hdr_rget);
433 break;
434 case MCA_PML_OB1_HDR_TYPE_ACK:
435 MCA_PML_OB1_ACK_HDR_HTON(hdr->hdr_ack);
436 break;
437 case MCA_PML_OB1_HDR_TYPE_FRAG:
438 MCA_PML_OB1_FRAG_HDR_HTON(hdr->hdr_frag);
439 break;
440 case MCA_PML_OB1_HDR_TYPE_PUT:
441 MCA_PML_OB1_RDMA_HDR_HTON(hdr->hdr_rdma);
442 break;
443 case MCA_PML_OB1_HDR_TYPE_FIN:
444 MCA_PML_OB1_FIN_HDR_HTON(hdr->hdr_fin);
445 break;
446 default:
447 assert(0);
448 break;
449 }
450 #endif
451 }
452 #else
453 #define ob1_hdr_hton(h, t, p) do{}while(0)
454 #endif
455 #endif
mca_pml_ob1_match_hdr_t::hdr_tag
int32_t hdr_tag
user tag
Definition: pml_ob1_hdr.h:74
mca_pml_ob1_fin_hdr_t
Header used to complete an RDMA operation.
Definition: pml_ob1_hdr.h:325
mca_pml_ob1_frag_hdr_t::hdr_dst_req
ompi_ptr_t hdr_dst_req
pointer to matched receive
Definition: pml_ob1_hdr.h:202
mca_pml_ob1_rget_hdr_t
Header definition for a combined rdma rendezvous/get.
Definition: pml_ob1_hdr.h:155
mca_pml_ob1_rdma_hdr_t
Header used to initiate an RDMA operation.
Definition: pml_ob1_hdr.h:283
mca_pml_ob1_rdma_hdr_t::hdr_common
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:284
mca_pml_ob1_rdma_hdr_t::hdr_segs
mca_btl_base_segment_t hdr_segs[1]
list of segments for rdma
Definition: pml_ob1_hdr.h:292
mca_pml_ob1_common_hdr_t
Common hdr attributes - must be first element in each hdr type.
Definition: pml_ob1_hdr.h:57
mca_pml_ob1_rendezvous_hdr_t::hdr_msg_length
uint64_t hdr_msg_length
message length
Definition: pml_ob1_hdr.h:124
mca_pml_ob1_rget_hdr_t::hdr_des
ompi_ptr_t hdr_des
source descriptor
Definition: pml_ob1_hdr.h:161
mca_pml_ob1_rdma_hdr_t::hdr_req
ompi_ptr_t hdr_req
destination request
Definition: pml_ob1_hdr.h:289
ompi_ptr_t
Definition: types.h:52
mca_pml_ob1_rdma_hdr_t::hdr_seg_cnt
uint32_t hdr_seg_cnt
number of segments for rdma
Definition: pml_ob1_hdr.h:288
mca_pml_ob1_match_hdr_t
Header definition for the first fragment, contains the attributes required to match the corresponding...
Definition: pml_ob1_hdr.h:70
mca_pml_ob1_frag_hdr_t::hdr_src_req
ompi_ptr_t hdr_src_req
pointer to source request
Definition: pml_ob1_hdr.h:201
proc.h
Process identification structure interface.
ompi_proc_t
Remote Open MPI process structure.
Definition: proc.h:56
mca_pml_ob1_rendezvous_hdr_t
Header definition for the first fragment when an acknowledgment is required.
Definition: pml_ob1_hdr.h:122
mca_pml_ob1_match_hdr_t::hdr_ctx
uint16_t hdr_ctx
communicator index
Definition: pml_ob1_hdr.h:72
mca_pml_ob1_rget_hdr_t::hdr_segs
mca_btl_base_segment_t hdr_segs[1]
list of segments for rdma
Definition: pml_ob1_hdr.h:162
mca_pml_ob1_ack_hdr_t::hdr_common
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:238
mca_pml_ob1_ack_hdr_t::hdr_src_req
ompi_ptr_t hdr_src_req
source request
Definition: pml_ob1_hdr.h:242
mca_pml_ob1_hdr_t
Union of defined hdr types.
Definition: pml_ob1_hdr.h:359
mca_pml_ob1_common_hdr_t::hdr_type
uint8_t hdr_type
type of envelope
Definition: pml_ob1_hdr.h:58
mca_pml_ob1_rget_hdr_t::hdr_seg_cnt
uint32_t hdr_seg_cnt
number of segments for rdma
Definition: pml_ob1_hdr.h:157
mca_pml_ob1_match_hdr_t::hdr_src
int32_t hdr_src
source rank
Definition: pml_ob1_hdr.h:73
mca_pml_ob1_ack_hdr_t::hdr_dst_req
ompi_ptr_t hdr_dst_req
matched receive request
Definition: pml_ob1_hdr.h:243
btl.h
Byte Transfer Layer (BTL)
mca_pml_ob1_rendezvous_hdr_t::hdr_src_req
ompi_ptr_t hdr_src_req
pointer to source request - returned in ack
Definition: pml_ob1_hdr.h:125
mca_pml_ob1_match_hdr_t::hdr_common
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:71
mca_pml_ob1_fin_hdr_t::hdr_fail
uint32_t hdr_fail
RDMA operation failed.
Definition: pml_ob1_hdr.h:330
mca_pml_ob1_rdma_hdr_t::hdr_des
ompi_ptr_t hdr_des
source descriptor
Definition: pml_ob1_hdr.h:290
mca_pml_ob1_fin_hdr_t::hdr_common
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:326
mca_pml_ob1_fin_hdr_t::hdr_des
ompi_ptr_t hdr_des
completed descriptor
Definition: pml_ob1_hdr.h:331
mca_pml_ob1_frag_hdr_t::hdr_frag_offset
uint64_t hdr_frag_offset
offset into message
Definition: pml_ob1_hdr.h:200
ompi_proc_t::proc_arch
uint32_t proc_arch
architecture of this process
Definition: proc.h:66
mca_pml_ob1_rdma_hdr_t::hdr_rdma_offset
uint64_t hdr_rdma_offset
current offset into user buffer
Definition: pml_ob1_hdr.h:291
mca_pml_ob1_frag_hdr_t::hdr_common
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:196
mca_pml_ob1_frag_hdr_t
Header for subsequent fragments.
Definition: pml_ob1_hdr.h:195
mca_pml_ob1_ack_hdr_t
Header used to acknowledgment outstanding fragment(s).
Definition: pml_ob1_hdr.h:237
mca_pml_ob1_match_hdr_t::hdr_seq
uint16_t hdr_seq
message sequence number
Definition: pml_ob1_hdr.h:75
mca_pml_ob1_ack_hdr_t::hdr_send_offset
uint64_t hdr_send_offset
starting point of copy in/out
Definition: pml_ob1_hdr.h:244
mca_btl_base_segment_t
Describes a region/segment of memory that is addressable by an BTL.
Definition: btl.h:236
mca_pml_ob1_common_hdr_t::hdr_flags
uint8_t hdr_flags
flags indicating how fragment should be processed
Definition: pml_ob1_hdr.h:59