From f5abd20a5767668e1f33000e70e7a737c87df601 Mon Sep 17 00:00:00 2001 From: Edgar Gabriel Date: Mon, 27 Dec 2004 08:56:33 +0000 Subject: [PATCH] adding the basic framework for the hierarchical collective module. This commit was SVN r3880. --- src/mca/coll/hierarch/.ompi_ignore | 0 src/mca/coll/hierarch/Makefile.am | 57 +++++ src/mca/coll/hierarch/VERSION | 6 + src/mca/coll/hierarch/coll_hierarch.c | 145 +++++++++++ src/mca/coll/hierarch/coll_hierarch.h | 235 ++++++++++++++++++ src/mca/coll/hierarch/coll_hierarch_barrier.c | 51 ++++ src/mca/coll/hierarch/coll_hierarch_bcast.c | 57 +++++ .../coll/hierarch/coll_hierarch_component.c | 103 ++++++++ src/mca/coll/hierarch/coll_hierarch_reduce.c | 61 +++++ src/mca/coll/hierarch/configure.params | 22 ++ src/mca/coll/hierarch/configure.stub | 18 ++ 11 files changed, 755 insertions(+) create mode 100644 src/mca/coll/hierarch/.ompi_ignore create mode 100644 src/mca/coll/hierarch/Makefile.am create mode 100644 src/mca/coll/hierarch/VERSION create mode 100644 src/mca/coll/hierarch/coll_hierarch.c create mode 100644 src/mca/coll/hierarch/coll_hierarch.h create mode 100644 src/mca/coll/hierarch/coll_hierarch_barrier.c create mode 100644 src/mca/coll/hierarch/coll_hierarch_bcast.c create mode 100644 src/mca/coll/hierarch/coll_hierarch_component.c create mode 100644 src/mca/coll/hierarch/coll_hierarch_reduce.c create mode 100644 src/mca/coll/hierarch/configure.params create mode 100644 src/mca/coll/hierarch/configure.stub diff --git a/src/mca/coll/hierarch/.ompi_ignore b/src/mca/coll/hierarch/.ompi_ignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/mca/coll/hierarch/Makefile.am b/src/mca/coll/hierarch/Makefile.am new file mode 100644 index 0000000000..a748e4ac75 --- /dev/null +++ b/src/mca/coll/hierarch/Makefile.am @@ -0,0 +1,57 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Need to use our own AUTOMAKE_OPTIONS -- cannot include +# Makefile.options from main ompi tree because Automake now defers +# "include" statements until "make" time. Hence, if we're building +# this component outside the ompi tree, the include statement will +# fail. + +AUTOMAKE_OPTIONS = foreign dist-bzip2 + + +EXTRA_DIST = VERSION + +# Make the output library in this directory, and name it either +# mca__.la (for DSO builds) or libmca__.la +# (for static builds). + +if OMPI_BUILD_coll_hierarch_DSO +component_noinst = +component_install = mca_coll_hierarch.la +else +component_noinst = libmca_coll_hierarch.la +component_install = +endif + +mcacomponentdir = $(libdir)/openmpi +mcacomponent_LTLIBRARIES = $(component_install) +mca_coll_hierarch_la_SOURCES = $(sources) +mca_coll_hierarch_la_LIBADD = $(LIBMPI_LA) +mca_coll_hierarch_la_LDFLAGS = -module -avoid-version + +noinst_LTLIBRARIES = $(component_noinst) +libmca_coll_hierarch_la_SOURCES = $(sources) +libmca_coll_hierarch_la_LIBADD = src/libmca_coll_hierarch.la +libmca_coll_hierarch_la_LDFLAGS = -module -avoid-version + +# Source files + +sources = \ + coll_hierarch.h \ + coll_hierarch.c \ + coll_hierarch_barrier.c \ + coll_hierarch_bcast.c \ + coll_hierarch_component.c \ + coll_hierarch_reduce.c \ No newline at end of file diff --git a/src/mca/coll/hierarch/VERSION b/src/mca/coll/hierarch/VERSION new file mode 100644 index 0000000000..05a12d4a75 --- /dev/null +++ b/src/mca/coll/hierarch/VERSION @@ -0,0 +1,6 @@ +major=10 +minor=0 +release=0 +alpha=0 +beta=0 +svn=1 diff --git a/src/mca/coll/hierarch/coll_hierarch.c b/src/mca/coll/hierarch/coll_hierarch.c new file mode 100644 index 0000000000..d781738ce0 --- /dev/null +++ b/src/mca/coll/hierarch/coll_hierarch.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "ompi_config.h" +#include "coll_hierarch.h" + +#include + +#include "mpi.h" +#include "communicator/communicator.h" +#include "mca/coll/coll.h" +#include "mca/coll/base/base.h" +#include "coll_hierarch.h" + + +/* + * Linear set of collective algorithms + */ +static const mca_coll_base_module_1_0_0_t intra = { + + /* Initialization / finalization functions */ + + mca_coll_hierarch_module_init, + mca_coll_hierarch_module_finalize, + + /* Collective function pointers */ + /* function pointers marked with NULL are not yet implemented + and will use the functions provided in the basic module */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + mca_coll_hierarch_barrier_intra, + mca_coll_hierarch_bcast_intra, + NULL, + NULL, + NULL, + mca_coll_hierarch_reduce_intra, + NULL, + NULL, + NULL, + NULL +}; + + +/* + * Linear set of collective algorithms for intercommunicators + */ +static const mca_coll_base_module_1_0_0_t inter = { + + /* Initialization / finalization functions */ + + mca_coll_hierarch_module_init, + mca_coll_hierarch_module_finalize, + + /* Collective function pointers */ + /* No inter-communicator functions are provided at the moment */ + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL +}; + + +/* + * Initial query function that is invoked during MPI_INIT, allowing + * this module to indicate what level of thread support it provides. + */ +int mca_coll_hierarch_init_query(bool *allow_hierarch_user_threads, + bool *have_hidden_user_threads) +{ + *allow_hierarch_user_threads = true; + *have_hidden_user_threads = false; + + /* All done */ + + return OMPI_SUCCESS; +} + + +/* + * Invoked when there's a new communicator that has been created. + * Look at the communicator and decide which set of functions and + * priority we want to return. + */ +const mca_coll_base_module_1_0_0_t * +mca_coll_hierarch_comm_query(struct ompi_communicator_t *comm, int *priority) +{ + if (OMPI_SUCCESS != mca_base_param_lookup_int(mca_coll_hierarch_priority_param, + priority)) { + return NULL; + } + + return OMPI_COMM_IS_INTER(comm) ? &inter : &intra; +} + + +/* + * Init module on the communicator + */ +const struct mca_coll_base_module_1_0_0_t * +mca_coll_hierarch_module_init(struct ompi_communicator_t *comm) +{ + mca_base_param_lookup_int(mca_coll_hierarch_verbose_param, + &mca_coll_hierarch_verbose); + if (mca_coll_hierarch_verbose > 0) { + printf("Hello! This is the \"hierarch\" coll component. I'll be your coll component\ntoday. Please tip your waitresses well.\n"); + } + + return OMPI_COMM_IS_INTER(comm) ? &inter : &intra; +} + + +/* + * Finalize module on the communicator + */ +int mca_coll_hierarch_module_finalize(struct ompi_communicator_t *comm) +{ + return OMPI_SUCCESS; +} diff --git a/src/mca/coll/hierarch/coll_hierarch.h b/src/mca/coll/hierarch/coll_hierarch.h new file mode 100644 index 0000000000..057f38c7b1 --- /dev/null +++ b/src/mca/coll/hierarch/coll_hierarch.h @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef MCA_COLL_HIERARCH_EXPORT_H +#define MCA_COLL_HIERARCH_EXPORT_H + +#include "ompi_config.h" + +#include "mpi.h" +#include "mca/mca.h" +#include "mca/coll/coll.h" +#include "request/request.h" +#include "mca/pml/pml.h" + +#if defined(c_plusplus) || defined(__cplusplus) +extern "C" { +#endif + +/* + * Globally exported variable + */ + +extern const mca_coll_base_component_1_0_0_t mca_coll_hierarch_component; +extern int mca_coll_hierarch_priority_param; +extern int mca_coll_hierarch_verbose_param; +extern int mca_coll_hierarch_verbose; + + +/* + * coll API functions + */ + + + /* API functions */ + + int mca_coll_hierarch_init_query(bool *allow_hierarch_user_threads, + bool *have_hidden_threads); + const struct mca_coll_base_module_1_0_0_t * + mca_coll_hierarch_comm_query(struct ompi_communicator_t *comm, + int *priority); + int mca_coll_hierarch_comm_unquery(struct ompi_communicator_t *comm); + + const struct mca_coll_base_module_1_0_0_t * + mca_coll_hierarch_module_init(struct ompi_communicator_t *comm); + int mca_coll_hierarch_module_finalize(struct ompi_communicator_t *comm); + + int mca_coll_hierarch_allgather_intra(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void *rbuf, int rcount, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_allgather_inter(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void *rbuf, int rcount, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_allgatherv_intra(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void * rbuf, int *rcounts, + int *disps, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_allgatherv_inter(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void * rbuf, int *rcounts, + int *disps, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_allreduce_intra(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_allreduce_inter(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_alltoall_intra(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void* rbuf, int rcount, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_alltoall_inter(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void* rbuf, int rcount, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_alltoallv_intra(void *sbuf, int *scounts, + int *sdisps, + struct ompi_datatype_t *sdtype, + void *rbuf, int *rcounts, + int *rdisps, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_alltoallv_inter(void *sbuf, int *scounts, + int *sdisps, + struct ompi_datatype_t *sdtype, + void *rbuf, int *rcounts, + int *rdisps, + struct ompi_datatype_t *rdtype, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_alltoallw_intra(void *sbuf, int *scounts, + int *sdisps, + struct ompi_datatype_t **sdtypes, + void *rbuf, int *rcounts, + int *rdisps, + struct ompi_datatype_t **rdtypes, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_alltoallw_inter(void *sbuf, int *scounts, + int *sdisps, + struct ompi_datatype_t **sdtypes, + void *rbuf, int *rcounts, + int *rdisps, + struct ompi_datatype_t **rdtypes, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_barrier_intra(struct ompi_communicator_t *comm); + int mca_coll_hierarch_barrier_inter(struct ompi_communicator_t *comm); + + int mca_coll_hierarch_bcast_intra(void *buff, int count, + struct ompi_datatype_t *datatype, + int root, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_bcast_inter(void *buff, int count, + struct ompi_datatype_t *datatype, + int root, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_exscan_intra(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_exscan_inter(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_gather_intra(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void *rbuf, int rcount, + struct ompi_datatype_t *rdtype, + int root, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_gather_inter(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void *rbuf, int rcount, + struct ompi_datatype_t *rdtype, + int root, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_gatherv_intra(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void *rbuf, int *rcounts, int *disps, + struct ompi_datatype_t *rdtype, + int root, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_gatherv_inter(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, + void *rbuf, int *rcounts, int *disps, + struct ompi_datatype_t *rdtype, + int root, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_reduce_intra(void *sbuf, void* rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + int root, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_reduce_inter(void *sbuf, void* rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + int root, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_reduce_scatter_intra(void *sbuf, void *rbuf, + int *rcounts, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_reduce_scatter_inter(void *sbuf, void *rbuf, + int *rcounts, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_scan_intra(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_scan_inter(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + struct ompi_communicator_t *comm); + + int mca_coll_hierarch_scatter_intra(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, void *rbuf, + int rcount, struct ompi_datatype_t *rdtype, + int root, struct ompi_communicator_t *comm); + int mca_coll_hierarch_scatter_inter(void *sbuf, int scount, + struct ompi_datatype_t *sdtype, void *rbuf, + int rcount, struct ompi_datatype_t *rdtype, + int root, struct ompi_communicator_t *comm); + + int mca_coll_hierarch_scatterv_intra(void *sbuf, int *scounts, int *disps, + struct ompi_datatype_t *sdtype, + void* rbuf, int rcount, + struct ompi_datatype_t *rdtype, int root, + struct ompi_communicator_t *comm); + int mca_coll_hierarch_scatterv_inter(void *sbuf, int *scounts, int *disps, + struct ompi_datatype_t *sdtype, + void* rbuf, int rcount, + struct ompi_datatype_t *rdtype, int root, + struct ompi_communicator_t *comm); + + + +#if defined(c_plusplus) || defined(__cplusplus) +} +#endif +#endif /* MCA_COLL_HIERARCH_EXPORT_H */ diff --git a/src/mca/coll/hierarch/coll_hierarch_barrier.c b/src/mca/coll/hierarch/coll_hierarch_barrier.c new file mode 100644 index 0000000000..f0942002a7 --- /dev/null +++ b/src/mca/coll/hierarch/coll_hierarch_barrier.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "ompi_config.h" +#include "coll_hierarch.h" + +#include "mpi.h" +#include "include/constants.h" +#include "util/output.h" +#include "mca/coll/coll.h" +#include "mca/coll/base/base.h" +#include "coll_hierarch.h" + + +/* + * barrier_intra + * + * Function: - barrier using O(N) algorithm + * Accepts: - same as MPI_Barrier() + * Returns: - MPI_SUCCESS or error code + */ +int mca_coll_hierarch_barrier_intra(struct ompi_communicator_t *comm) +{ + ompi_output_verbose(10, mca_coll_base_output, "In hierarch barrier_intra"); + return comm->c_coll_basic_module->coll_barrier(comm); +} + + +/* + * barrier_inter + * + * Function: - barrier using O(log(N)) algorithm + * Accepts: - same as MPI_Barrier() + * Returns: - MPI_SUCCESS or error code + */ +int mca_coll_hierarch_barrier_inter(struct ompi_communicator_t *comm) +{ + ompi_output_verbose(10, mca_coll_base_output, "In hierarch barrier_inter"); + return comm->c_coll_basic_module->coll_barrier(comm); +} diff --git a/src/mca/coll/hierarch/coll_hierarch_bcast.c b/src/mca/coll/hierarch/coll_hierarch_bcast.c new file mode 100644 index 0000000000..92d74e2d58 --- /dev/null +++ b/src/mca/coll/hierarch/coll_hierarch_bcast.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "ompi_config.h" +#include "coll_hierarch.h" + +#include "mpi.h" +#include "include/constants.h" +#include "util/output.h" +#include "mca/coll/coll.h" +#include "mca/coll/base/base.h" +#include "coll_hierarch.h" + + +/* + * bcast_intra + * + * Function: - broadcast using O(N) algorithm + * Accepts: - same arguments as MPI_Bcast() + * Returns: - MPI_SUCCESS or error code + */ +int mca_coll_hierarch_bcast_intra(void *buff, int count, + struct ompi_datatype_t *datatype, int root, + struct ompi_communicator_t *comm) +{ + ompi_output_verbose(10, mca_coll_base_output, "In hierarch bcast_intra"); + return comm->c_coll_basic_module->coll_bcast(buff, count, datatype, + root, comm); +} + + +/* + * bcast_inter + * + * Function: - broadcast using O(N) algorithm + * Accepts: - same arguments as MPI_Bcast() + * Returns: - MPI_SUCCESS or error code + */ +int mca_coll_hierarch_bcast_inter(void *buff, int count, + struct ompi_datatype_t *datatype, int root, + struct ompi_communicator_t *comm) +{ + ompi_output_verbose(10, mca_coll_base_output, "In hierarch bcast_inter"); + return comm->c_coll_basic_module->coll_bcast(buff, count, datatype, + root, comm); +} diff --git a/src/mca/coll/hierarch/coll_hierarch_component.c b/src/mca/coll/hierarch/coll_hierarch_component.c new file mode 100644 index 0000000000..dcdea7f9a7 --- /dev/null +++ b/src/mca/coll/hierarch/coll_hierarch_component.c @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + * + * These symbols are in a file by themselves to provide nice linker + * semantics. Since linkers generally pull in symbols by object + * files, keeping these symbols as the only symbols in this file + * prevents utility programs such as "ompi_info" from having to import + * entire components just to query their version and parameters. + */ + +#include "ompi_config.h" +#include "coll_hierarch.h" +#include "coll-hierarch-version.h" + +#include "mpi.h" +#include "mca/coll/coll.h" +#include "coll_hierarch.h" + +/* + * Public string showing the coll ompi_hierarch component version number + */ +const char *mca_coll_hierarch_component_version_string = + "OMPI/MPI hierarch collective MCA component version " MCA_coll_hierarch_VERSION; + +/* + * Global variable + */ +int mca_coll_hierarch_priority_param = -1; +int mca_coll_hierarch_verbose_param = -1; +int mca_coll_hierarch_verbose = 0; + +/* + * Local function + */ +static int hierarch_open(void); + +/* + * Instantiate the public struct with all of our public information + * and pointers to our public functions in it + */ + +const mca_coll_base_component_1_0_0_t mca_coll_hierarch_component = { + + /* First, the mca_component_t struct containing meta information + about the component itself */ + + { + /* Indicate that we are a coll v1.0.0 component (which also implies a + specific MCA version) */ + + MCA_COLL_BASE_VERSION_1_0_0, + + /* Component name and version */ + + "hierarch", + MCA_coll_hierarch_MAJOR_VERSION, + MCA_coll_hierarch_MINOR_VERSION, + MCA_coll_hierarch_RELEASE_VERSION, + + /* Component open and close functions */ + + hierarch_open, + NULL + }, + + /* Next the MCA v1.0.0 component meta data */ + + { + /* Whether the component is checkpointable or not */ + + true + }, + + /* Initialization / querying functions */ + + mca_coll_hierarch_init_query, + mca_coll_hierarch_comm_query, + NULL +}; + + +static int hierarch_open(void) +{ + /* Use a low priority, but allow other components to be lower */ + + mca_coll_hierarch_priority_param = + mca_base_param_register_int("coll", "hierarch", "priority", NULL, 20); + mca_coll_hierarch_verbose_param = + mca_base_param_register_int("coll", "hierarch", "verbose", NULL, + mca_coll_hierarch_verbose); + + return OMPI_SUCCESS; +} diff --git a/src/mca/coll/hierarch/coll_hierarch_reduce.c b/src/mca/coll/hierarch/coll_hierarch_reduce.c new file mode 100644 index 0000000000..15da5ffcad --- /dev/null +++ b/src/mca/coll/hierarch/coll_hierarch_reduce.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University. + * All rights reserved. + * Copyright (c) 2004-2005 The Trustees of the University of Tennessee. + * All rights reserved. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "ompi_config.h" +#include "coll_hierarch.h" + +#include + +#include "mpi.h" +#include "include/constants.h" +#include "util/output.h" +#include "mca/coll/coll.h" +#include "mca/coll/base/base.h" +#include "coll_hierarch.h" + + +/* + * reduce_intra + * + * Function: - reduction using O(N) algorithm + * Accepts: - same as MPI_Reduce() + * Returns: - MPI_SUCCESS or error code + */ +int mca_coll_hierarch_reduce_intra(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + int root, struct ompi_communicator_t *comm) +{ + ompi_output_verbose(10, mca_coll_base_output, "In hierarch reduce_intra"); + return comm->c_coll_basic_module->coll_reduce(sbuf, rbuf, count, dtype, + op, root, comm); +} + + +/* + * reduce_log_inter + * + * Function: - reduction using O(N) algorithm + * Accepts: - same as MPI_Reduce() + * Returns: - MPI_SUCCESS or error code + */ +int mca_coll_hierarch_reduce_inter(void *sbuf, void *rbuf, int count, + struct ompi_datatype_t *dtype, + struct ompi_op_t *op, + int root, struct ompi_communicator_t *comm) +{ + ompi_output_verbose(10, mca_coll_base_output, "In hierarch reduce_inter"); + return comm->c_coll_basic_module->coll_reduce(sbuf, rbuf, count, dtype, + op, root, comm); +} diff --git a/src/mca/coll/hierarch/configure.params b/src/mca/coll/hierarch/configure.params new file mode 100644 index 0000000000..2419d0109f --- /dev/null +++ b/src/mca/coll/hierarch/configure.params @@ -0,0 +1,22 @@ +# -*- shell-script -*- +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# Specific to this module + +PARAM_INIT_FILE=coll_hierarch.c +PARAM_CONFIG_HEADER_FILE=coll_hierarch_config.h +PARAM_CONFIG_FILES="Makefile" +PARAM_CONFIG_AUX_DIR=config +PARAM_WANT_COMPILE_EXTERNAL=1 diff --git a/src/mca/coll/hierarch/configure.stub b/src/mca/coll/hierarch/configure.stub new file mode 100644 index 0000000000..2597c25133 --- /dev/null +++ b/src/mca/coll/hierarch/configure.stub @@ -0,0 +1,18 @@ +# +# Copyright (c) 2004-2005 The Trustees of Indiana University. +# All rights reserved. +# Copyright (c) 2004-2005 The Trustees of the University of Tennessee. +# All rights reserved. +# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +# University of Stuttgart. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# +# Don't really need anything in here -- we just want a configure +# script so that this can be a standalone component. +# + +AC_DEFUN([MCA_CONFIGURE_STUB],[])