This source file includes following definitions.
- opal_shmem_base_runtime_query
- opal_shmem_base_best_runnable_component_name
- opal_shmem_base_select
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 #include "opal_config.h"
  23 
  24 #include <string.h>
  25 
  26 #include "opal/constants.h"
  27 #include "opal/util/output.h"
  28 #include "opal/mca/mca.h"
  29 #include "opal/mca/base/base.h"
  30 #include "opal/mca/shmem/shmem.h"
  31 #include "opal/mca/shmem/base/base.h"
  32 
  33 
  34 
  35 
  36 bool opal_shmem_base_selected = false;
  37 opal_shmem_base_component_t *opal_shmem_base_component = NULL;
  38 opal_shmem_base_module_t *opal_shmem_base_module = NULL;
  39 
  40 
  41 
  42 
  43 
  44 
  45 
  46 
  47 static int
  48 opal_shmem_base_runtime_query(mca_base_module_t **best_module,
  49                               mca_base_component_t **best_component)
  50 {
  51     mca_base_component_list_item_t *cli = NULL;
  52     mca_base_component_t *component = NULL;
  53     mca_base_module_t *module = NULL;
  54     int priority = 0, best_priority = INT32_MIN;
  55 
  56     
  57 
  58     if (opal_shmem_base_selected) {
  59         *best_component = &(opal_shmem_base_component->base_version);
  60         *best_module = &(opal_shmem_base_module->base);
  61 
  62         return OPAL_SUCCESS;
  63     }
  64 
  65     *best_module = NULL;
  66     *best_component = NULL;
  67 
  68     opal_output_verbose(10, opal_shmem_base_framework.framework_output,
  69                         "shmem: base: runtime_query: "
  70                         "Auto-selecting shmem components");
  71 
  72     
  73 
  74 
  75 
  76     OPAL_LIST_FOREACH(cli, &opal_shmem_base_framework.framework_components, mca_base_component_list_item_t) {
  77         component = (mca_base_component_t *)cli->cli_component;
  78 
  79         
  80 
  81 
  82         if (NULL == ((opal_shmem_base_component_2_0_0_t *)
  83                      component)->runtime_query) {
  84             opal_output_verbose(5, opal_shmem_base_framework.framework_output,
  85                                 "shmem: base: runtime_query: "
  86                                 "(shmem) Skipping component [%s]. It does not "
  87                                 "implement a run-time query function",
  88                                 component->mca_component_name);
  89             continue;
  90         }
  91 
  92         
  93         opal_output_verbose(5, opal_shmem_base_framework.framework_output,
  94                             "shmem: base: runtime_query: "
  95                             "(shmem) Querying component (run-time) [%s]",
  96                             component->mca_component_name);
  97 
  98         ((opal_shmem_base_component_2_0_0_t *)
  99          component)->runtime_query(&module, &priority, opal_shmem_base_RUNTIME_QUERY_hint);
 100 
 101         
 102 
 103 
 104 
 105         if (NULL == module) {
 106             opal_output_verbose(5, opal_shmem_base_framework.framework_output,
 107                                 "shmem: base: runtime_query: "
 108                                 "(shmem) Skipping component [%s]. Run-time "
 109                                 "Query failed to return a module",
 110                                 component->mca_component_name);
 111             continue;
 112         }
 113 
 114         
 115 
 116 
 117         opal_output_verbose(5, opal_shmem_base_framework.framework_output,
 118                             "shmem: base: runtime_query: "
 119                             "(%5s) Query of component [%s] set priority to %d",
 120                             "shmem", component->mca_component_name, priority);
 121         if (priority > best_priority) {
 122             best_priority = priority;
 123             *best_module = module;
 124             *best_component = component;
 125         }
 126     }
 127 
 128     
 129 
 130 
 131     if (NULL == *best_component) {
 132         opal_output_verbose(5, opal_shmem_base_framework.framework_output,
 133                             "shmem: base: runtime_query: "
 134                             "(%5s) No component selected!", "shmem");
 135         return OPAL_ERR_NOT_FOUND;
 136     }
 137 
 138     opal_output_verbose(5, opal_shmem_base_framework.framework_output,
 139                         "shmem: base: runtime_query: "
 140                         "(%5s) Selected component [%s]", "shmem",
 141                         (*best_component)->mca_component_name);
 142 
 143     
 144     (void) mca_base_framework_components_close (&opal_shmem_base_framework,
 145                                                 (mca_base_component_t *)(*best_component));
 146 
 147     
 148     opal_shmem_base_component = (opal_shmem_base_component_t*) *best_component;
 149     opal_shmem_base_module = (opal_shmem_base_module_t*) *best_module;
 150     opal_shmem_base_selected = true;
 151 
 152     return OPAL_SUCCESS;
 153 }
 154 
 155 
 156 char *
 157 opal_shmem_base_best_runnable_component_name(void)
 158 {
 159     mca_base_component_t *best_component = NULL;
 160     mca_base_module_t *best_module = NULL;
 161 
 162     opal_output_verbose(10, opal_shmem_base_framework.framework_output,
 163                         "shmem: base: best_runnable_component_name: "
 164                         "Searching for best runnable component.");
 165     
 166     if (OPAL_SUCCESS != opal_shmem_base_runtime_query(&best_module,
 167                                                       &best_component)) {
 168         
 169         return NULL;
 170     }
 171     else {
 172         if (NULL != best_component) {
 173             opal_output_verbose(10, opal_shmem_base_framework.framework_output,
 174                                 "shmem: base: best_runnable_component_name: "
 175                                 "Found best runnable component: (%s).",
 176                                 best_component->mca_component_name);
 177             return strdup(best_component->mca_component_name);
 178         }
 179         else {
 180             opal_output_verbose(10, opal_shmem_base_framework.framework_output,
 181                                 "shmem: base: best_runnable_component_name: "
 182                                 "Could not find runnable component.");
 183             
 184             return NULL;
 185         }
 186     }
 187 }
 188 
 189 
 190 int
 191 opal_shmem_base_select(void)
 192 {
 193     opal_shmem_base_component_2_0_0_t *best_component = NULL;
 194     opal_shmem_base_module_2_0_0_t *best_module = NULL;
 195     
 196     if (OPAL_SUCCESS != opal_shmem_base_runtime_query(
 197                                 (mca_base_module_t **)&best_module,
 198                                 (mca_base_component_t **)&best_component)) {
 199         
 200 
 201 
 202         return OPAL_ERROR;
 203     }
 204 
 205     
 206     if (NULL != opal_shmem_base_module) {
 207         return opal_shmem_base_module->module_init();
 208     }
 209     else {
 210         return OPAL_ERROR;
 211     }
 212 }
 213