OpenMPI  0.1.1
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  */
58  uint8_t hdr_type; /**< type of envelope */
59  uint8_t hdr_flags; /**< flags indicating how fragment should be processed */
60 };
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  */
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 
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  */
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 };
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  */
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 };
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  */
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 };
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 
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 };
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 
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 };
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 
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 };
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  */
360  mca_pml_ob1_common_hdr_t hdr_common;
361  mca_pml_ob1_match_hdr_t hdr_match;
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 };
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
int32_t hdr_tag
user tag
Definition: pml_ob1_hdr.h:74
Header used to complete an RDMA operation.
Definition: pml_ob1_hdr.h:325
ompi_ptr_t hdr_dst_req
pointer to matched receive
Definition: pml_ob1_hdr.h:202
Header definition for a combined rdma rendezvous/get.
Definition: pml_ob1_hdr.h:155
Header used to initiate an RDMA operation.
Definition: pml_ob1_hdr.h:283
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:284
mca_btl_base_segment_t hdr_segs[1]
list of segments for rdma
Definition: pml_ob1_hdr.h:292
Common hdr attributes - must be first element in each hdr type.
Definition: pml_ob1_hdr.h:57
uint64_t hdr_msg_length
message length
Definition: pml_ob1_hdr.h:124
ompi_ptr_t hdr_des
source descriptor
Definition: pml_ob1_hdr.h:161
ompi_ptr_t hdr_req
destination request
Definition: pml_ob1_hdr.h:289
Definition: types.h:52
uint32_t hdr_seg_cnt
number of segments for rdma
Definition: pml_ob1_hdr.h:288
Header definition for the first fragment, contains the attributes required to match the corresponding...
Definition: pml_ob1_hdr.h:70
ompi_ptr_t hdr_src_req
pointer to source request
Definition: pml_ob1_hdr.h:201
Process identification structure interface.
Remote Open MPI process structure.
Definition: proc.h:56
Header definition for the first fragment when an acknowledgment is required.
Definition: pml_ob1_hdr.h:122
uint16_t hdr_ctx
communicator index
Definition: pml_ob1_hdr.h:72
mca_btl_base_segment_t hdr_segs[1]
list of segments for rdma
Definition: pml_ob1_hdr.h:162
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:238
ompi_ptr_t hdr_src_req
source request
Definition: pml_ob1_hdr.h:242
Union of defined hdr types.
Definition: pml_ob1_hdr.h:359
uint8_t hdr_type
type of envelope
Definition: pml_ob1_hdr.h:58
uint32_t hdr_seg_cnt
number of segments for rdma
Definition: pml_ob1_hdr.h:157
int32_t hdr_src
source rank
Definition: pml_ob1_hdr.h:73
ompi_ptr_t hdr_dst_req
matched receive request
Definition: pml_ob1_hdr.h:243
Byte Transfer Layer (BTL)
ompi_ptr_t hdr_src_req
pointer to source request - returned in ack
Definition: pml_ob1_hdr.h:125
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:71
uint32_t hdr_fail
RDMA operation failed.
Definition: pml_ob1_hdr.h:330
ompi_ptr_t hdr_des
source descriptor
Definition: pml_ob1_hdr.h:290
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:326
ompi_ptr_t hdr_des
completed descriptor
Definition: pml_ob1_hdr.h:331
uint64_t hdr_frag_offset
offset into message
Definition: pml_ob1_hdr.h:200
uint32_t proc_arch
architecture of this process
Definition: proc.h:66
uint64_t hdr_rdma_offset
current offset into user buffer
Definition: pml_ob1_hdr.h:291
mca_pml_ob1_common_hdr_t hdr_common
common attributes
Definition: pml_ob1_hdr.h:196
Header for subsequent fragments.
Definition: pml_ob1_hdr.h:195
Header used to acknowledgment outstanding fragment(s).
Definition: pml_ob1_hdr.h:237
uint16_t hdr_seq
message sequence number
Definition: pml_ob1_hdr.h:75
uint64_t hdr_send_offset
starting point of copy in/out
Definition: pml_ob1_hdr.h:244
Describes a region/segment of memory that is addressable by an BTL.
Definition: btl.h:236
uint8_t hdr_flags
flags indicating how fragment should be processed
Definition: pml_ob1_hdr.h:59