2004-07-14 18:11:03 +04:00
|
|
|
// -*- c++ -*-
|
|
|
|
//
|
2004-11-22 04:38:40 +03:00
|
|
|
// 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$
|
|
|
|
//
|
|
|
|
// Additional copyrights may follow
|
|
|
|
//
|
2004-07-14 18:11:03 +04:00
|
|
|
// $HEADER$
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
class Cartcomm : public Intracomm {
|
|
|
|
public:
|
|
|
|
|
|
|
|
// construction
|
|
|
|
Cartcomm() { }
|
|
|
|
// copy
|
|
|
|
Cartcomm(const Comm_Null& data) : Intracomm(data) { }
|
|
|
|
// inter-language operability
|
|
|
|
inline Cartcomm(const MPI_Comm& data);
|
|
|
|
#if 0 /* OMPI_ENABLE_MPI_PROFILING */
|
|
|
|
Cartcomm(const Cartcomm& data) : Intracomm(data), pmpi_comm(data) { }
|
|
|
|
Cartcomm(const PMPI::Cartcomm& d) :
|
|
|
|
Intracomm((const PMPI::Intracomm&)d),
|
|
|
|
pmpi_comm(d) { }
|
|
|
|
|
|
|
|
// assignment
|
|
|
|
Cartcomm& operator=(const Cartcomm& data) {
|
|
|
|
Intracomm::operator=(data);
|
|
|
|
pmpi_comm = data.pmpi_comm; return *this; }
|
|
|
|
Cartcomm& operator=(const Comm_Null& data) {
|
|
|
|
Intracomm::operator=(data);
|
|
|
|
pmpi_comm = (PMPI::Cartcomm)data; return *this; }
|
|
|
|
// inter-language operability
|
|
|
|
Cartcomm& operator=(const MPI_Comm& data) {
|
|
|
|
Intracomm::operator=(data);
|
|
|
|
pmpi_comm = data; return *this; }
|
|
|
|
#else
|
|
|
|
Cartcomm(const Cartcomm& data) : Intracomm(data.mpi_comm) { }
|
|
|
|
// assignment
|
|
|
|
Cartcomm& operator=(const Cartcomm& data) {
|
|
|
|
mpi_comm = data.mpi_comm; return *this; }
|
|
|
|
Cartcomm& operator=(const Comm_Null& data) {
|
|
|
|
mpi_comm = data; return *this; }
|
|
|
|
// inter-language operability
|
|
|
|
Cartcomm& operator=(const MPI_Comm& data) {
|
|
|
|
mpi_comm = data; return *this; }
|
|
|
|
#endif
|
|
|
|
//
|
|
|
|
// Groups, Contexts, and Communicators
|
|
|
|
//
|
|
|
|
|
|
|
|
Cartcomm Dup() const;
|
|
|
|
|
|
|
|
virtual Cartcomm& Clone() const;
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Groups, Contexts, and Communicators
|
|
|
|
//
|
|
|
|
|
|
|
|
virtual int Get_dim() const;
|
|
|
|
|
|
|
|
virtual void Get_topo(int maxdims, int dims[], bool periods[],
|
|
|
|
int coords[]) const;
|
|
|
|
|
|
|
|
virtual int Get_cart_rank(const int coords[]) const;
|
|
|
|
|
|
|
|
virtual void Get_coords(int rank, int maxdims, int coords[]) const;
|
|
|
|
|
|
|
|
virtual void Shift(int direction, int disp,
|
|
|
|
int &rank_source, int &rank_dest) const;
|
|
|
|
|
|
|
|
virtual Cartcomm Sub(const bool remain_dims[]);
|
|
|
|
|
|
|
|
virtual int Map(int ndims, const int dims[], const bool periods[]) const;
|
|
|
|
|
|
|
|
#if 0 /* OMPI_ENABLE_MPI_PROFILING */
|
|
|
|
private:
|
|
|
|
PMPI::Cartcomm pmpi_comm;
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//===================================================================
|
|
|
|
// Class Graphcomm
|
|
|
|
//===================================================================
|
|
|
|
|
|
|
|
class Graphcomm : public Intracomm {
|
|
|
|
public:
|
|
|
|
|
|
|
|
// construction
|
|
|
|
Graphcomm() { }
|
|
|
|
// copy
|
|
|
|
Graphcomm(const Comm_Null& data) : Intracomm(data) { }
|
|
|
|
// inter-language operability
|
|
|
|
inline Graphcomm(const MPI_Comm& data);
|
|
|
|
#if 0 /* OMPI_ENABLE_MPI_PROFILING */
|
|
|
|
Graphcomm(const Graphcomm& data) : Intracomm(data), pmpi_comm(data) { }
|
|
|
|
Graphcomm(const PMPI::Graphcomm& d) :
|
|
|
|
Intracomm((const PMPI::Intracomm&)d), pmpi_comm(d) { }
|
|
|
|
|
|
|
|
// assignment
|
|
|
|
Graphcomm& operator=(const Graphcomm& data) {
|
|
|
|
Intracomm::operator=(data);
|
|
|
|
pmpi_comm = data.pmpi_comm; return *this; }
|
|
|
|
Graphcomm& operator=(const Comm_Null& data) {
|
|
|
|
Intracomm::operator=(data);
|
|
|
|
pmpi_comm = (PMPI::Graphcomm)data; return *this; }
|
|
|
|
// inter-language operability
|
|
|
|
Graphcomm& operator=(const MPI_Comm& data) {
|
|
|
|
Intracomm::operator=(data);
|
|
|
|
pmpi_comm = data; return *this; }
|
|
|
|
|
|
|
|
#else
|
|
|
|
Graphcomm(const Graphcomm& data) : Intracomm(data.mpi_comm) { }
|
|
|
|
// assignment
|
|
|
|
Graphcomm& operator=(const Graphcomm& data) {
|
|
|
|
mpi_comm = data.mpi_comm; return *this; }
|
|
|
|
Graphcomm& operator=(const Comm_Null& data) {
|
|
|
|
mpi_comm = data; return *this; }
|
|
|
|
// inter-language operability
|
|
|
|
Graphcomm& operator=(const MPI_Comm& data) {
|
|
|
|
mpi_comm = data; return *this; }
|
|
|
|
#endif
|
|
|
|
|
|
|
|
//
|
|
|
|
// Groups, Contexts, and Communicators
|
|
|
|
//
|
|
|
|
|
|
|
|
Graphcomm Dup() const;
|
|
|
|
|
|
|
|
virtual Graphcomm& Clone() const;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Process Topologies
|
|
|
|
//
|
|
|
|
|
|
|
|
virtual void Get_dims(int nnodes[], int nedges[]) const;
|
|
|
|
|
|
|
|
virtual void Get_topo(int maxindex, int maxedges, int index[],
|
|
|
|
int edges[]) const;
|
|
|
|
|
|
|
|
virtual int Get_neighbors_count(int rank) const;
|
|
|
|
|
|
|
|
virtual void Get_neighbors(int rank, int maxneighbors,
|
|
|
|
int neighbors[]) const;
|
|
|
|
|
|
|
|
virtual int Map(int nnodes, const int index[],
|
|
|
|
const int edges[]) const;
|
|
|
|
|
|
|
|
#if 0 /* OMPI_ENABLE_MPI_PROFILING */
|
|
|
|
private:
|
|
|
|
PMPI::Graphcomm pmpi_comm;
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|