1#ifndef _ZOLTAN2_MACHINEREPRESENTATION_HPP_
2#define _ZOLTAN2_MACHINEREPRESENTATION_HPP_
4#include <Teuchos_Comm.hpp>
5#include <Teuchos_StandardParameterEntryValidators.hpp>
6#include <Teuchos_ParameterList.hpp>
24template <
typename pcoord_t,
typename part_t>
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;
45 typedef MachineForTesting<pcoord_t, part_t>
machine_t;
48#elif defined(HAVE_ZOLTAN2_TOPOMANAGER)
49 #if defined(ZOLTAN2_MACHINE_TORUS)
50 typedef MachineTorusTopoMgr<pcoord_t, part_t>
machine_t;
52 typedef MachineForTesting<pcoord_t, part_t>
machine_t;
55#elif defined(HAVE_ZOLTAN2_BGQTEST)
56 #if defined(ZOLTAN2_MACHINE_TORUS)
57 typedef MachineTorusBGQTest<pcoord_t, part_t>
machine_t;
59 typedef MachineForTesting<pcoord_t, part_t>
machine_t;
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;
68 typedef MachineForTesting<pcoord_t, part_t>
machine_t;
82 const Teuchos::ParameterList &pl) :
94 return machine->hasMachineCoordinates();
108 return machine->getMachineExtent(nxyz);
117 return machine->getMachineExtentWrapArounds(wrap_around);
125 return machine->getMyMachineCoordinate(xyz);
133 pcoord_t *xyz)
const {
134 return machine->getMachineCoordinate(rank, xyz);
142 pcoord_t *xyz)
const {
143 return machine->getMachineCoordinate(nodename, xyz);
153 return machine->getAllMachineCoordinatesView(allCoords);
162 inline bool getHopCount(
int rank1,
int rank2, pcoord_t &hops)
const {
163 return machine->getHopCount(rank1, rank2, hops);
174 return machine->getNumUniqueGroups();
192 return machine->getGroupCount(grp_count);
200 pl.set(
"Machine_Optimization_Level", 10,
201 "Machine Coordinate Transformation Method",
205 RCP<Teuchos::FileNameValidator> file_not_required_validator =
206 Teuchos::rcp(
new Teuchos::FileNameValidator(
false) );
209 pl.set(
"Input_RCA_Machine_Coords",
"",
210 "Input File for input machine coordinates",
211 file_not_required_validator);
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...
pcoord_t machine_pcoord_t
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