Zoltan2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Zoltan2_MachineRepresentation.hpp
Go to the documentation of this file.
1 #ifndef _ZOLTAN2_MACHINEREPRESENTATION_HPP_
2 #define _ZOLTAN2_MACHINEREPRESENTATION_HPP_
3 
4 #include <Teuchos_Comm.hpp>
5 #include <Teuchos_StandardParameterEntryValidators.hpp>
6 #include <Teuchos_ParameterList.hpp>
7 
9 //#include <Zoltan2_MachineTorusLDMS.hpp>
16 #include <Zoltan2_Environment.hpp>
17 
18 //#define HAVE_ZOLTAN2_BGQTEST
19 namespace Zoltan2{
20 
24 template <typename pcoord_t, typename part_t>
26 
27 public:
28  typedef pcoord_t machine_pcoord_t;
30 /*
31 #if defined(HAVE_ZOLTAN2_LDMS)
32  #if defined(ZOLTAN2_MACHINE_TORUS)
33  // TODO: Full LDMS Implementation
34  typedef MachineTorusLDMS<pcoord_t, part_t> machine_t;
35  #else
36  typedef MachineForTesting<pcoord_t, part_t> machine_t;
37  #endif
38 */
39 #if defined(HAVE_ZOLTAN2_RCALIB)
40  #if defined(ZOLTAN2_MACHINE_TORUS)
42  #elif defined(ZOLTAN2_MACHINE_DRAGONFLY)
44  #else
46  #endif
47 
48 #elif defined(HAVE_ZOLTAN2_TOPOMANAGER)
49  #if defined(ZOLTAN2_MACHINE_TORUS)
51  #else
53  #endif
54 
55 #elif defined(HAVE_ZOLTAN2_BGQTEST)
56  #if defined(ZOLTAN2_MACHINE_TORUS)
58  #else
60  #endif
61 
62 #else
63  #if defined(ZOLTAN2_MACHINE_TORUS)
65  #elif defined(ZOLTAN2_MACHINE_DRAGONFLY)
67  #else
69 // typedef MachineTorusRCAForTesting<pcoord_t, part_t> machine_t;
70 // typedef MachineDragonflyRCAForTesting<pcoord_t, part_t> machine_t;
71  #endif
72 #endif
73 
77  MachineRepresentation(const Teuchos::Comm<int> &comm) :
78  machine(new machine_t(comm)) {
79  }
80 
81  MachineRepresentation(const Teuchos::Comm<int> &comm,
82  const Teuchos::ParameterList &pl) :
83  machine(new machine_t(comm, pl)) {
84  }
85 
86  ~MachineRepresentation() { delete machine; }
87 
88  // Interface functions follow.
89  // They are just wrappers around the specific machine's functions.
90 
93  inline bool hasMachineCoordinates() const {
94  return machine->hasMachineCoordinates();
95  }
96 
100  inline int getMachineDim() const { return machine->getMachineDim(); }
101 
107  inline bool getMachineExtent(int *nxyz) const {
108  return machine->getMachineExtent(nxyz);
109  }
110 
116  bool getMachineExtentWrapArounds(bool *wrap_around) const {
117  return machine->getMachineExtentWrapArounds(wrap_around);
118  }
119 
124  inline bool getMyMachineCoordinate(pcoord_t *xyz) const {
125  return machine->getMyMachineCoordinate(xyz);
126  }
127 
132  inline bool getMachineCoordinate(const int rank,
133  pcoord_t *xyz) const {
134  return machine->getMachineCoordinate(rank, xyz);
135  }
136 
141  inline bool getMachineCoordinate(const char *nodename,
142  pcoord_t *xyz) const {
143  return machine->getMachineCoordinate(nodename, xyz);
144  }
145 
152  inline bool getAllMachineCoordinatesView(pcoord_t **&allCoords) const {
153  return machine->getAllMachineCoordinatesView(allCoords);
154  }
155 
158  inline int getNumRanks() const { return machine->getNumRanks(); }
159 
162  inline bool getHopCount(int rank1, int rank2, pcoord_t &hops) const {
163  return machine->getHopCount(rank1, rank2, hops);
164  }
165 
173  inline part_t getNumUniqueGroups() const {
174  return machine->getNumUniqueGroups();
175  }
176 
191  inline bool getGroupCount(part_t *grp_count) const {
192  return machine->getGroupCount(grp_count);
193  }
194 
197  static void getValidParameters(Teuchos::ParameterList &pl)
198  {
199  //TODO: This should be positive integer validator.
200  pl.set("Machine_Optimization_Level", 10,
201  "Machine Coordinate Transformation Method",
203 
204  // validator for file does not have to exist
205  RCP<Teuchos::FileNameValidator> file_not_required_validator =
206  Teuchos::rcp( new Teuchos::FileNameValidator(false) );
207 
208  // bool parameter
209  pl.set("Input_RCA_Machine_Coords", "",
210  "Input File for input machine coordinates",
211  file_not_required_validator);
212  }
213 
214  // KDD TODO: Add Graph interface and methods supporting full LDMS
215  // interface.
216 
217 private:
218  machine_t *machine;
219 };
220 
221 } // namespace Zoltan2
222 
223 #endif
A Machine Class for testing only A more realistic machine should be used for task mapping...
static void getValidParameters(Teuchos::ParameterList &pl)
Set up validators specific to this Problem.
A Dragonfly (e.g. Cori, Trinity, Theta) Machine Class for testing only. A more realistic machine shou...
A TopoManager Machine Class (Torus Networks) for testing only A more realistic machine should be used...
bool getHopCount(int rank1, int rank2, pcoord_t &hops) const
return the hop count between rank1 and rank2
MachineRepresentation(const Teuchos::Comm< int > &comm, const Teuchos::ParameterList &pl)
bool getMachineExtentWrapArounds(bool *wrap_around) const
if the machine has a wrap-around tourus link in each dimension. return true if the information is ava...
MachineRepresentation(const Teuchos::Comm< int > &comm)
Constructor MachineRepresentation Class.
bool getMachineCoordinate(const int rank, pcoord_t *xyz) const
getCoordinate function set the machine coordinate xyz of any rank process return true if coordinates ...
A TopoManager Machine Class on Torus Networks.
SparseMatrixAdapter_t::part_t part_t
int getMachineDim() const
returns the dimension (number of coords per node) in the machine
bool getAllMachineCoordinatesView(pcoord_t **&allCoords) const
getProcDim function set the coordinates of all ranks allCoords[i][j], i=0,...,getMachineDim(), j=0,...,getNumRanks(), is the i-th dimensional coordinate for rank j. return true if coordinates are available for all ranks
int getNumRanks() const
getNumRanks function return the number of ranks.
virtual bool getHopCount(int rank1, int rank2, pcoord_t &hops)
getHopCount function set hops between rank1 and rank2 return true if coordinates are available ...
bool getAllMachineCoordinatesView(pcoord_t **&allCoords) const
bool getMachineExtentWrapArounds(bool *wrap_around) const
if the machine has a wrap-around tourus link in each dimension.
int getNumRanks() const
return the number of ranks.
bool getGroupCount(part_t *grp_count) const
return the number of ranks in each group (RCA X-dim, e.g. first dim)
static RCP< Teuchos::AnyNumberParameterEntryValidator > getAnyIntValidator()
Exists to make setting up validators less cluttered.
MachineRepresentation Class Base class for representing machine coordinates, networks, etc.
part_t getNumUniqueGroups() const
getNumUniqueGroups function return the number of unique Dragonfly network groups in provided allocati...
bool hasMachineCoordinates() const
indicates whether or not the machine has coordinates
virtual bool getGroupCount(part_t *grp_count) const
getGroupCount function return the number of ranks in each group (RCA X-dim, e.g. first dim) ...
bool getMachineCoordinate(const int rank, pcoord_t *xyz)
Defines the Environment class.
bool getMachineExtent(int *nxyz) const
bool getMyMachineCoordinate(pcoord_t *xyz) const
getMyCoordinate function set the machine coordinate xyz of the current process return true if current...
MachineForTesting< pcoord_t, part_t > machine_t
An RCA Machine Class (Torus Networks) for testing only A more realistic machine should be used for ta...
An RCA Machine class on Torus Networks.
virtual part_t getNumUniqueGroups() const
getNumUniqueGroups function return the number of unique Dragonfly network groups in provided allocati...
bool getMachineExtent(int *nxyz) const
sets the number of unique coordinates in each machine dimension
bool getMachineCoordinate(const char *nodename, pcoord_t *xyz) const
getCoordinate function set the machine coordinate xyz of any node by nodename return true if coordina...
A Dragonfly (e.g. Cori, Trinity, &amp; Theta) Machine Class for task mapping.