This source file includes following definitions.
- mca_coll_base_find_available
- init_query_2_0_0
- init_query
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include "ompi_config.h"
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29
30 #include "mpi.h"
31 #include "opal/util/show_help.h"
32 #include "ompi/constants.h"
33 #include "opal/class/opal_list.h"
34 #include "opal/util/output.h"
35 #include "ompi/mca/mca.h"
36 #include "opal/mca/base/base.h"
37 #include "opal/mca/base/mca_base_component_repository.h"
38
39 #include "ompi/mca/rte/rte.h"
40 #include "ompi/mca/coll/coll.h"
41 #include "ompi/mca/coll/base/base.h"
42
43
44
45
46 static int init_query(const mca_base_component_t * ls,
47 bool enable_progress_threads,
48 bool enable_mpi_threads);
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 int mca_coll_base_find_available(bool enable_progress_threads,
64 bool enable_mpi_threads)
65 {
66 mca_base_component_list_item_t *cli, *next;
67 const mca_base_component_t *component;
68
69
70
71
72 OPAL_LIST_FOREACH_SAFE(cli, next, &ompi_coll_base_framework.framework_components, mca_base_component_list_item_t) {
73 component = cli->cli_component;
74
75
76
77
78 if (OMPI_SUCCESS != init_query(component, enable_progress_threads,
79 enable_mpi_threads)) {
80
81
82 opal_list_remove_item(&ompi_coll_base_framework.framework_components, &cli->super);
83 mca_base_component_close(component, ompi_coll_base_framework.framework_output);
84 OBJ_RELEASE(cli);
85 }
86 }
87
88
89
90
91 if (opal_list_get_size(&ompi_coll_base_framework.framework_components) == 0) {
92 opal_output_verbose(10, ompi_coll_base_framework.framework_output,
93 "coll:find_available: no coll components available!");
94 opal_show_help("help-mca-base.txt", "find-available:not-valid", true,
95 "coll");
96 return OMPI_ERROR;
97 }
98
99
100
101 return OMPI_SUCCESS;
102 }
103
104
105
106
107
108 static inline int
109 init_query_2_0_0(const mca_base_component_t * component,
110 bool enable_progress_threads,
111 bool enable_mpi_threads)
112 {
113 mca_coll_base_component_2_0_0_t *coll =
114 (mca_coll_base_component_2_0_0_t *) component;
115
116 return coll->collm_init_query(enable_progress_threads,
117 enable_mpi_threads);
118 }
119
120
121
122
123 static int init_query(const mca_base_component_t * component,
124 bool enable_progress_threads, bool enable_mpi_threads)
125 {
126 int ret;
127
128 opal_output_verbose(10, ompi_coll_base_framework.framework_output,
129 "coll:find_available: querying coll component %s",
130 component->mca_component_name);
131
132
133
134
135 if (2 == component->mca_type_major_version &&
136 0 == component->mca_type_minor_version &&
137 0 == component->mca_type_release_version) {
138 ret = init_query_2_0_0(component, enable_progress_threads,
139 enable_mpi_threads);
140 } else {
141
142
143 opal_output_verbose(10, ompi_coll_base_framework.framework_output,
144 "coll:find_available: unrecognized coll API version (%d.%d.%d, ignored)",
145 component->mca_type_major_version,
146 component->mca_type_minor_version,
147 component->mca_type_release_version);
148 return OMPI_ERROR;
149 }
150
151
152 opal_output_verbose(10, ompi_coll_base_framework.framework_output,
153 "coll:find_available: coll component %s is %savailable",
154 component->mca_component_name,
155 (OMPI_SUCCESS == ret) ? "": "not ");
156
157 return ret;
158 }
159