root/ompi/mca/mtl/portals4/mtl_portals4_flowctl.h

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

INCLUDED FROM


   1 /*
   2  * Copyright (c) 2012      Sandia National Laboratories.  All rights reserved.
   3  * $COPYRIGHT$
   4  *
   5  * Additional copyrights may follow
   6  *
   7  * $HEADER$
   8  */
   9 
  10 #ifndef MTL_PORTALS_FLOWCTL_H
  11 #define MTL_PORTALS_FLOWCTL_H
  12 
  13 #include "opal/class/opal_free_list.h"
  14 
  15 #include "mtl_portals4_request.h"
  16 
  17 struct mca_mtl_base_endpoint_t;
  18 struct ompi_mtl_portals4_isend_request_t;
  19 
  20 struct ompi_mtl_portals4_pending_request_t {
  21     opal_free_list_item_t super;
  22     mca_pml_base_send_mode_t mode;
  23     void *start;
  24     size_t length;
  25     int contextid;
  26     int tag;
  27     int my_rank;
  28     int fc_notified;
  29     ptl_process_t ptl_proc;
  30     struct ompi_mtl_portals4_isend_request_t *ptl_request;
  31 };
  32 typedef struct ompi_mtl_portals4_pending_request_t ompi_mtl_portals4_pending_request_t;
  33 OBJ_CLASS_DECLARATION(ompi_mtl_portals4_pending_request_t);
  34 
  35 
  36 struct ompi_mtl_portals4_flowctl_t {
  37     int32_t flowctl_active;
  38 
  39     opal_atomic_int32_t send_slots;
  40     int32_t max_send_slots;
  41     opal_list_t pending_sends;
  42     opal_free_list_t pending_fl;
  43 
  44     ompi_mtl_portals4_base_request_t alert_req;
  45     ompi_mtl_portals4_base_request_t fanout_req;
  46 
  47     /** Flow control epoch counter.  Triggered events should be
  48         based on epoch counter. */
  49     opal_atomic_int64_t epoch_counter;
  50 
  51     /** Flow control trigger CT.  Only has meaning at root. */
  52     ptl_handle_ct_t trigger_ct_h;
  53     /** Flow control trigger ME.  Only has meaning at root.  When an
  54         event is received on this ME, it triggers the flow control
  55         alert broadcast.*/
  56     ptl_handle_me_t trigger_me_h;
  57 
  58     /** Flow control alert tree broadcast CT. */
  59     ptl_handle_ct_t alert_ct_h;
  60     /** Flow control alert tree broadcast ME. */
  61     ptl_handle_me_t alert_me_h;
  62 
  63     /** Flow control restart fan-in CT. */
  64     ptl_handle_ct_t fanin_ct_h;
  65     /** Flow control restart fan-in ME. */
  66     ptl_handle_me_t fanin_me_h;
  67 
  68     /** Flow control restart fan-out CT. */
  69     ptl_handle_ct_t fanout_ct_h;
  70     /** Flow control restart fan-out ME. */
  71     ptl_handle_me_t fanout_me_h;
  72 
  73     /** last restart time */
  74     struct timeval tv;
  75     int backoff_count;
  76 
  77     size_t num_procs;
  78     size_t num_children;
  79     ptl_process_t children[2];
  80     ptl_process_t parent;
  81     ptl_process_t me;
  82     ptl_process_t root;
  83     bool i_am_root;
  84 };
  85 typedef struct ompi_mtl_portals4_flowctl_t ompi_mtl_portals4_flowctl_t;
  86 
  87 
  88 int ompi_mtl_portals4_flowctl_init(void);
  89 
  90 int ompi_mtl_portals4_flowctl_fini(void);
  91 
  92 int ompi_mtl_portals4_flowctl_add_procs(size_t me,
  93                                         size_t npeers,
  94                                         struct ompi_proc_t **procs);
  95 
  96 int ompi_mtl_portals4_flowctl_trigger(void);
  97 
  98 void ompi_mtl_portals4_pending_list_progress(void);
  99 
 100 #endif

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