mtl_portals.h

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

H
203
字号
/* * Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana *                         University Research and Technology *                         Corporation.  All rights reserved. * Copyright (c) 2004-2007 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$ */#ifndef MTL_PORTALS_H_HAS_BEEN_INCLUDED#define MTL_PORTALS_H_HAS_BEEN_INCLUDED#include "opal/threads/threads.h"#include "opal/threads/condition.h"#include "opal/class/opal_list.h"#include "ompi/class/ompi_free_list.h"#include "opal/util/cmd_line.h"#include "ompi/request/request.h"#include "ompi/mca/mtl/mtl.h"#include "ompi/mca/mtl/base/base.h"#include "ompi/datatype/datatype.h"#include "ompi/datatype/convertor.h"#include "ompi/mca/common/portals/common_portals.h"#if defined(c_plusplus) || defined(__cplusplus)extern "C" {#endifstruct mca_mtl_portals_module_t {    mca_mtl_base_module_t base;    ptl_handle_ni_t ptl_ni_h;    size_t eager_limit;    ptl_handle_eq_t ptl_eq_h;    ptl_handle_eq_t ptl_unexpected_recv_eq_h;    /* insert all posted receives before this handle */    ptl_handle_me_t ptl_match_ins_me_h;    /* last handle in the SEND table entry */    ptl_handle_me_t ptl_unexpected_me_h;    ompi_free_list_t event_fl;    int ptl_recv_short_mds_num;    int ptl_recv_short_mds_size;        opal_list_t ptl_recv_short_blocks;    opal_list_t unexpected_messages;    int ptl_expected_queue_size;    int ptl_unexpected_queue_size;};typedef struct mca_mtl_portals_module_t mca_mtl_portals_module_t;extern mca_mtl_portals_module_t ompi_mtl_portals;OMPI_DECLSPEC mca_mtl_base_component_1_0_0_t mca_mtl_portals_component;struct ompi_mtl_portals_event_t {    struct ompi_free_list_item_t super;    ptl_event_t ev;    bool is_complete;};typedef struct ompi_mtl_portals_event_t ompi_mtl_portals_event_t;OBJ_CLASS_DECLARATION(ompi_mtl_portals_event_t);/* match/ignore bit manipulation * * 0123 4567 01234567 01234567 01234567 01234567 01234567 01234567 01234567 *     |             |                 | * ^   | context id  |      source     |            message tag * |   |             |                 | * +---- protocol */#define PTL_PROTOCOL_MASK 0xF000000000000000ULL#define PTL_CONTEXT_MASK  0x0FFF000000000000ULL#define PTL_SOURCE_MASK   0x0000FFFF00000000ULL#define PTL_TAG_MASK      0x00000000FFFFFFFFULL#define PTL_PROTOCOL_IGNR PTL_PROTOCOL_MASK#define PTL_CONTEXT_IGNR  PTL_CONTEXT_MASK#define PTL_SOURCE_IGNR   PTL_SOURCE_MASK#define PTL_TAG_IGNR      0x000000007FFFFFFFULL#define PTL_SHORT_MSG     0x1000000000000000ULL#define PTL_LONG_MSG      0x2000000000000000ULL#define PTL_READY_MSG     0x4000000000000000ULL/* send posting */#define PTL_SET_SEND_BITS(match_bits, contextid, source, tag, type)     \{                                                                       \    match_bits = contextid;                                             \    match_bits = (match_bits << 16);                                    \    match_bits |= source;                                               \    match_bits = (match_bits << 32);                                    \    match_bits |= (PTL_TAG_MASK & tag) | type;                          \}/* receive posting */#define PTL_SET_RECV_BITS(match_bits, ignore_bits, contextid, source, tag) \{                                                                   \    match_bits = 0;                                                 \    ignore_bits = PTL_PROTOCOL_IGNR;                                \                                                                    \    match_bits = contextid;                                         \    match_bits = (match_bits << 16);                                \                                                                    \    if (MPI_ANY_SOURCE == source) {                                 \        match_bits = (match_bits << 32);                            \        ignore_bits |= PTL_SOURCE_IGNR;                             \    } else {                                                        \        match_bits |= source;                                       \        match_bits = (match_bits << 32);                            \    }                                                               \                                                                    \    if (MPI_ANY_TAG == tag) {                                       \        ignore_bits |= PTL_TAG_IGNR;                                \    } else {                                                        \        match_bits |= (PTL_TAG_MASK & tag);                         \    }                                                               \}#define PTL_IS_SHORT_MSG(match_bits)            \    (0 != (PTL_SHORT_MSG & match_bits))#define PTL_IS_READY_MSG(match_bits)            \    (0 != (PTL_READY_MSG & match_bits))#define PTL_IS_SYNC_MSG(event) \    (0 != event.hdr_data)#define PTL_GET_TAG(match_bits) ((int)(match_bits & PTL_TAG_MASK))#define PTL_GET_SOURCE(match_bits) ((int)((match_bits & PTL_SOURCE_MASK) >> 32))/* MTL interface functions */extern int ompi_mtl_portals_finalize(struct mca_mtl_base_module_t *mtl);extern int ompi_mtl_portals_add_procs(struct mca_mtl_base_module_t* mtl,                           size_t nprocs,                          struct ompi_proc_t** procs,                           struct mca_mtl_base_endpoint_t **mtl_peer_data);extern int ompi_mtl_portals_del_procs(struct mca_mtl_base_module_t* mtl,                           size_t nprocs,                          struct ompi_proc_t** procs,                           struct mca_mtl_base_endpoint_t **mtl_peer_data);extern int ompi_mtl_portals_send(struct mca_mtl_base_module_t* mtl,                          struct ompi_communicator_t* comm,                          int dest,                          int tag,                          struct ompi_convertor_t *convertor,                          mca_pml_base_send_mode_t mode);extern int ompi_mtl_portals_isend(struct mca_mtl_base_module_t* mtl,                          struct ompi_communicator_t* comm,                          int dest,                          int tag,                          struct ompi_convertor_t *convertor,                          mca_pml_base_send_mode_t mode,                          bool blocking,                          mca_mtl_request_t *mtl_request);extern int ompi_mtl_portals_irecv(struct mca_mtl_base_module_t* mtl,                          struct ompi_communicator_t *comm,                          int src,                          int tag,                          struct ompi_convertor_t *convertor,                          mca_mtl_request_t *mtl_request);extern int ompi_mtl_portals_iprobe(struct mca_mtl_base_module_t* mtl,                          struct ompi_communicator_t *comm,                          int src,                          int tag,                          int *flag,                          struct ompi_status_public_t *status);extern int ompi_mtl_portals_cancel(struct mca_mtl_base_module_t* mtl,                          mca_mtl_request_t *mtl_request,                          int flag);extern int ompi_mtl_portals_progress(void);#if defined(c_plusplus) || defined(__cplusplus)}#endif#endif  /* MTL_PORTALS_H_HAS_BEEN_INCLUDED */

⌨️ 快捷键说明

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