root/ompi/mca/coll/tuned/coll_tuned_scatter_decision.c

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

DEFINITIONS

This source file includes following definitions.
  1. ompi_coll_tuned_scatter_intra_check_forced_init
  2. ompi_coll_tuned_scatter_intra_do_this

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2004-2017 The University of Tennessee and The University
   4  *                         of Tennessee Research Foundation.  All rights
   5  *                         reserved.
   6  * Copyright (c) 2015      Research Organization for Information Science
   7  *                         and Technology (RIST). All rights reserved.
   8  * $COPYRIGHT$
   9  *
  10  * Additional copyrights may follow
  11  *
  12  * $HEADER$
  13  */
  14 
  15 #include "ompi_config.h"
  16 
  17 #include "mpi.h"
  18 #include "ompi/constants.h"
  19 #include "ompi/datatype/ompi_datatype.h"
  20 #include "ompi/communicator/communicator.h"
  21 #include "ompi/mca/coll/coll.h"
  22 #include "ompi/mca/coll/base/coll_tags.h"
  23 #include "ompi/mca/coll/base/coll_base_topo.h"
  24 #include "ompi/mca/coll/base/coll_base_util.h"
  25 #include "ompi/mca/pml/pml.h"
  26 #include "coll_tuned.h"
  27 
  28 /* scatter algorithm variables */
  29 static int coll_tuned_scatter_forced_algorithm = 0;
  30 static int coll_tuned_scatter_segment_size = 0;
  31 static int coll_tuned_scatter_tree_fanout;
  32 static int coll_tuned_scatter_chain_fanout;
  33 
  34 /* valid values for coll_tuned_scatter_forced_algorithm */
  35 static mca_base_var_enum_value_t scatter_algorithms[] = {
  36     {0, "ignore"},
  37     {1, "basic_linear"},
  38     {2, "binomial"},
  39     {0, NULL}
  40 };
  41 
  42 /* The following are used by dynamic and forced rules */
  43 
  44 /* publish details of each algorithm and if its forced/fixed/locked in */
  45 /* as you add methods/algorithms you must update this and the query/map
  46    routines */
  47 
  48 /* this routine is called by the component only */
  49 /* this makes sure that the mca parameters are set to their initial values
  50    and perms */
  51 /* module does not call this they call the forced_getvalues routine instead */
  52 
  53 int
  54 ompi_coll_tuned_scatter_intra_check_forced_init(coll_tuned_force_algorithm_mca_param_indices_t *mca_param_indices)
  55 {
  56     mca_base_var_enum_t *new_enum;
  57     int cnt;
  58 
  59     for( cnt = 0; NULL != scatter_algorithms[cnt].string; cnt++ );
  60     ompi_coll_tuned_forced_max_algorithms[SCATTER] = cnt;
  61 
  62     (void) mca_base_component_var_register(&mca_coll_tuned_component.super.collm_version,
  63                                            "scatter_algorithm_count",
  64                                            "Number of scatter algorithms available",
  65                                            MCA_BASE_VAR_TYPE_INT, NULL, 0,
  66                                            MCA_BASE_VAR_FLAG_DEFAULT_ONLY,
  67                                            OPAL_INFO_LVL_5,
  68                                            MCA_BASE_VAR_SCOPE_CONSTANT,
  69                                            &ompi_coll_tuned_forced_max_algorithms[SCATTER]);
  70 
  71     /* MPI_T: This variable should eventually be bound to a communicator */
  72     coll_tuned_scatter_forced_algorithm = 0;
  73     (void) mca_base_var_enum_create("coll_tuned_scatter_algorithms", scatter_algorithms, &new_enum);
  74     mca_param_indices->algorithm_param_index =
  75         mca_base_component_var_register(&mca_coll_tuned_component.super.collm_version,
  76                                         "scatter_algorithm",
  77                                         "Which scatter algorithm is used. Can be locked down to choice of: 0 ignore, 1 basic linear, 2 binomial.",
  78                                         MCA_BASE_VAR_TYPE_INT, new_enum, 0, MCA_BASE_VAR_FLAG_SETTABLE,
  79                                         OPAL_INFO_LVL_5,
  80                                         MCA_BASE_VAR_SCOPE_ALL,
  81                                         &coll_tuned_scatter_forced_algorithm);
  82     OBJ_RELEASE(new_enum);
  83     if (mca_param_indices->algorithm_param_index < 0) {
  84         return mca_param_indices->algorithm_param_index;
  85     }
  86 
  87     coll_tuned_scatter_segment_size = 0;
  88     mca_param_indices->segsize_param_index =
  89         mca_base_component_var_register(&mca_coll_tuned_component.super.collm_version,
  90                                         "scatter_algorithm_segmentsize",
  91                                         "Segment size in bytes used by default for scatter algorithms. Only has meaning if algorithm is forced and supports segmenting. 0 bytes means no segmentation. Currently, available algorithms do not support segmentation.",
  92                                         MCA_BASE_VAR_TYPE_INT, NULL, 0, MCA_BASE_VAR_FLAG_SETTABLE,
  93                                         OPAL_INFO_LVL_5,
  94                                         MCA_BASE_VAR_SCOPE_ALL,
  95                                         &coll_tuned_scatter_segment_size);
  96 
  97     coll_tuned_scatter_tree_fanout = ompi_coll_tuned_init_tree_fanout; /* get system wide default */
  98     mca_param_indices->tree_fanout_param_index =
  99         mca_base_component_var_register(&mca_coll_tuned_component.super.collm_version,
 100                                         "scatter_algorithm_tree_fanout",
 101                                         "Fanout for n-tree used for scatter algorithms. Only has meaning if algorithm is forced and supports n-tree topo based operation. Currently, available algorithms do not support n-tree topologies.",
 102                                         MCA_BASE_VAR_TYPE_INT, NULL, 0, MCA_BASE_VAR_FLAG_SETTABLE,
 103                                         OPAL_INFO_LVL_5,
 104                                         MCA_BASE_VAR_SCOPE_ALL,
 105                                         &coll_tuned_scatter_tree_fanout);
 106 
 107     coll_tuned_scatter_chain_fanout = ompi_coll_tuned_init_chain_fanout; /* get system wide default */
 108     mca_param_indices->chain_fanout_param_index=
 109       mca_base_component_var_register(&mca_coll_tuned_component.super.collm_version,
 110                                       "scatter_algorithm_chain_fanout",
 111                                       "Fanout for chains used for scatter algorithms. Only has meaning if algorithm is forced and supports chain topo based operation. Currently, available algorithms do not support chain topologies.",
 112                                       MCA_BASE_VAR_TYPE_INT, NULL, 0, MCA_BASE_VAR_FLAG_SETTABLE,
 113                                       OPAL_INFO_LVL_5,
 114                                       MCA_BASE_VAR_SCOPE_ALL,
 115                                       &coll_tuned_scatter_chain_fanout);
 116 
 117     return (MPI_SUCCESS);
 118 }
 119 
 120 int
 121 ompi_coll_tuned_scatter_intra_do_this(const void *sbuf, int scount,
 122                                       struct ompi_datatype_t *sdtype,
 123                                       void* rbuf, int rcount,
 124                                       struct ompi_datatype_t *rdtype,
 125                                       int root,
 126                                       struct ompi_communicator_t *comm,
 127                                       mca_coll_base_module_t *module,
 128                                       int algorithm, int faninout, int segsize)
 129 {
 130     OPAL_OUTPUT((ompi_coll_tuned_stream,
 131                  "coll:tuned:scatter_intra_do_this selected algorithm %d topo faninout %d segsize %d",
 132                  algorithm, faninout, segsize));
 133 
 134     switch (algorithm) {
 135     case (0):
 136         return ompi_coll_tuned_scatter_intra_dec_fixed(sbuf, scount, sdtype,
 137                                                        rbuf, rcount, rdtype,
 138                                                        root, comm, module);
 139     case (1):
 140         return ompi_coll_base_scatter_intra_basic_linear(sbuf, scount, sdtype,
 141                                                          rbuf, rcount, rdtype,
 142                                                          root, comm, module);
 143     case (2):
 144         return ompi_coll_base_scatter_intra_binomial(sbuf, scount, sdtype,
 145                                                      rbuf, rcount, rdtype,
 146                                                      root, comm, module);
 147     } /* switch */
 148     OPAL_OUTPUT((ompi_coll_tuned_stream,
 149                  "coll:tuned:scatter_intra_do_this attempt to select algorithm %d when only 0-%d is valid?",
 150                  algorithm, ompi_coll_tuned_forced_max_algorithms[SCATTER]));
 151     return MPI_ERR_ARG;
 152 }

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