pml_ob1_hdr.h

来自「MPI stands for the Message Passing Inter」· C头文件 代码 · 共 252 行

H
252
字号
/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana *                         University Research and Technology *                         Corporation.  All rights reserved. * Copyright (c) 2004-2005 The University of Tennessee and The University *                         of Tennessee Research Foundation.  All rights *                         reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,  *                         University of Stuttgart.  All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. *                         All rights reserved. * $COPYRIGHT$ *  * Additional copyrights may follow *  * $HEADER$ *//** * @file */#ifndef MCA_PML_OB1_HEADER_H#define MCA_PML_OB1_HEADER_H#include "ompi_config.h"#ifdef HAVE_SYS_TYPES_H#include <sys/types.h>#endif#ifdef HAVE_NETINET_IN_H#include <netinet/in.h>#endif#include "opal/types.h"#define MCA_PML_OB1_HDR_TYPE_MATCH     1#define MCA_PML_OB1_HDR_TYPE_RNDV      2#define MCA_PML_OB1_HDR_TYPE_RGET      3#define MCA_PML_OB1_HDR_TYPE_ACK       4#define MCA_PML_OB1_HDR_TYPE_NACK      5#define MCA_PML_OB1_HDR_TYPE_FRAG      6#define MCA_PML_OB1_HDR_TYPE_GET       7#define MCA_PML_OB1_HDR_TYPE_PUT       8#define MCA_PML_OB1_HDR_TYPE_FIN       9#define MCA_PML_OB1_HDR_TYPE_MAX       10#define MCA_PML_OB1_HDR_FLAGS_ACK     1  /* is an ack required */#define MCA_PML_OB1_HDR_FLAGS_NBO     2  /* is the hdr in network byte order */#define MCA_PML_OB1_HDR_FLAGS_PIN     4  /* is user buffer pinned */#define MCA_PML_OB1_HDR_FLAGS_CONTIG  8  /* is user buffer contiguous *//** * Common hdr attributes - must be first element in each hdr type  */struct mca_pml_ob1_common_hdr_t {    uint8_t hdr_type;  /**< type of envelope */    uint8_t hdr_flags; /**< flags indicating how fragment should be processed */};typedef struct mca_pml_ob1_common_hdr_t mca_pml_ob1_common_hdr_t;#define MCA_PML_OB1_COMMON_HDR_NTOH(h) #define MCA_PML_OB1_COMMON_HDR_HTON(h) /** *  Header definition for the first fragment, contains the  *  attributes required to match the corresponding posted receive. */struct mca_pml_ob1_match_hdr_t {    mca_pml_ob1_common_hdr_t hdr_common;   /**< common attributes */    uint16_t hdr_ctx;                      /**< communicator index */    int32_t  hdr_src;                      /**< source rank */    int32_t  hdr_tag;                      /**< user tag */    uint16_t hdr_seq;                      /**< message sequence number */#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT    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 */#endif};typedef struct mca_pml_ob1_match_hdr_t mca_pml_ob1_match_hdr_t;#define MCA_PML_OB1_MATCH_HDR_NTOH(h) \    do { \    MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \    (h).hdr_ctx = ntohs((h).hdr_ctx); \    (h).hdr_src = ntohl((h).hdr_src); \    (h).hdr_tag = ntohl((h).hdr_tag); \    (h).hdr_seq = ntohs((h).hdr_seq); \    } while (0)#define MCA_PML_OB1_MATCH_HDR_HTON(h) \    do { \    MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \    (h).hdr_ctx = htons((h).hdr_ctx); \    (h).hdr_src = htonl((h).hdr_src); \    (h).hdr_tag = htonl((h).hdr_tag); \    (h).hdr_seq = htons((h).hdr_seq); \    } while (0)     /** * Header definition for the first fragment when an acknowledgment * is required. This could be the first fragment of a large message * or a short message that requires an ack (synchronous). */struct mca_pml_ob1_rendezvous_hdr_t {    mca_pml_ob1_match_hdr_t hdr_match;    uint64_t hdr_msg_length;            /**< message length */    ompi_ptr_t hdr_src_req;             /**< pointer to source request - returned in ack */};typedef struct mca_pml_ob1_rendezvous_hdr_t mca_pml_ob1_rendezvous_hdr_t;/* Note that hdr_src_req is not put in network byte order because it   is never processed by the receiver, other than being copied into   the ack header */#define MCA_PML_OB1_RNDV_HDR_NTOH(h) \    do { \    MCA_PML_OB1_MATCH_HDR_NTOH((h).hdr_match); \    (h).hdr_msg_length = ntoh64((h).hdr_msg_length); \    } while (0)#define MCA_PML_OB1_RNDV_HDR_HTON(h) \    do { \    MCA_PML_OB1_MATCH_HDR_HTON((h).hdr_match); \    (h).hdr_msg_length = hton64((h).hdr_msg_length); \    } while (0) /** * Header definition for a combined rdma rendezvous/get */struct mca_pml_ob1_rget_hdr_t {    mca_pml_ob1_rendezvous_hdr_t hdr_rndv;    uint32_t hdr_seg_cnt;                     /**< number of segments for rdma */#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT    uint8_t hdr_padding[4];#endif    ompi_ptr_t hdr_des;                       /**< source descriptor */    mca_btl_base_segment_t hdr_segs[1];       /**< list of segments for rdma */};typedef struct mca_pml_ob1_rget_hdr_t mca_pml_ob1_rget_hdr_t;/** *  Header for subsequent fragments. */struct mca_pml_ob1_frag_hdr_t {    mca_pml_ob1_common_hdr_t hdr_common;     /**< common attributes */#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT    uint8_t hdr_padding[6];#endif    uint64_t hdr_frag_offset;                /**< offset into message */    ompi_ptr_t hdr_src_req;                  /**< pointer to source request */    ompi_ptr_t hdr_dst_req;                  /**< pointer to matched receive */};typedef struct mca_pml_ob1_frag_hdr_t mca_pml_ob1_frag_hdr_t;#define MCA_PML_OB1_FRAG_HDR_NTOH(h) \    do { \    MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \    (h).hdr_frag_offset = ntoh64((h).hdr_frag_offset); \    } while (0)#define MCA_PML_OB1_FRAG_HDR_HTON(h) \    do { \    MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \    (h).hdr_frag_offset = hton64((h).hdr_frag_offset); \    } while (0)/** *  Header used to acknowledgment outstanding fragment(s). */struct mca_pml_ob1_ack_hdr_t {    mca_pml_ob1_common_hdr_t hdr_common;      /**< common attributes */#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT    uint8_t hdr_padding[6];#endif    ompi_ptr_t hdr_src_req;                   /**< source request */    ompi_ptr_t hdr_dst_req;                   /**< matched receive request */    uint64_t hdr_rdma_offset;                 /**< starting point rdma protocol */};typedef struct mca_pml_ob1_ack_hdr_t mca_pml_ob1_ack_hdr_t;/* Note that the request headers are not put in NBO because the   src_req is already in receiver's byte order and the dst_req is not   used by the receiver for anything other than backpointers in return   headers */#define MCA_PML_OB1_ACK_HDR_NTOH(h) \    do { \    MCA_PML_OB1_COMMON_HDR_NTOH(h.hdr_common); \    (h).hdr_rdma_offset = ntoh64((h).hdr_rdma_offset); \    } while (0)#define MCA_PML_OB1_ACK_HDR_HTON(h) \    do { \    MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \    (h).hdr_rdma_offset = hton64((h).hdr_rdma_offset); \    } while (0) /** *  Header used to initiate an RDMA operation. */struct mca_pml_ob1_rdma_hdr_t {    mca_pml_ob1_common_hdr_t hdr_common;      /**< common attributes */#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT    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 */#endif    uint32_t hdr_seg_cnt;                     /**< number of segments for rdma */    ompi_ptr_t hdr_req;                       /**< destination request */    ompi_ptr_t hdr_des;                       /**< source descriptor */    uint64_t hdr_rdma_offset;                 /**< current offset into user buffer */     mca_btl_base_segment_t hdr_segs[1];       /**< list of segments for rdma */};typedef struct mca_pml_ob1_rdma_hdr_t mca_pml_ob1_rdma_hdr_t;/** *  Header used to complete an RDMA operation. */struct mca_pml_ob1_fin_hdr_t {    mca_pml_ob1_common_hdr_t hdr_common;      /**< common attributes */#if OMPI_ENABLE_HETEROGENEOUS_SUPPORT    uint8_t hdr_padding[6];#endif    ompi_ptr_t hdr_des;                       /**< completed descriptor */};typedef struct mca_pml_ob1_fin_hdr_t mca_pml_ob1_fin_hdr_t;#define MCA_PML_OB1_FIN_HDR_NTOH(h) \    do { \    MCA_PML_OB1_COMMON_HDR_NTOH(h.hdr_common); \    } while (0)#define MCA_PML_OB1_FIN_HDR_HTON(h) \    do { \    MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \    } while (0) /** * Union of defined hdr types. */union mca_pml_ob1_hdr_t {    mca_pml_ob1_common_hdr_t hdr_common;    mca_pml_ob1_match_hdr_t hdr_match;    mca_pml_ob1_rendezvous_hdr_t hdr_rndv;    mca_pml_ob1_rget_hdr_t hdr_rget;    mca_pml_ob1_frag_hdr_t hdr_frag;    mca_pml_ob1_ack_hdr_t hdr_ack;    mca_pml_ob1_rdma_hdr_t hdr_rdma;    mca_pml_ob1_fin_hdr_t hdr_fin;};typedef union mca_pml_ob1_hdr_t mca_pml_ob1_hdr_t;#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?