42
42
#include "opal/util/argv.h"
43
43
#include "opal/util/show_help.h"
44
44
#include "opal/class/opal_list.h"
45
+ #include "opal/class/opal_hash_table.h"
45
46
#include "opal/class/opal_object.h"
46
47
#include "ompi/mca/mca.h"
47
48
#include "opal/mca/base/base.h"
@@ -75,6 +76,135 @@ static int query_2_4_0(const mca_coll_base_component_2_4_0_t *
75
76
#define CHECK_NULL (what , comm , func ) \
76
77
( (what) = # func , NULL == (comm)->c_coll->coll_ ## func)
77
78
79
+ static void mca_coll_base_get_component_name (ompi_communicator_t * comm , void * module , char * * name )
80
+ {
81
+ mca_coll_base_avail_coll_t * avail ;
82
+
83
+ * name = NULL ;
84
+ OPAL_LIST_FOREACH (avail , comm -> c_coll -> module_list , mca_coll_base_avail_coll_t ) {
85
+ if (avail -> ac_module == module ) {
86
+ * name = (char * ) avail -> ac_component_name ;
87
+ break ;
88
+ }
89
+ }
90
+ }
91
+
92
+ #define PRINT_NAME (comm , func , func_name ) \
93
+ do { \
94
+ char *name; \
95
+ mca_coll_base_get_component_name(comm, (void*)comm->c_coll->coll_ ## func ## _module, &name); \
96
+ opal_output_verbose(10, ompi_coll_base_framework.framework_output, \
97
+ "coll:base:comm_select: communicator %s rank %d %s -> %s", comm->c_name, comm->c_my_rank, func_name, name); \
98
+ } while (0);
99
+
100
+ #define PRINT_ALL_BLOCKING (comm ) \
101
+ do { \
102
+ PRINT_NAME(comm, allgather, "allgather"); \
103
+ PRINT_NAME(comm, allgatherv, "allgatherv"); \
104
+ PRINT_NAME(comm, allreduce, "allreduce"); \
105
+ PRINT_NAME(comm, alltoall, "alltoall"); \
106
+ PRINT_NAME(comm, alltoallv, "alltoallv"); \
107
+ PRINT_NAME(comm, alltoallw, "alltoallw"); \
108
+ PRINT_NAME(comm, barrier, "barrier"); \
109
+ PRINT_NAME(comm, bcast, "bcast"); \
110
+ PRINT_NAME(comm, exscan, "exscan"); \
111
+ PRINT_NAME(comm, gather, "gather"); \
112
+ PRINT_NAME(comm, gatherv, "gatherv"); \
113
+ PRINT_NAME(comm, reduce, "reduce"); \
114
+ PRINT_NAME(comm, reduce_scatter_block, "reduce_scatter_block"); \
115
+ PRINT_NAME(comm, reduce_scatter, "reduce_scatter"); \
116
+ PRINT_NAME(comm, scan, "scan"); \
117
+ PRINT_NAME(comm, scatter, "scatter"); \
118
+ PRINT_NAME(comm, scatterv, "scatterv"); \
119
+ PRINT_NAME(comm, neighbor_allgather, "neighbor_allgather"); \
120
+ PRINT_NAME(comm, neighbor_allgatherv, "neighbor_allgatherv"); \
121
+ PRINT_NAME(comm, neighbor_alltoall, "neighbor_alltoall"); \
122
+ PRINT_NAME(comm, neighbor_alltoallv, "neighbor_alltoallv"); \
123
+ PRINT_NAME(comm, neighbor_alltoallw, "neighbor_alltoallw"); \
124
+ PRINT_NAME(comm, reduce_local, "reduce_local"); \
125
+ } while (0);
126
+
127
+ #define PRINT_ALL_NB (comm ) \
128
+ do { \
129
+ PRINT_NAME(comm, iallgather, "iallgather"); \
130
+ PRINT_NAME(comm, iallgatherv, "iallgatherv");\
131
+ PRINT_NAME(comm, iallreduce, "iallreduce"); \
132
+ PRINT_NAME(comm, ialltoall, "ialltoall"); \
133
+ PRINT_NAME(comm, ialltoallv, "ialltoallv"); \
134
+ PRINT_NAME(comm, ialltoallw, "ialltoallw"); \
135
+ PRINT_NAME(comm, ibarrier, "ibarrier"); \
136
+ PRINT_NAME(comm, ibcast, "ibcast"); \
137
+ PRINT_NAME(comm, iexscan, "iexscan"); \
138
+ PRINT_NAME(comm, igather, "igather"); \
139
+ PRINT_NAME(comm, igatherv, "igatherv"); \
140
+ PRINT_NAME(comm, ireduce, "ireduce"); \
141
+ PRINT_NAME(comm, ireduce_scatter_block, "ireduce_scatter_block"); \
142
+ PRINT_NAME(comm, ireduce_scatter, "ireduce_scatter"); \
143
+ PRINT_NAME(comm, iscan, "iscan"); \
144
+ PRINT_NAME(comm, iscatter, "iscatter"); \
145
+ PRINT_NAME(comm, iscatterv, "iscatterv"); \
146
+ PRINT_NAME(comm, ineighbor_allgather, "ineighbor_allgather"); \
147
+ PRINT_NAME(comm, ineighbor_allgatherv, "ineighbor_allgatherv"); \
148
+ PRINT_NAME(comm, ineighbor_alltoall, "ineighbor_alltoall"); \
149
+ PRINT_NAME(comm, ineighbor_alltoallv, "ineighbor_alltoallv"); \
150
+ PRINT_NAME(comm, ineighbor_alltoallw, "ineighbor_alltoallw"); \
151
+ } while (0);
152
+
153
+ #define PRINT_ALL_PERSISTENT (comm ) \
154
+ do { \
155
+ PRINT_NAME(comm, allgather_init, "allgather_init"); \
156
+ PRINT_NAME(comm, allgatherv_init, "allgatherv_init"); \
157
+ PRINT_NAME(comm, allreduce_init, "allreduce_init"); \
158
+ PRINT_NAME(comm, alltoall_init, "alltoall_init"); \
159
+ PRINT_NAME(comm, alltoallv_init, "alltoallv_init"); \
160
+ PRINT_NAME(comm, alltoallw_init, "alltoallw_init"); \
161
+ PRINT_NAME(comm, barrier_init, "barrier_init"); \
162
+ PRINT_NAME(comm, bcast_init, "bcast_init"); \
163
+ PRINT_NAME(comm, exscan_init, "exscan_init"); \
164
+ PRINT_NAME(comm, gather_init, "gather_init"); \
165
+ PRINT_NAME(comm, gatherv_init, "gatherv_init"); \
166
+ PRINT_NAME(comm, reduce_init, "reduce_init"); \
167
+ PRINT_NAME(comm, reduce_scatter_block_init, "reduce_scatter_block_init"); \
168
+ PRINT_NAME(comm, reduce_scatter_init, "reduce_scatter_init"); \
169
+ PRINT_NAME(comm, scan_init, "scan_init"); \
170
+ PRINT_NAME(comm, scatter_init, "scatter_init"); \
171
+ PRINT_NAME(comm, scatterv_init, "scatterv_init"); \
172
+ PRINT_NAME(comm, neighbor_allgather_init, "neighbor_allgather_init"); \
173
+ PRINT_NAME(comm, neighbor_allgatherv_init, "neighbor_allgatherv_init"); \
174
+ PRINT_NAME(comm, neighbor_alltoall_init, "neighbor_alltoall_init"); \
175
+ PRINT_NAME(comm, neighbor_alltoallv_init, "neighbor_alltoallv_init"); \
176
+ PRINT_NAME(comm, neighbor_alltoallw_init, "neighbor_alltoallw_init"); \
177
+ } while (0);
178
+
179
+ #define PRINT_ALL_FT (comm ) \
180
+ do { \
181
+ PRINT_NAME(comm, agree, "agree"); \
182
+ PRINT_NAME(comm, iagree, "iagree"); \
183
+ } while (0);
184
+
185
+ static void mca_coll_base_print_component_names (ompi_communicator_t * comm )
186
+ {
187
+ /*
188
+ ** Verbosity level 1 - 19 will only print the blocking and non-blocking collectives
189
+ ** assigned to MPI_COMM_WORLD, but not the persistent and ft ones.
190
+ **
191
+ ** Verbosity level 20 will print all blocking and non-blocking collectives for all communicators,
192
+ ** but not the persistent and ft ones.
193
+ **
194
+ ** Verbosity level > 20 will print all collectives for all communicators.
195
+ */
196
+ if ( (MPI_COMM_WORLD == comm ) || (ompi_coll_base_framework .framework_verbose >= 20 )) {
197
+ PRINT_ALL_BLOCKING (comm );
198
+ PRINT_ALL_NB (comm );
199
+ if (ompi_coll_base_framework .framework_verbose > 20 ) {
200
+ PRINT_ALL_PERSISTENT (comm );
201
+ #if OPAL_ENABLE_FT_MPI
202
+ PRINT_ALL_FT (comm );
203
+ #endif
204
+ }
205
+ }
206
+ }
207
+
78
208
/*
79
209
* This function is called at the initialization time of every
80
210
* communicator. It is used to select which coll component will be
@@ -123,7 +253,6 @@ int mca_coll_base_comm_select(ompi_communicator_t * comm)
123
253
NULL != item ; item = opal_list_remove_first (selectable )) {
124
254
125
255
mca_coll_base_avail_coll_t * avail = (mca_coll_base_avail_coll_t * ) item ;
126
-
127
256
/* initialize the module */
128
257
ret = avail -> ac_module -> coll_module_enable (avail -> ac_module , comm );
129
258
@@ -142,7 +271,6 @@ int mca_coll_base_comm_select(ompi_communicator_t * comm)
142
271
OBJ_RELEASE (avail );
143
272
}
144
273
}
145
-
146
274
/* Done with the list from the check_components() call so release it. */
147
275
OBJ_RELEASE (selectable );
148
276
@@ -212,6 +340,11 @@ int mca_coll_base_comm_select(ompi_communicator_t * comm)
212
340
mca_coll_base_comm_unselect (comm );
213
341
return OMPI_ERR_NOT_FOUND ;
214
342
}
343
+
344
+ if (ompi_coll_base_framework .framework_verbose > 0 ) {
345
+ mca_coll_base_print_component_names (comm );
346
+ }
347
+
215
348
return OMPI_SUCCESS ;
216
349
}
217
350
0 commit comments