Nothing of substance; just indenting changes (''finally'' update this
framework base to 4 space tabs!). This commit was SVN r20173.
Этот коммит содержится в:
родитель
ce313fa391
Коммит
865900dd27
@ -43,7 +43,6 @@
|
||||
*/
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
/**
|
||||
* Initialize the coll MCA framework
|
||||
*
|
||||
@ -160,7 +159,7 @@ int mca_coll_base_comm_unselect(struct ompi_communicator_t *comm);
|
||||
*
|
||||
* It must be the last function invoked on the coll MCA framework.
|
||||
*/
|
||||
OMPI_DECLSPEC int mca_coll_base_close(void);
|
||||
OMPI_DECLSPEC int mca_coll_base_close(void);
|
||||
|
||||
|
||||
/*
|
||||
@ -205,5 +204,4 @@ extern bool mca_coll_base_components_available_valid;
|
||||
extern opal_list_t mca_coll_base_components_available;
|
||||
|
||||
END_C_DECLS
|
||||
|
||||
#endif /* MCA_BASE_COLL_H */
|
||||
|
@ -29,23 +29,24 @@
|
||||
|
||||
int mca_coll_base_close(void)
|
||||
{
|
||||
/* Close all components that are still open. This may be the opened
|
||||
list (if we're in ompi_info), or it may be the available list (if
|
||||
we're anywhere else). */
|
||||
/* Close all components that are still open. This may be the opened
|
||||
* list (if we're in ompi_info), or it may be the available list (if
|
||||
* we're anywhere else). */
|
||||
|
||||
if (mca_coll_base_components_opened_valid) {
|
||||
mca_base_components_close(mca_coll_base_output,
|
||||
&mca_coll_base_components_opened, NULL);
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_opened);
|
||||
mca_coll_base_components_opened_valid = false;
|
||||
} else if (mca_coll_base_components_available_valid) {
|
||||
mca_base_components_close(mca_coll_base_output,
|
||||
&mca_coll_base_components_available, NULL);
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_available);
|
||||
mca_coll_base_components_available_valid = false;
|
||||
}
|
||||
if (mca_coll_base_components_opened_valid) {
|
||||
mca_base_components_close(mca_coll_base_output,
|
||||
&mca_coll_base_components_opened, NULL);
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_opened);
|
||||
mca_coll_base_components_opened_valid = false;
|
||||
} else if (mca_coll_base_components_available_valid) {
|
||||
mca_base_components_close(mca_coll_base_output,
|
||||
&mca_coll_base_components_available,
|
||||
NULL);
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_available);
|
||||
mca_coll_base_components_available_valid = false;
|
||||
}
|
||||
|
||||
/* All done */
|
||||
/* All done */
|
||||
|
||||
return OMPI_SUCCESS;
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
@ -38,11 +38,6 @@
|
||||
#include "ompi/mca/coll/base/base.h"
|
||||
|
||||
|
||||
/*
|
||||
* Local variables
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Local types
|
||||
*/
|
||||
@ -58,20 +53,21 @@ typedef struct avail_coll_t avail_coll_t;
|
||||
/*
|
||||
* Local functions
|
||||
*/
|
||||
static opal_list_t *check_components(opal_list_t *components,
|
||||
ompi_communicator_t *comm,
|
||||
static opal_list_t *check_components(opal_list_t * components,
|
||||
ompi_communicator_t * comm,
|
||||
char **names, int num_names);
|
||||
static int check_one_component(ompi_communicator_t *comm,
|
||||
const mca_base_component_t *component,
|
||||
mca_coll_base_module_2_0_0_t **module);
|
||||
static int check_one_component(ompi_communicator_t * comm,
|
||||
const mca_base_component_t * component,
|
||||
mca_coll_base_module_2_0_0_t ** module);
|
||||
|
||||
static int query(const mca_base_component_t *component,
|
||||
ompi_communicator_t *comm, int *priority,
|
||||
mca_coll_base_module_2_0_0_t **module);
|
||||
static int query(const mca_base_component_t * component,
|
||||
ompi_communicator_t * comm, int *priority,
|
||||
mca_coll_base_module_2_0_0_t ** module);
|
||||
|
||||
static int query_2_0_0(const mca_coll_base_component_2_0_0_t *coll_component,
|
||||
ompi_communicator_t *comm, int *priority,
|
||||
mca_coll_base_module_2_0_0_t **module);
|
||||
static int query_2_0_0(const mca_coll_base_component_2_0_0_t *
|
||||
coll_component, ompi_communicator_t * comm,
|
||||
int *priority,
|
||||
mca_coll_base_module_2_0_0_t ** module);
|
||||
|
||||
/*
|
||||
* Stuff for the OBJ interface
|
||||
@ -98,7 +94,7 @@ static OBJ_CLASS_INSTANCE(avail_coll_t, opal_list_item_t, NULL, NULL);
|
||||
*
|
||||
* This selection logic is not for the weak.
|
||||
*/
|
||||
int mca_coll_base_comm_select(ompi_communicator_t *comm)
|
||||
int mca_coll_base_comm_select(ompi_communicator_t * comm)
|
||||
{
|
||||
int ret, num_names;
|
||||
char name[MPI_MAX_OBJECT_NAME + 32];
|
||||
@ -107,17 +103,17 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm)
|
||||
opal_list_item_t *item;
|
||||
|
||||
/* Announce */
|
||||
snprintf(name, sizeof(name), "%s (cid %d)", comm->c_name,
|
||||
snprintf(name, sizeof(name), "%s (cid %d)", comm->c_name,
|
||||
comm->c_contextid);
|
||||
name[sizeof(name) - 1] = '\0';
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:base:comm_select: new communicator: %s",
|
||||
"coll:base:comm_select: new communicator: %s",
|
||||
name);
|
||||
|
||||
|
||||
/* Initialize all the relevant pointers, since they're used as
|
||||
sentinel values */
|
||||
* sentinel values */
|
||||
memset(&comm->c_coll, 0, sizeof(mca_coll_base_comm_coll_t));
|
||||
|
||||
|
||||
/* See if a set of component was requested by the MCA parameter.
|
||||
Don't check for error. */
|
||||
names = NULL;
|
||||
@ -128,17 +124,17 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm)
|
||||
name_array = opal_argv_split(names, ',');
|
||||
num_names = opal_argv_count(name_array);
|
||||
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:base:comm_select: Checking specific modules: %s",
|
||||
names);
|
||||
selectable = check_components(&mca_coll_base_components_available,
|
||||
selectable = check_components(&mca_coll_base_components_available,
|
||||
comm, name_array, num_names);
|
||||
opal_argv_free(name_array);
|
||||
} else {
|
||||
/* no specific components given -- try all */
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:base:comm_select: Checking all available modules");
|
||||
selectable = check_components(&mca_coll_base_components_available,
|
||||
selectable = check_components(&mca_coll_base_components_available,
|
||||
comm, NULL, 0);
|
||||
}
|
||||
|
||||
@ -157,10 +153,9 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm)
|
||||
|
||||
/* do the selection loop */
|
||||
for (item = opal_list_remove_first(selectable);
|
||||
NULL != item;
|
||||
item = opal_list_remove_first(selectable)) {
|
||||
NULL != item; item = opal_list_remove_first(selectable)) {
|
||||
|
||||
avail_coll_t *avail = (avail_coll_t*) item;
|
||||
avail_coll_t *avail = (avail_coll_t *) item;
|
||||
|
||||
/* initialize the module */
|
||||
ret = avail->ac_module->coll_module_enable(avail->ac_module, comm);
|
||||
@ -170,22 +165,22 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm)
|
||||
}
|
||||
|
||||
/* copy over any of the pointers */
|
||||
COPY(avail->ac_module, comm, allgather);
|
||||
COPY(avail->ac_module, comm, allgatherv);
|
||||
COPY(avail->ac_module, comm, allreduce);
|
||||
COPY(avail->ac_module, comm, alltoall);
|
||||
COPY(avail->ac_module, comm, alltoallv);
|
||||
COPY(avail->ac_module, comm, alltoallw);
|
||||
COPY(avail->ac_module, comm, barrier);
|
||||
COPY(avail->ac_module, comm, bcast);
|
||||
COPY(avail->ac_module, comm, exscan);
|
||||
COPY(avail->ac_module, comm, gather);
|
||||
COPY(avail->ac_module, comm, gatherv);
|
||||
COPY(avail->ac_module, comm, reduce);
|
||||
COPY(avail->ac_module, comm, reduce_scatter);
|
||||
COPY(avail->ac_module, comm, scan);
|
||||
COPY(avail->ac_module, comm, scatter);
|
||||
COPY(avail->ac_module, comm, scatterv);
|
||||
COPY(avail->ac_module, comm, allgather);
|
||||
COPY(avail->ac_module, comm, allgatherv);
|
||||
COPY(avail->ac_module, comm, allreduce);
|
||||
COPY(avail->ac_module, comm, alltoall);
|
||||
COPY(avail->ac_module, comm, alltoallv);
|
||||
COPY(avail->ac_module, comm, alltoallw);
|
||||
COPY(avail->ac_module, comm, barrier);
|
||||
COPY(avail->ac_module, comm, bcast);
|
||||
COPY(avail->ac_module, comm, exscan);
|
||||
COPY(avail->ac_module, comm, gather);
|
||||
COPY(avail->ac_module, comm, gatherv);
|
||||
COPY(avail->ac_module, comm, reduce);
|
||||
COPY(avail->ac_module, comm, reduce_scatter);
|
||||
COPY(avail->ac_module, comm, scan);
|
||||
COPY(avail->ac_module, comm, scatter);
|
||||
COPY(avail->ac_module, comm, scatterv);
|
||||
|
||||
/* release the original module reference and the list item */
|
||||
OBJ_RELEASE(avail->ac_module);
|
||||
@ -204,14 +199,14 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm)
|
||||
(NULL == comm->c_coll.coll_alltoallw) ||
|
||||
(NULL == comm->c_coll.coll_barrier) ||
|
||||
(NULL == comm->c_coll.coll_bcast) ||
|
||||
((OMPI_COMM_IS_INTRA(comm)) && (NULL == comm->c_coll.coll_exscan)) ||
|
||||
(NULL == comm->c_coll.coll_gather) ||
|
||||
(NULL == comm->c_coll.coll_gatherv) ||
|
||||
(NULL == comm->c_coll.coll_reduce) ||
|
||||
(NULL == comm->c_coll.coll_reduce_scatter) ||
|
||||
((OMPI_COMM_IS_INTRA(comm)) && (NULL == comm->c_coll.coll_scan)) ||
|
||||
(NULL == comm->c_coll.coll_scatter) ||
|
||||
(NULL == comm->c_coll.coll_scatterv)) {
|
||||
((OMPI_COMM_IS_INTRA(comm)) && (NULL == comm->c_coll.coll_exscan))
|
||||
|| (NULL == comm->c_coll.coll_gather)
|
||||
|| (NULL == comm->c_coll.coll_gatherv)
|
||||
|| (NULL == comm->c_coll.coll_reduce)
|
||||
|| (NULL == comm->c_coll.coll_reduce_scatter)
|
||||
|| ((OMPI_COMM_IS_INTRA(comm)) && (NULL == comm->c_coll.coll_scan))
|
||||
|| (NULL == comm->c_coll.coll_scatter)
|
||||
|| (NULL == comm->c_coll.coll_scatterv)) {
|
||||
mca_coll_base_comm_unselect(comm);
|
||||
return OMPI_ERR_NOT_FOUND;
|
||||
}
|
||||
@ -227,8 +222,8 @@ int mca_coll_base_comm_select(ompi_communicator_t *comm)
|
||||
* only those who returned that they want to run, and put them in
|
||||
* priority order.
|
||||
*/
|
||||
static opal_list_t *check_components(opal_list_t *components,
|
||||
ompi_communicator_t *comm,
|
||||
static opal_list_t *check_components(opal_list_t * components,
|
||||
ompi_communicator_t * comm,
|
||||
char **names, int num_names)
|
||||
{
|
||||
int i, priority;
|
||||
@ -238,18 +233,18 @@ static opal_list_t *check_components(opal_list_t *components,
|
||||
bool want_to_check;
|
||||
opal_list_t *selectable;
|
||||
avail_coll_t *avail, *avail2;
|
||||
|
||||
|
||||
/* Make a list of the components that query successfully */
|
||||
selectable = OBJ_NEW(opal_list_t);
|
||||
|
||||
/* Scan through the list of components. This nested loop is O(N^2),
|
||||
but we should never have too many components and/or names, so this
|
||||
*hopefully* shouldn't matter... */
|
||||
|
||||
for (item = opal_list_get_first(components);
|
||||
item != opal_list_get_end(components);
|
||||
|
||||
for (item = opal_list_get_first(components);
|
||||
item != opal_list_get_end(components);
|
||||
item = opal_list_get_next(item)) {
|
||||
component = ((mca_base_component_priority_list_item_t *)
|
||||
component = ((mca_base_component_priority_list_item_t *)
|
||||
item)->super.cli_component;
|
||||
|
||||
/* If we have a list of names, scan through it */
|
||||
@ -266,33 +261,35 @@ static opal_list_t *check_components(opal_list_t *components,
|
||||
}
|
||||
|
||||
/* If we determined that we want to check this component, then do
|
||||
so */
|
||||
* so */
|
||||
|
||||
if (want_to_check) {
|
||||
priority = check_one_component(comm, component, &module);
|
||||
if (priority >= 0) {
|
||||
|
||||
/* We have a component that indicated that it wants to run by
|
||||
giving us a module */
|
||||
* giving us a module */
|
||||
avail = OBJ_NEW(avail_coll_t);
|
||||
avail->ac_priority = priority;
|
||||
avail->ac_module = module;
|
||||
|
||||
/* Put this item on the list in priority order (lowest
|
||||
priority first). Should it go first? */
|
||||
for(item2 = opal_list_get_first(selectable);
|
||||
item2 != opal_list_get_end(selectable);
|
||||
item2 = opal_list_get_next(item2)) {
|
||||
avail2 = (avail_coll_t*)item2;
|
||||
if(avail->ac_priority < avail2->ac_priority) {
|
||||
* priority first). Should it go first? */
|
||||
for (item2 = opal_list_get_first(selectable);
|
||||
item2 != opal_list_get_end(selectable);
|
||||
item2 = opal_list_get_next(item2)) {
|
||||
avail2 = (avail_coll_t *) item2;
|
||||
if (avail->ac_priority < avail2->ac_priority) {
|
||||
opal_list_insert_pos(selectable,
|
||||
item2, (opal_list_item_t*)avail);
|
||||
item2,
|
||||
(opal_list_item_t *) avail);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(opal_list_get_end(selectable) == item2) {
|
||||
opal_list_append(selectable, (opal_list_item_t*)avail);
|
||||
if (opal_list_get_end(selectable) == item2) {
|
||||
opal_list_append(selectable,
|
||||
(opal_list_item_t *) avail);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -312,9 +309,9 @@ static opal_list_t *check_components(opal_list_t *components,
|
||||
/*
|
||||
* Check a single component
|
||||
*/
|
||||
static int check_one_component(ompi_communicator_t *comm,
|
||||
const mca_base_component_t *component,
|
||||
mca_coll_base_module_2_0_0_t **module)
|
||||
static int check_one_component(ompi_communicator_t * comm,
|
||||
const mca_base_component_t * component,
|
||||
mca_coll_base_module_2_0_0_t ** module)
|
||||
{
|
||||
int err;
|
||||
int priority = -1;
|
||||
@ -323,13 +320,13 @@ static int check_one_component(ompi_communicator_t *comm,
|
||||
|
||||
if (OMPI_SUCCESS == err) {
|
||||
priority = (priority < 100) ? priority : 100;
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:base:comm_select: component available: %s, priority: %d",
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:base:comm_select: component available: %s, priority: %d",
|
||||
component->mca_component_name, priority);
|
||||
|
||||
} else {
|
||||
priority = -1;
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:base:comm_select: component not available: %s",
|
||||
component->mca_component_name);
|
||||
}
|
||||
@ -346,19 +343,19 @@ static int check_one_component(ompi_communicator_t *comm,
|
||||
* Take any version of a coll module, query it, and return the right
|
||||
* module struct
|
||||
*/
|
||||
static int query(const mca_base_component_t *component,
|
||||
ompi_communicator_t *comm,
|
||||
int *priority, mca_coll_base_module_2_0_0_t **module)
|
||||
static int query(const mca_base_component_t * component,
|
||||
ompi_communicator_t * comm,
|
||||
int *priority, mca_coll_base_module_2_0_0_t ** module)
|
||||
{
|
||||
*module = NULL;
|
||||
if (2 == component->mca_type_major_version &&
|
||||
0 == component->mca_type_minor_version &&
|
||||
0 == component->mca_type_release_version) {
|
||||
const mca_coll_base_component_2_0_0_t *coll100 =
|
||||
const mca_coll_base_component_2_0_0_t *coll100 =
|
||||
(mca_coll_base_component_2_0_0_t *) component;
|
||||
|
||||
return query_2_0_0(coll100, comm, priority, module);
|
||||
}
|
||||
}
|
||||
|
||||
/* Unknown coll API version -- return error */
|
||||
|
||||
@ -366,9 +363,9 @@ static int query(const mca_base_component_t *component,
|
||||
}
|
||||
|
||||
|
||||
static int query_2_0_0(const mca_coll_base_component_2_0_0_t *component,
|
||||
ompi_communicator_t *comm, int *priority,
|
||||
mca_coll_base_module_2_0_0_t **module)
|
||||
static int query_2_0_0(const mca_coll_base_component_2_0_0_t * component,
|
||||
ompi_communicator_t * comm, int *priority,
|
||||
mca_coll_base_module_2_0_0_t ** module)
|
||||
{
|
||||
mca_coll_base_module_2_0_0_t *ret;
|
||||
|
||||
|
@ -39,26 +39,25 @@
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
int mca_coll_base_comm_unselect(ompi_communicator_t *comm)
|
||||
int mca_coll_base_comm_unselect(ompi_communicator_t * comm)
|
||||
{
|
||||
CLOSE(comm, allgather);
|
||||
CLOSE(comm, allgatherv);
|
||||
CLOSE(comm, allreduce);
|
||||
CLOSE(comm, alltoall);
|
||||
CLOSE(comm, alltoallv);
|
||||
CLOSE(comm, alltoallw);
|
||||
CLOSE(comm, barrier);
|
||||
CLOSE(comm, bcast);
|
||||
CLOSE(comm, exscan);
|
||||
CLOSE(comm, gather);
|
||||
CLOSE(comm, gatherv);
|
||||
CLOSE(comm, reduce);
|
||||
CLOSE(comm, reduce_scatter);
|
||||
CLOSE(comm, scan);
|
||||
CLOSE(comm, scatter);
|
||||
CLOSE(comm, scatterv);
|
||||
CLOSE(comm, allgather);
|
||||
CLOSE(comm, allgatherv);
|
||||
CLOSE(comm, allreduce);
|
||||
CLOSE(comm, alltoall);
|
||||
CLOSE(comm, alltoallv);
|
||||
CLOSE(comm, alltoallw);
|
||||
CLOSE(comm, barrier);
|
||||
CLOSE(comm, bcast);
|
||||
CLOSE(comm, exscan);
|
||||
CLOSE(comm, gather);
|
||||
CLOSE(comm, gatherv);
|
||||
CLOSE(comm, reduce);
|
||||
CLOSE(comm, reduce_scatter);
|
||||
CLOSE(comm, scan);
|
||||
CLOSE(comm, scatter);
|
||||
CLOSE(comm, scatterv);
|
||||
|
||||
/* All done */
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -44,13 +44,13 @@ opal_list_t mca_coll_base_components_available;
|
||||
/*
|
||||
* Private functions
|
||||
*/
|
||||
static int init_query(const mca_base_component_t *ls,
|
||||
mca_base_component_priority_list_item_t *entry,
|
||||
static int init_query(const mca_base_component_t * ls,
|
||||
mca_base_component_priority_list_item_t * entry,
|
||||
bool enable_progress_threads,
|
||||
bool enable_mpi_threads);
|
||||
static int init_query_2_0_0(const mca_base_component_t *ls,
|
||||
mca_base_component_priority_list_item_t *entry,
|
||||
bool enable_progress_threads,
|
||||
static int init_query_2_0_0(const mca_base_component_t * ls,
|
||||
mca_base_component_priority_list_item_t *
|
||||
entry, bool enable_progress_threads,
|
||||
bool enable_mpi_threads);
|
||||
|
||||
/*
|
||||
@ -69,74 +69,74 @@ static int init_query_2_0_0(const mca_base_component_t *ls,
|
||||
int mca_coll_base_find_available(bool enable_progress_threads,
|
||||
bool enable_mpi_threads)
|
||||
{
|
||||
bool found = false;
|
||||
mca_base_component_priority_list_item_t *entry;
|
||||
opal_list_item_t *p;
|
||||
const mca_base_component_t *component;
|
||||
bool found = false;
|
||||
mca_base_component_priority_list_item_t *entry;
|
||||
opal_list_item_t *p;
|
||||
const mca_base_component_t *component;
|
||||
|
||||
/* Initialize the list */
|
||||
/* Initialize the list */
|
||||
|
||||
OBJ_CONSTRUCT(&mca_coll_base_components_available, opal_list_t);
|
||||
mca_coll_base_components_available_valid = true;
|
||||
OBJ_CONSTRUCT(&mca_coll_base_components_available, opal_list_t);
|
||||
mca_coll_base_components_available_valid = true;
|
||||
|
||||
/* The list of components that we should check has already been
|
||||
established in mca_coll_base_open. */
|
||||
|
||||
for (found = false,
|
||||
/* The list of components that we should check has already been
|
||||
established in mca_coll_base_open. */
|
||||
|
||||
for (found = false,
|
||||
p = opal_list_remove_first(&mca_coll_base_components_opened);
|
||||
p != NULL;
|
||||
p = opal_list_remove_first(&mca_coll_base_components_opened)) {
|
||||
component = ((mca_base_component_list_item_t *) p)->cli_component;
|
||||
p != NULL;
|
||||
p = opal_list_remove_first(&mca_coll_base_components_opened)) {
|
||||
component = ((mca_base_component_list_item_t *) p)->cli_component;
|
||||
|
||||
/* Call a subroutine to do the work, because the component may
|
||||
represent different versions of the coll MCA. */
|
||||
|
||||
entry = OBJ_NEW(mca_base_component_priority_list_item_t);
|
||||
entry->super.cli_component = component;
|
||||
entry->cpli_priority = 0;
|
||||
if (OMPI_SUCCESS == init_query(component, entry,
|
||||
enable_progress_threads,
|
||||
enable_mpi_threads)) {
|
||||
opal_list_append(&mca_coll_base_components_available,
|
||||
(opal_list_item_t *) entry);
|
||||
found = true;
|
||||
} else {
|
||||
|
||||
/* If the component doesn't want to run, then close it. It's
|
||||
already had its close() method invoked; now close it out of
|
||||
the DSO repository (if it's there). */
|
||||
|
||||
mca_base_component_repository_release(component);
|
||||
OBJ_RELEASE(entry);
|
||||
/* Call a subroutine to do the work, because the component may
|
||||
represent different versions of the coll MCA. */
|
||||
|
||||
entry = OBJ_NEW(mca_base_component_priority_list_item_t);
|
||||
entry->super.cli_component = component;
|
||||
entry->cpli_priority = 0;
|
||||
if (OMPI_SUCCESS == init_query(component, entry,
|
||||
enable_progress_threads,
|
||||
enable_mpi_threads)) {
|
||||
opal_list_append(&mca_coll_base_components_available,
|
||||
(opal_list_item_t *) entry);
|
||||
found = true;
|
||||
} else {
|
||||
|
||||
/* If the component doesn't want to run, then close it.
|
||||
It's already had its close() method invoked; now close
|
||||
it out of the DSO repository (if it's there). */
|
||||
|
||||
mca_base_component_repository_release(component);
|
||||
OBJ_RELEASE(entry);
|
||||
}
|
||||
|
||||
/* Free the entry from the "opened" list */
|
||||
|
||||
OBJ_RELEASE(p);
|
||||
}
|
||||
|
||||
/* Free the entry from the "opened" list */
|
||||
/* The opened list is now no longer useful and we can free it */
|
||||
|
||||
OBJ_RELEASE(p);
|
||||
}
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_opened);
|
||||
mca_coll_base_components_opened_valid = false;
|
||||
|
||||
/* The opened list is now no longer useful and we can free it */
|
||||
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_opened);
|
||||
mca_coll_base_components_opened_valid = false;
|
||||
/* If we have no collective components available, it's an error.
|
||||
Thanks for playing! */
|
||||
|
||||
/* If we have no collective components available, it's an error.
|
||||
Thanks for playing! */
|
||||
|
||||
if (!found) {
|
||||
/* Need to free all items in the list */
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_available);
|
||||
mca_coll_base_components_available_valid = false;
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: no coll components available!");
|
||||
orte_show_help("help-mca-base", "find-available:none-found", true,
|
||||
"coll");
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
if (!found) {
|
||||
/* Need to free all items in the list */
|
||||
OBJ_DESTRUCT(&mca_coll_base_components_available);
|
||||
mca_coll_base_components_available_valid = false;
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: no coll components available!");
|
||||
orte_show_help("help-mca-base", "find-available:none-found", true,
|
||||
"coll");
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
|
||||
/* All done */
|
||||
/* All done */
|
||||
|
||||
return OMPI_SUCCESS;
|
||||
return OMPI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@ -144,67 +144,66 @@ int mca_coll_base_find_available(bool enable_progress_threads,
|
||||
* Query a component, see if it wants to run at all. If it does, save
|
||||
* some information. If it doesn't, close it.
|
||||
*/
|
||||
static int init_query(const mca_base_component_t *m,
|
||||
mca_base_component_priority_list_item_t *entry,
|
||||
bool enable_progress_threads,
|
||||
bool enable_mpi_threads)
|
||||
static int init_query(const mca_base_component_t * m,
|
||||
mca_base_component_priority_list_item_t * entry,
|
||||
bool enable_progress_threads, bool enable_mpi_threads)
|
||||
{
|
||||
int ret;
|
||||
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: querying coll component %s",
|
||||
m->mca_component_name);
|
||||
|
||||
/* This component has already been successfully opened. So now query
|
||||
it. */
|
||||
|
||||
if (2 == m->mca_type_major_version &&
|
||||
0 == m->mca_type_minor_version &&
|
||||
0 == m->mca_type_release_version) {
|
||||
ret = init_query_2_0_0(m, entry, enable_progress_threads,
|
||||
enable_mpi_threads);
|
||||
} else {
|
||||
/* Unrecognized coll API version */
|
||||
int ret;
|
||||
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: unrecognized coll API version (%d.%d.%d, ignored)",
|
||||
m->mca_type_major_version,
|
||||
m->mca_type_minor_version,
|
||||
m->mca_type_release_version);
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
|
||||
/* Query done -- look at the return value to see what happened */
|
||||
|
||||
if (OMPI_SUCCESS != ret) {
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: coll component %s is not available",
|
||||
"coll:find_available: querying coll component %s",
|
||||
m->mca_component_name);
|
||||
if (NULL != m->mca_close_component) {
|
||||
m->mca_close_component();
|
||||
|
||||
/* This component has already been successfully opened. So now
|
||||
query it. */
|
||||
|
||||
if (2 == m->mca_type_major_version &&
|
||||
0 == m->mca_type_minor_version &&
|
||||
0 == m->mca_type_release_version) {
|
||||
ret = init_query_2_0_0(m, entry, enable_progress_threads,
|
||||
enable_mpi_threads);
|
||||
} else {
|
||||
/* Unrecognized coll API version */
|
||||
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: unrecognized coll API version (%d.%d.%d, ignored)",
|
||||
m->mca_type_major_version,
|
||||
m->mca_type_minor_version,
|
||||
m->mca_type_release_version);
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
} else {
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: coll component %s is available",
|
||||
m->mca_component_name);
|
||||
}
|
||||
|
||||
/* All done */
|
||||
/* Query done -- look at the return value to see what happened */
|
||||
|
||||
return ret;
|
||||
if (OMPI_SUCCESS != ret) {
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: coll component %s is not available",
|
||||
m->mca_component_name);
|
||||
if (NULL != m->mca_close_component) {
|
||||
m->mca_close_component();
|
||||
}
|
||||
} else {
|
||||
opal_output_verbose(10, mca_coll_base_output,
|
||||
"coll:find_available: coll component %s is available",
|
||||
m->mca_component_name);
|
||||
}
|
||||
|
||||
/* All done */
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Query a specific component, coll v2.0.0
|
||||
*/
|
||||
static int init_query_2_0_0(const mca_base_component_t *component,
|
||||
mca_base_component_priority_list_item_t *entry,
|
||||
bool enable_progress_threads,
|
||||
static int init_query_2_0_0(const mca_base_component_t * component,
|
||||
mca_base_component_priority_list_item_t * entry,
|
||||
bool enable_progress_threads,
|
||||
bool enable_mpi_threads)
|
||||
{
|
||||
mca_coll_base_component_2_0_0_t *coll =
|
||||
(mca_coll_base_component_2_0_0_t *) component;
|
||||
mca_coll_base_component_2_0_0_t *coll =
|
||||
(mca_coll_base_component_2_0_0_t *) component;
|
||||
|
||||
return coll->collm_init_query(enable_progress_threads,
|
||||
enable_mpi_threads);
|
||||
|
@ -31,7 +31,6 @@
|
||||
#include "ompi/mca/coll/coll.h"
|
||||
#include "ompi/mca/coll/base/base.h"
|
||||
|
||||
|
||||
/*
|
||||
* The following file was created by configure. It contains extern
|
||||
* statements and the definition of an array of pointers to each
|
||||
@ -40,7 +39,6 @@
|
||||
#include "ompi/mca/coll/base/static-components.h"
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Global variables; most of which are loaded by back-ends of MCA
|
||||
* variables
|
||||
@ -68,9 +66,9 @@ int mca_coll_base_open(void)
|
||||
|
||||
/* Open up all available components */
|
||||
|
||||
if (OMPI_SUCCESS !=
|
||||
if (OMPI_SUCCESS !=
|
||||
mca_base_components_open("coll", mca_coll_base_output,
|
||||
mca_coll_base_static_components,
|
||||
mca_coll_base_static_components,
|
||||
&mca_coll_base_components_opened, true)) {
|
||||
return OMPI_ERROR;
|
||||
}
|
||||
|
@ -40,6 +40,4 @@
|
||||
#define MCA_COLL_BASE_TAG_SCAN -23
|
||||
#define MCA_COLL_BASE_TAG_SCATTER -24
|
||||
#define MCA_COLL_BASE_TAG_SCATTERV -25
|
||||
|
||||
|
||||
#endif /* MCA_COLL_BASE_TAGS_H */
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user