Zoltan2
Loading...
Searching...
No Matches
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>
17
18//#define HAVE_ZOLTAN2_BGQTEST
19namespace Zoltan2{
20
24template <typename pcoord_t, typename part_t>
26
27public:
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)
41 typedef MachineTorusRCA<pcoord_t, part_t> machine_t;
42 #elif defined(ZOLTAN2_MACHINE_DRAGONFLY)
43 typedef MachineDragonflyRCA<pcoord_t, part_t> machine_t;
44 #else
45 typedef MachineForTesting<pcoord_t, part_t> machine_t;
46 #endif
47
48#elif defined(HAVE_ZOLTAN2_TOPOMANAGER)
49 #if defined(ZOLTAN2_MACHINE_TORUS)
50 typedef MachineTorusTopoMgr<pcoord_t, part_t> machine_t;
51 #else
52 typedef MachineForTesting<pcoord_t, part_t> machine_t;
53 #endif
54
55#elif defined(HAVE_ZOLTAN2_BGQTEST)
56 #if defined(ZOLTAN2_MACHINE_TORUS)
57 typedef MachineTorusBGQTest<pcoord_t, part_t> machine_t;
58 #else
59 typedef MachineForTesting<pcoord_t, part_t> machine_t;
60 #endif
61
62#else
63 #if defined(ZOLTAN2_MACHINE_TORUS)
64 typedef MachineTorusRCAForTesting<pcoord_t, part_t> machine_t;
65 #elif defined(ZOLTAN2_MACHINE_DRAGONFLY)
66 typedef MachineDragonflyRCAForTesting<pcoord_t, part_t> machine_t;
67 #else
68 typedef MachineForTesting<pcoord_t, part_t> machine_t;
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
217private:
218 machine_t *machine;
219};
220
221} // namespace Zoltan2
222
223#endif
Defines the Environment class.
static RCP< Teuchos::AnyNumberParameterEntryValidator > getAnyIntValidator()
Exists to make setting up validators less cluttered.
MachineRepresentation Class Base class for representing machine coordinates, networks,...
bool getAllMachineCoordinatesView(pcoord_t **&allCoords) const
getProcDim function set the coordinates of all ranks allCoords[i][j], i=0,...,getMachineDim(),...
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...
bool hasMachineCoordinates() const
indicates whether or not the machine has coordinates
int getMachineDim() const
returns the dimension (number of coords per node) in the machine
MachineRepresentation(const Teuchos::Comm< int > &comm)
Constructor MachineRepresentation Class.
part_t getNumUniqueGroups() const
getNumUniqueGroups function return the number of unique Dragonfly network groups in provided allocati...
bool getGroupCount(part_t *grp_count) const
return the number of ranks in each group (RCA X-dim, e.g. first dim)
MachineRepresentation(const Teuchos::Comm< int > &comm, const Teuchos::ParameterList &pl)
bool getMachineExtent(int *nxyz) const
sets the number of unique coordinates in each machine dimension
bool getMachineExtentWrapArounds(bool *wrap_around) const
if the machine has a wrap-around tourus link in each dimension.
MachineForTesting< pcoord_t, part_t > machine_t
bool getHopCount(int rank1, int rank2, pcoord_t &hops) const
return the hop count between rank1 and rank2
static void getValidParameters(Teuchos::ParameterList &pl)
Set up validators specific to this Problem.
int getNumRanks() const
return the number of ranks.
bool getMyMachineCoordinate(pcoord_t *xyz) const
getMyCoordinate function set the machine coordinate xyz of the current process return true if current...
bool getMachineCoordinate(const int rank, pcoord_t *xyz) const
getCoordinate function set the machine coordinate xyz of any rank process return true if coordinates ...
Created by mbenlioglu on Aug 31, 2020.
SparseMatrixAdapter_t::part_t part_t