This source file includes following definitions.
- mca_fcoll_base_find_available
- init_query
- init_query_2_0_0
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 #include "ompi_config.h"
  21 
  22 #include <stdio.h>
  23 #include <stdlib.h>
  24 
  25 #include "mpi.h"
  26 #include "ompi/constants.h"
  27 #include "ompi/mca/fcoll/fcoll.h"
  28 #include "ompi/mca/fcoll/base/base.h"
  29 #include "opal/util/output.h"
  30 
  31 static int init_query(const mca_base_component_t *m,
  32                       bool enable_progress_threads,
  33                       bool enable_mpi_threads);
  34 static int init_query_2_0_0(const mca_base_component_t *component,
  35                             bool enable_progress_threads,
  36                             bool enable_mpi_threads);
  37 
  38 int mca_fcoll_base_find_available(bool enable_progress_threads,
  39                                bool enable_mpi_threads)
  40 {
  41     mca_base_component_list_item_t *cli, *next;
  42 
  43     
  44 
  45 
  46 
  47     OPAL_LIST_FOREACH_SAFE(cli, next, &ompi_fcoll_base_framework.framework_components, mca_base_component_list_item_t) {
  48          
  49 
  50 
  51          if (OMPI_SUCCESS != init_query(cli->cli_component,
  52                                         enable_progress_threads,
  53                                         enable_mpi_threads)) {
  54              
  55 
  56 
  57              opal_list_remove_item(&ompi_fcoll_base_framework.framework_components, &cli->super);
  58              mca_base_component_close(cli->cli_component, ompi_fcoll_base_framework.framework_output);;
  59              OBJ_RELEASE(cli);
  60          }
  61     }
  62 
  63     
  64     if (0 == opal_list_get_size(&ompi_fcoll_base_framework.framework_components)) {
  65          opal_output_verbose (10, ompi_fcoll_base_framework.framework_output,
  66                               "fcoll:find_available: no fcoll components available!");
  67          return OMPI_ERROR;
  68      }
  69 
  70      
  71      return OMPI_SUCCESS;
  72 }
  73 
  74 
  75 static int init_query(const mca_base_component_t *m,
  76                       bool enable_progress_threads,
  77                       bool enable_mpi_threads)
  78 {
  79     int ret;
  80 
  81     opal_output_verbose(10, ompi_fcoll_base_framework.framework_output,
  82                         "fcoll:find_available: querying fcoll component %s",
  83                         m->mca_component_name);
  84 
  85     
  86     if (2 == m->mca_type_major_version &&
  87         0 == m->mca_type_minor_version &&
  88         0 == m->mca_type_release_version) {
  89         ret = init_query_2_0_0(m, enable_progress_threads,
  90                                enable_mpi_threads);
  91     } else {
  92         
  93         opal_output_verbose(10, ompi_fcoll_base_framework.framework_output,
  94                             "fcoll:find_available:unrecognised fcoll API version (%d.%d.%d)",
  95                             m->mca_type_major_version,
  96                             m->mca_type_minor_version,
  97                             m->mca_type_release_version);
  98         return OMPI_ERROR;
  99     }
 100 
 101     
 102     if (OMPI_SUCCESS != ret) {
 103         opal_output_verbose(10, ompi_fcoll_base_framework.framework_output,
 104                             "fcoll:find_available fcoll component %s is not available",
 105                             m->mca_component_name);
 106     } else {
 107         opal_output_verbose(10, ompi_fcoll_base_framework.framework_output,
 108                             "fcoll:find_avalable: fcoll component %s is available",
 109                             m->mca_component_name);
 110 
 111     }
 112     
 113     return ret;
 114 }
 115 
 116 
 117 static int init_query_2_0_0(const mca_base_component_t *component,
 118                             bool enable_progress_threads,
 119                             bool enable_mpi_threads)
 120 {
 121     mca_fcoll_base_component_2_0_0_t *fcoll =
 122         (mca_fcoll_base_component_2_0_0_t *) component;
 123 
 124     return fcoll->fcollm_init_query(enable_progress_threads,
 125                               enable_mpi_threads);
 126 }