root/opal/mca/btl/usnic/btl_usnic_proc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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-2011 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) 2006      Sandia National Laboratories. All rights
  13  *                         reserved.
  14  * Copyright (c) 2013-2014 Cisco Systems, Inc.  All rights reserved.
  15  * $COPYRIGHT$
  16  *
  17  * Additional copyrights may follow
  18  *
  19  * $HEADER$
  20  */
  21 
  22 #ifndef MCA_BTL_USNIC_PROC_H
  23 #define MCA_BTL_USNIC_PROC_H
  24 
  25 #include "opal/class/opal_object.h"
  26 
  27 #include "btl_usnic.h"
  28 #include "btl_usnic_endpoint.h"
  29 
  30 BEGIN_C_DECLS
  31 
  32 /**
  33  * Represents the state of a remote process and the set of addresses
  34  * that it exports.  An array of these are cached on the usnic
  35  * component (not the usnic module).
  36  *
  37  * Also cache an instance of mca_btl_base_endpoint_t for each BTL
  38  * module that attempts to open a connection to the process.
  39  */
  40 typedef struct opal_btl_usnic_proc_t {
  41     /** allow proc to be placed on a list */
  42     opal_list_item_t super;
  43 
  44     /** pointer to corresponding opal_proc_t */
  45     opal_proc_t *proc_opal;
  46 
  47     /** Addresses received via modex for this remote proc */
  48     opal_btl_usnic_modex_t* proc_modex;
  49     /** Number of entries in the proc_modex array */
  50     size_t proc_modex_count;
  51     /** Whether the modex entry is "claimed" by a module or not */
  52     bool *proc_modex_claimed;
  53 
  54     /** Array of endpoints that have been created to access this proc */
  55     struct mca_btl_base_endpoint_t **proc_endpoints;
  56     /** Number of entries in the proc_endpoints array */
  57     size_t proc_endpoint_count;
  58 
  59     /**
  60      * A table giving the chosen pairing between modules and endpoint
  61      * addresses.  It has size mca_btl_usnic_component.num_modules.
  62      * j=proc_ep_match_table[i] means that
  63      * mca_btl_usnic_component.usnic_active_modules[i] should be paired with
  64      * proc_modex[j].  If there is no pairing for proc_modex[i] then
  65      * proc_ep_match_table[i] will be set to -1
  66      *
  67      * If matchings have not yet been computed for this proc, the pointer will
  68      * be NULL.
  69      */
  70     int *proc_ep_match_table;
  71 
  72     /**
  73      * true iff proc_ep_match_table != NULL and it contains at least one entry
  74      * that is not equal to -1.
  75      */
  76     bool proc_match_exists;
  77 } opal_btl_usnic_proc_t;
  78 
  79 OBJ_CLASS_DECLARATION(opal_btl_usnic_proc_t);
  80 
  81 
  82 opal_btl_usnic_proc_t *opal_btl_usnic_proc_lookup_ompi(opal_proc_t* opal_proc);
  83 
  84 struct opal_btl_usnic_module_t;
  85 
  86 opal_btl_usnic_endpoint_t *
  87 opal_btl_usnic_proc_lookup_endpoint(struct opal_btl_usnic_module_t *receiver,
  88                                     uint64_t sender_hashed_rte_name);
  89 
  90 int opal_btl_usnic_proc_match(opal_proc_t* opal_proc,
  91                               struct opal_btl_usnic_module_t *module,
  92                               opal_btl_usnic_proc_t **proc);
  93 int
  94 opal_btl_usnic_create_endpoint(struct opal_btl_usnic_module_t *module,
  95                 opal_btl_usnic_proc_t *proc,
  96                 opal_btl_usnic_endpoint_t **endpoint_o);
  97 
  98 END_C_DECLS
  99 
 100 #endif

/* [<][>][^][v][top][bottom][index][help] */