This source file includes following definitions.
- sm_close
- sm_verify_mca_variables
- sm_register
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 #include "ompi_config.h"
  32 
  33 #include "opal/util/show_help.h"
  34 #include "opal/util/printf.h"
  35 #include "ompi/constants.h"
  36 #include "ompi/mca/coll/coll.h"
  37 #include "coll_sm.h"
  38 
  39 
  40 
  41 
  42 
  43 const char *mca_coll_sm_component_version_string =
  44     "Open MPI sm collective MCA component version " OMPI_VERSION;
  45 
  46 
  47 
  48 
  49 
  50 static int sm_close(void);
  51 static int sm_register(void);
  52 
  53 static int coll_sm_shared_mem_used_data;
  54 
  55 
  56 
  57 
  58 
  59 
  60 mca_coll_sm_component_t mca_coll_sm_component = {
  61 
  62     
  63 
  64     {
  65         
  66 
  67 
  68         .collm_version = {
  69             MCA_COLL_BASE_VERSION_2_0_0,
  70 
  71             
  72             .mca_component_name = "sm",
  73             MCA_BASE_MAKE_VERSION(component, OMPI_MAJOR_VERSION, OMPI_MINOR_VERSION,
  74                                   OMPI_RELEASE_VERSION),
  75 
  76             
  77             .mca_close_component = sm_close,
  78             .mca_register_component_params = sm_register,
  79         },
  80         .collm_data = {
  81             
  82             MCA_BASE_METADATA_PARAM_NONE
  83         },
  84 
  85         
  86 
  87         .collm_init_query = mca_coll_sm_init_query,
  88         .collm_comm_query = mca_coll_sm_comm_query,
  89     },
  90 
  91     
  92 
  93     
  94     
  95     0,
  96 
  97     
  98     4096,
  99 
 100     
 101 
 102     2,
 103 
 104     
 105 
 106     8,
 107 
 108     
 109     8192,
 110 
 111     
 112 
 113     4,
 114 
 115     
 116 
 117     4,
 118 
 119     
 120     
 121 };
 122 
 123 
 124 
 125 
 126 
 127 static int sm_close(void)
 128 {
 129     return OMPI_SUCCESS;
 130 }
 131 
 132 static int sm_verify_mca_variables(void)
 133 {
 134     mca_coll_sm_component_t *cs = &mca_coll_sm_component;
 135 
 136     if (0 != (cs->sm_fragment_size % cs->sm_control_size)) {
 137         cs->sm_fragment_size += cs->sm_control_size -
 138             (cs->sm_fragment_size % cs->sm_control_size);
 139     }
 140 
 141     if (cs->sm_comm_num_in_use_flags < 2) {
 142         cs->sm_comm_num_in_use_flags = 2;
 143     }
 144 
 145     if (cs->sm_comm_num_segments < cs->sm_comm_num_in_use_flags) {
 146         cs->sm_comm_num_segments = cs->sm_comm_num_in_use_flags;
 147     }
 148     if (0 != (cs->sm_comm_num_segments % cs->sm_comm_num_in_use_flags)) {
 149         cs->sm_comm_num_segments += cs->sm_comm_num_in_use_flags -
 150             (cs->sm_comm_num_segments % cs->sm_comm_num_in_use_flags);
 151     }
 152     cs->sm_segs_per_inuse_flag =
 153         cs->sm_comm_num_segments / cs->sm_comm_num_in_use_flags;
 154 
 155     if (cs->sm_tree_degree > cs->sm_control_size) {
 156         opal_show_help("help-mpi-coll-sm.txt",
 157                        "tree-degree-larger-than-control", true,
 158                        cs->sm_tree_degree, cs->sm_control_size);
 159         cs->sm_tree_degree = cs->sm_control_size;
 160     }
 161     if (cs->sm_tree_degree > 255) {
 162         opal_show_help("help-mpi-coll-sm.txt",
 163                        "tree-degree-larger-than-255", true,
 164                        cs->sm_tree_degree);
 165         cs->sm_tree_degree = 255;
 166     }
 167 
 168     coll_sm_shared_mem_used_data = (int)(4 * cs->sm_control_size +
 169         (cs->sm_comm_num_in_use_flags * cs->sm_control_size) +
 170         (cs->sm_comm_num_segments * (cs->sm_info_comm_size * cs->sm_control_size * 2)) +
 171         (cs->sm_comm_num_segments * (cs->sm_info_comm_size * cs->sm_fragment_size)));
 172 
 173     return OMPI_SUCCESS;
 174 }
 175 
 176 
 177 
 178 
 179 static int sm_register(void)
 180 {
 181     mca_base_component_t *c = &mca_coll_sm_component.super.collm_version;
 182     mca_coll_sm_component_t *cs = &mca_coll_sm_component;
 183 
 184     
 185 
 186 
 187     cs->sm_priority = 0;
 188     (void) mca_base_component_var_register(c, "priority", "Priority of the sm coll component",
 189                                            MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
 190                                            OPAL_INFO_LVL_9,
 191                                            MCA_BASE_VAR_SCOPE_READONLY,
 192                                            &cs->sm_priority);
 193 
 194     cs->sm_control_size = 4096;
 195     (void) mca_base_component_var_register(c, "control_size",
 196                                            "Length of the control data -- should usually be either the length of a cache line on most SMPs, or the size of a page on machines that support direct memory affinity page placement (in bytes)",
 197                                            MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
 198                                            OPAL_INFO_LVL_9,
 199                                            MCA_BASE_VAR_SCOPE_READONLY,
 200                                            &cs->sm_control_size);
 201 
 202     cs->sm_fragment_size = 8192;
 203     (void) mca_base_component_var_register(c, "fragment_size",
 204                                            "Fragment size (in bytes) used for passing data through shared memory (will be rounded up to the nearest control_size size)",
 205                                            MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
 206                                            OPAL_INFO_LVL_9,
 207                                            MCA_BASE_VAR_SCOPE_READONLY,
 208                                            &cs->sm_fragment_size);
 209 
 210     cs->sm_comm_num_in_use_flags = 2;
 211     (void) mca_base_component_var_register(c, "comm_in_use_flags",
 212                                            "Number of \"in use\" flags, used to mark a message passing area segment as currently being used or not (must be >= 2 and <= comm_num_segments)",
 213                                            MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
 214                                            OPAL_INFO_LVL_9,
 215                                            MCA_BASE_VAR_SCOPE_READONLY,
 216                                            &cs->sm_comm_num_in_use_flags);
 217 
 218     cs->sm_comm_num_segments = 8;
 219     (void) mca_base_component_var_register(c, "comm_num_segments",
 220                                            "Number of segments in each communicator's shared memory message passing area (must be >= 2, and must be a multiple of comm_in_use_flags)",
 221                                            MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
 222                                            OPAL_INFO_LVL_9,
 223                                            MCA_BASE_VAR_SCOPE_READONLY,
 224                                            &cs->sm_comm_num_segments);
 225 
 226     cs->sm_tree_degree = 4;
 227     (void) mca_base_component_var_register(c, "tree_degree",
 228                                            "Degree of the tree for tree-based operations (must be => 1 and <= min(control_size, 255))",
 229                                            MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
 230                                            OPAL_INFO_LVL_9,
 231                                            MCA_BASE_VAR_SCOPE_READONLY,
 232                                            &cs->sm_tree_degree);
 233 
 234     
 235 
 236 
 237     cs->sm_info_comm_size = 4;
 238     (void) mca_base_component_var_register(c, "info_num_procs",
 239                                            "Number of processes to use for the calculation of the shared_mem_size MCA information parameter (must be => 2)",
 240                                            MCA_BASE_VAR_TYPE_INT, NULL, 0, 0,
 241                                            OPAL_INFO_LVL_9,
 242                                            MCA_BASE_VAR_SCOPE_READONLY,
 243                                            &cs->sm_info_comm_size);
 244 
 245     coll_sm_shared_mem_used_data = (int)(4 * cs->sm_control_size +
 246         (cs->sm_comm_num_in_use_flags * cs->sm_control_size) +
 247         (cs->sm_comm_num_segments * (cs->sm_info_comm_size * cs->sm_control_size * 2)) +
 248         (cs->sm_comm_num_segments * (cs->sm_info_comm_size * cs->sm_fragment_size)));
 249 
 250     (void) mca_base_component_var_register(c, "shared_mem_used_data",
 251                                            "Amount of shared memory used, per communicator, in the shared memory data area for info_num_procs processes (in bytes)",
 252                                            MCA_BASE_VAR_TYPE_INT, NULL, 0,
 253                                            MCA_BASE_VAR_FLAG_DEFAULT_ONLY,
 254                                            OPAL_INFO_LVL_9,
 255                                            MCA_BASE_VAR_SCOPE_READONLY,
 256                                            &coll_sm_shared_mem_used_data);
 257 
 258     return sm_verify_mca_variables();
 259 }