b68d66bb9b
This commit adds support for project_framework_component_* parameter matching. This is the first step in allowing the same framework name in multiple projects. This change also bumps the MCA component version to 2.1.0. All master frameworks have been updated to use the new component versioning macro. An mca.h has been added to each project to add a project specific versioning macro of the form PROJECT_MCA_VERSION_2_1_0. Signed-off-by: Nathan Hjelm <hjelmn@me.com>
138 строки
3.8 KiB
C
138 строки
3.8 KiB
C
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
|
|
/*
|
|
* Copyright (c) 2009-2012 Oak Ridge National Laboratory. All rights reserved.
|
|
* Copyright (c) 2009-2012 Mellanox Technologies. All rights reserved.
|
|
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
|
|
* reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#ifndef MCA_SBGP_H
|
|
#define MCA_SBGP_H
|
|
|
|
#include "ompi_config.h"
|
|
#include "opal/class/opal_list.h"
|
|
#include "ompi/mca/mca.h"
|
|
#include "ompi/communicator/communicator.h"
|
|
|
|
#include "opal/util/show_help.h"
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* List of supported network types
|
|
*/
|
|
|
|
typedef int (*mca_sbgp_component_init_query_fn_t)
|
|
(bool enable_progress_threads, bool enable_mpi_threads);
|
|
|
|
typedef enum {
|
|
OMPI_SBGP_MUMA = 1 << 0, /* Muma */
|
|
OMPI_SBGP_SOCKET = 1 << 1, /* CPU socket */
|
|
OMPI_SBGP_P2P = 1 << 2, /* Point 2 point networks */
|
|
OMPI_SBGP_IBCX2 = 1 << 3, /* Infiniband ConnextX2 */
|
|
OMPI_SBGP_IB = 1 << 4 /* Infiniband */
|
|
} mca_sbgp_net_type;
|
|
|
|
/*
|
|
* Interface function for routine that will extract subgroups
|
|
*
|
|
* @param procs (IN) List of mpi processes to filter
|
|
* @param n_procs_in (IN) Number of input processes
|
|
* @param key (IN) optional key
|
|
* @param output_data (OUT) component specific output
|
|
* @return module, NULL if one is not created.
|
|
*
|
|
*/
|
|
|
|
struct mca_sbgp_base_module_2_0_0_t {
|
|
|
|
/** Collective modules all inherit from opal_object */
|
|
opal_object_t super;
|
|
/* group size */
|
|
int group_size;
|
|
|
|
/* largest power of 2 in group */
|
|
int pow_2;
|
|
|
|
/* number of levels in the tree */
|
|
int n_levels_pow2;
|
|
|
|
/* my index in the group list,
|
|
* pointer to my rank */
|
|
int my_index;
|
|
/* List of ranks.
|
|
* Actually we return to ML array of
|
|
* indexes to ompi_proc.
|
|
* And ML is responsible to replace
|
|
* the indexes to ranks */
|
|
int *group_list;
|
|
/* pointer to *father* communicator,
|
|
* Not sure if we really need it now. I know my rank via my index,
|
|
* and ompi_proc I can cache on sbgp module.
|
|
* For ib I do not need it */
|
|
struct ompi_communicator_t *group_comm;
|
|
/* network supported by this groups */
|
|
mca_sbgp_net_type group_net;
|
|
|
|
/*FIXME:
|
|
* I don't know where to add the use_hdl flag since the
|
|
* mca_bcol_basesmuma_comm_query takes just two input parameters.
|
|
*/
|
|
bool use_hdl;
|
|
|
|
};
|
|
typedef struct mca_sbgp_base_module_2_0_0_t mca_sbgp_base_module_2_0_0_t;
|
|
typedef struct mca_sbgp_base_module_2_0_0_t mca_sbgp_base_module_t;
|
|
/* typedef mca_sbgp_base_module_2_0_0_t mca_sbgp_base_module_t; */
|
|
OMPI_DECLSPEC OBJ_CLASS_DECLARATION(mca_sbgp_base_module_t);
|
|
|
|
typedef mca_sbgp_base_module_t *(*mca_sbgp_create_subgroup_fn_t)(
|
|
struct ompi_proc_t ** procs, int n_procs_in,
|
|
struct ompi_communicator_t *comm, char *key,
|
|
void *output_data
|
|
);
|
|
|
|
/**
|
|
* Subgrouping component interface
|
|
*
|
|
* Component interface for the sub-gorup framework. A public
|
|
* instance of this structure, called
|
|
* mca_sbgp_[component_name]_component, must exist in any sub-group
|
|
* component.
|
|
*/
|
|
struct mca_sbgp_base_component_2_0_0_t {
|
|
/** Base component description */
|
|
mca_base_component_t sbgp_version;
|
|
|
|
/** Sbgp component init query function */
|
|
mca_sbgp_component_init_query_fn_t sbgp_init_query;
|
|
|
|
/** process selection function */
|
|
mca_sbgp_create_subgroup_fn_t select_procs;
|
|
|
|
/** priority */
|
|
int priority;
|
|
|
|
};
|
|
typedef struct mca_sbgp_base_component_2_0_0_t mca_sbgp_base_component_2_0_0_t;
|
|
typedef struct mca_sbgp_base_component_2_0_0_t mca_sbgp_base_component;
|
|
|
|
|
|
/*
|
|
* Macro for use in components that are of type coll
|
|
*/
|
|
#define MCA_SBGP_BASE_VERSION_2_0_0 \
|
|
OMPI_MCA_BASE_VERSION_2_1_0("sbgp", 2, 0, 0)
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
}
|
|
#endif
|
|
#endif /* MCA_SBGP_H */
|