1
1
openmpi/ompi/mca/sbgp/sbgp.h
2015-06-23 20:59:57 -07:00

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 */