14#ifndef SST_CORE_CONFIGGRAPH_H
15#define SST_CORE_CONFIGGRAPH_H
17#include "sst/core/params.h"
18#include "sst/core/rankInfo.h"
19#include "sst/core/serialization/serializable.h"
20#include "sst/core/sparseVectorMap.h"
21#include "sst/core/sst_types.h"
22#include "sst/core/statapi/statbase.h"
23#include "sst/core/statapi/statoutput.h"
24#include "sst/core/unitAlgebra.h"
35using namespace SST::Statistics;
46using LinkIdMap_t = std::vector<LinkId_t>;
64 inline LinkId_t key()
const {
return id; }
74 void print(std::ostream& os)
const
76 os <<
"Link " <<
name <<
" (id = " <<
id <<
")" << std::endl;
77 os <<
" component[0] = " <<
component[0] << std::endl;
78 os <<
" port[0] = " <<
port[0] << std::endl;
79 os <<
" latency[0] = " <<
latency[0] << std::endl;
80 os <<
" component[1] = " <<
component[1] << std::endl;
81 os <<
" port[1] = " <<
port[1] << std::endl;
82 os <<
" latency[1] = " <<
latency[1] << std::endl;
103 ImplementSerializable(SST::ConfigLink)
106 friend class ConfigGraph;
107 explicit ConfigLink(LinkId_t
id) :
118 ConfigLink(LinkId_t
id,
const std::string& n) :
130 void updateLatencies(TimeLord*);
141 ConfigStatistic(StatisticId_t _id,
bool _shared =
false, std::string _name =
"") :
157 inline const StatisticId_t& getId()
const {
return id; }
159 void addParameter(
const std::string& key,
const std::string& value,
bool overwrite);
161 void serialize_order(SST::Core::Serialization::serializer& ser)
override
169 ImplementSerializable(ConfigStatistic)
171 static constexpr StatisticId_t stat_null_id = std::numeric_limits<StatisticId_t>::max();
178 std::map<std::string, Params> statMap;
179 std::vector<ComponentId_t> components;
183 explicit ConfigStatGroup(
const std::string& name) :
189 bool addComponent(ComponentId_t
id);
190 bool addStatistic(
const std::string& name,
Params& p);
191 bool setOutput(
size_t id);
192 bool setFrequency(
const std::string& freq);
207 SST_SER(outputFrequency);
219 explicit ConfigStatOutput(
const std::string& type) :
222 ConfigStatOutput() {}
224 void addParameter(
const std::string& key,
const std::string& val) { params.insert(key, val); }
246 ConfigPortModule() =
default;
247 ConfigPortModule(
const std::string& type,
const Params& params) :
264 friend class ComponentInfo;
278 std::map<std::string, std::vector<ConfigPortModule>> portModules;
279 std::map<std::string, StatisticId_t>
285 std::vector<double> coords;
290 static constexpr ComponentId_t
null_id = std::numeric_limits<ComponentId_t>::max();
292 inline const ComponentId_t& key()
const {
return id; }
295 void print(std::ostream& os)
const;
299 void setConfigGraphPointer(
ConfigGraph* graph_ptr);
310 StatisticId_t getNextStatisticID();
312 ConfigComponent* getParent()
const;
313 std::string getFullName()
const;
315 void setRank(RankInfo r);
316 void setWeight(
double w);
317 void setCoordinates(
const std::vector<double>& c);
318 void addParameter(
const std::string& key,
const std::string& value,
bool overwrite);
319 ConfigComponent* addSubComponent(
const std::string&
name,
const std::string&
type,
int slot);
320 ConfigComponent* findSubComponent(ComponentId_t);
321 const ConfigComponent* findSubComponent(ComponentId_t)
const;
322 ConfigComponent* findSubComponentByName(
const std::string&
name);
323 ConfigStatistic* findStatistic(
const std::string&
name)
const;
324 ConfigStatistic* insertStatistic(StatisticId_t
id);
325 ConfigStatistic* findStatistic(StatisticId_t)
const;
326 ConfigStatistic* enableStatistic(
327 const std::string& statisticName,
const SST::Params&
params,
bool recursively =
false);
328 ConfigStatistic* createStatistic();
329 bool reuseStatistic(
const std::string& statisticName, StatisticId_t sid);
330 void addStatisticParameter(
331 const std::string& statisticName,
const std::string& param,
const std::string& value,
bool recursively =
false);
332 void setStatisticParameters(
const std::string& statisticName,
const Params&
params,
bool recursively =
false);
333 void setStatisticLoadLevel(uint8_t level,
bool recursively =
false);
335 void addSharedParamSet(
const std::string& set) {
params.addSharedParamSet(set); }
337 "addGlobalParamSet() has been deprecated and will be removed in SST 16. Please use addSharedParamSet()")]]
338 void addGlobalParamSet(
const std::string& set)
340 params.addSharedParamSet(set);
342 std::vector<std::string> getParamsLocalKeys()
const {
return params.getLocalKeys(); }
343 std::vector<std::string> getSubscribedSharedParamSets()
const {
return params.getSubscribedSharedParamSets(); }
345 [[deprecated(
"getSubscribedGlobalParamSets() has been deprecated and will be removed in SST 16. Please use "
346 "getSubscribedSharedParamSets()")]]
347 std::vector<std::string> getSubscribedGlobalParamSets()
const
349 return params.getSubscribedSharedParamSets();
352 void addPortModule(
const std::string& port,
const std::string&
type,
const Params&
params);
354 std::vector<LinkId_t> allLinks()
const;
358 std::vector<LinkId_t> clearAllLinks();
360 void serialize_order(SST::Core::Serialization::serializer& ser)
override
368 SST_SER(
rank.thread);
372 SST_SER(portModules);
375 SST_SER(statistics_);
383 ImplementSerializable(SST::ConfigComponent)
386 std::map<StatisticId_t, ConfigStatistic>
389 ComponentId_t getNextSubComponentID();
391 friend class ConfigGraph;
411 coords.resize(3, 0.0);
428 coords.resize(3, 0.0);
438using ConfigComponentNameMap_t = std::map<std::string, ComponentId_t>;
440using ParamsMap_t = std::map<std::string, Params*>;
442using VariableMap_t = std::map<std::string, std::string>;
455 os <<
"Printing graph" << std::endl;
456 for ( ConfigComponentMap_t::const_iterator i = comps_.begin(); i != comps_.end(); ++i ) {
467 stat_load_level_ = STATISTICSDEFAULTLOADLEVEL;
468 stat_outputs_.emplace_back(STATISTICSDEFAULTOUTPUTNAME);
470 Output& o = Output::getDefaultObject();
476 for (
auto comp : comps_ ) {
481 size_t getNumComponents() {
return comps_.data.size(); }
483 size_t getNumComponentsInMPIRank(uint32_t rank);
494 ComponentId_t
addComponent(
const std::string& name,
const std::string& type);
497 void addSharedParam(
const std::string& shared_set,
const std::string& key,
const std::string& value);
499 [[deprecated(
"addGlobalParam() has been deprecated and will be removed in SST 16. Please use addSharedParam()")]]
500 void addGlobalParam(
const std::string& shared_set,
const std::string& key,
const std::string& value);
514 std::vector<ConfigStatOutput>& getStatOutputs() {
return stat_outputs_; }
516 const ConfigStatOutput& getStatOutput(
size_t index = 0)
const {
return stat_outputs_[index]; }
518 long getStatLoadLevel()
const {
return stat_load_level_; }
521 void addLink(ComponentId_t comp_id,
const std::string& link_name,
const std::string& port,
522 const std::string& latency_str,
bool no_cut =
false);
537 const std::map<std::string, ConfigStatGroup>& getStatGroups()
const {
return stat_groups_; }
540 auto found = stat_groups_.find(name);
541 if ( found == stat_groups_.end() ) {
543 std::tie(found, ok) = stat_groups_.emplace(name, name);
545 return &(found->second);
548 bool containsComponent(ComponentId_t
id)
const;
549 ConfigComponent* findComponent(ComponentId_t);
550 ConfigComponent* findComponentByName(
const std::string& name);
551 const ConfigComponent* findComponent(ComponentId_t)
const;
553 bool containsStatistic(StatisticId_t
id)
const;
554 ConfigStatistic* findStatistic(StatisticId_t)
const;
559 ConfigGraph* getSubGraph(uint32_t start_rank, uint32_t end_rank);
560 ConfigGraph* getSubGraph(
const std::set<uint32_t>& rank_set);
562 ConfigGraph* splitGraph(
const std::set<uint32_t>& orig_rank_set,
const std::set<uint32_t>& new_rank_set);
567 void getConnectedNoCutComps(ComponentId_t start, std::set<ComponentId_t>& group);
569 void setComponentConfigGraphPointers();
574 SST_SER(stat_outputs_);
575 SST_SER(stat_load_level_);
576 SST_SER(stat_groups_);
577 if ( ser.mode() == SST::Core::Serialization::serializer::UNPACK ) {
580 setComponentConfigGraphPointers();
585 friend class Simulation_impl;
586 friend class SSTSDLModelDefinition;
590 ComponentId_t nextComponentId;
592 ConfigLinkMap_t links_;
593 ConfigComponentMap_t comps_;
594 ConfigComponentNameMap_t comps_by_name_;
595 std::map<std::string, ConfigStatGroup> stat_groups_;
597 std::map<std::string, LinkId_t> link_names_;
599 std::vector<ConfigStatOutput> stat_outputs_;
600 uint8_t stat_load_level_;
602 ImplementSerializable(SST::ConfigGraph)
607 ConfigGraph* ograph_;
608 ConfigGraph* ngraph_;
609 const std::set<uint32_t>& oset_;
610 const std::set<uint32_t>& nset_;
613 GraphFilter(ConfigGraph* original_graph, ConfigGraph* new_graph,
const std::set<uint32_t>& original_rank_set,
614 const std::set<uint32_t>& new_rank_set);
616 ConfigLink* operator()(ConfigLink* link);
617 ConfigComponent* operator()(ConfigComponent* comp);
621class PartitionComponent
629 ComponentIdMap_t group;
638 explicit PartitionComponent(LinkId_t
id) :
641 rank(
RankInfo(RankInfo::UNASSIGNED, 0))
647 inline ComponentId_t key()
const {
return id; }
654 ComponentId_t component[2];
655 SimTime_t latency[2];
668 inline LinkId_t key()
const {
return id; }
673 if ( latency[0] < latency[1] )
return latency[0];
680 os <<
" Link " <<
id << std::endl;
681 os <<
" component[0] = " << component[0] << std::endl;
682 os <<
" latency[0] = " << latency[0] << std::endl;
683 os <<
" component[1] = " << component[1] << std::endl;
684 os <<
" latency[1] = " << latency[1] << std::endl;
694 PartitionComponentMap_t comps_;
695 PartitionLinkMap_t links_;
701 os <<
"Printing graph" << std::endl;
702 for ( PartitionComponentMap_t::const_iterator i = comps_.begin(); i != comps_.end(); ++i ) {
703 (*i)->print(os,
this);
707 PartitionComponentMap_t& getComponentMap() {
return comps_; }
708 PartitionLinkMap_t& getLinkMap() {
return links_; }
710 const PartitionLink& getLink(LinkId_t
id)
const {
return links_[id]; }
712 size_t getNumComponents() {
return comps_.
size(); }
Represents the configuration of a generic component.
Definition configGraph.h:263
static constexpr ComponentId_t null_id
Definition configGraph.h:290
float weight
Definition configGraph.h:272
std::vector< LinkId_t > links
Definition configGraph.h:274
std::vector< ConfigComponent * > subComponents
Definition configGraph.h:284
bool enabledAllStats
Definition configGraph.h:281
int slot_num
Definition configGraph.h:270
std::string name
Definition configGraph.h:269
uint16_t nextSubID
Definition configGraph.h:286
std::string type
Definition configGraph.h:271
uint16_t nextStatID
Definition configGraph.h:287
ConfigStatistic allStatConfig
Definition configGraph.h:282
ComponentId_t id
Definition configGraph.h:267
void print(std::ostream &os) const
Print Component information.
Definition configGraph.cc:174
Params params
Definition configGraph.h:275
ConfigGraph * graph
Definition configGraph.h:268
ConfigComponent(ComponentId_t id, ConfigGraph *graph, const std::string &name, const std::string &type, float weight, RankInfo rank)
Create a new Component.
Definition configGraph.h:397
void checkPorts() const
Checks to make sure port names are valid and that a port isn't used twice.
Definition configGraph.cc:646
std::map< std::string, StatisticId_t > enabledStatNames
Definition configGraph.h:280
uint8_t statLoadLevel
Definition configGraph.h:276
RankInfo rank
Definition configGraph.h:273
A Configuration Graph A graph representing Components and Links.
Definition configGraph.h:450
void setStatisticLoadLevel(uint8_t loadLevel)
Set the statistic system load level.
Definition configGraph.cc:834
ComponentId_t addComponent(const std::string &name, const std::string &type)
Create a new component.
Definition configGraph.cc:795
void setLinkNoCut(const std::string &link_name)
Set a Link to be no-cut.
Definition configGraph.cc:884
ConfigComponentMap_t & getComponentMap()
Return the map of components.
Definition configGraph.h:535
bool checkForStructuralErrors()
Check the graph for Structural errors.
Definition configGraph.cc:759
void postCreationCleanup()
Perform any post-creation cleanup processes.
Definition configGraph.cc:729
void addSharedParam(const std::string &shared_set, const std::string &key, const std::string &value)
Add a parameter to a shared param set.
Definition configGraph.cc:810
bool checkRanks(RankInfo ranks)
Verify that all components have valid Ranks assigned.
Definition configGraph.cc:717
bool containsComponentInRank(RankInfo rank)
Checks to see if rank contains at least one component.
Definition configGraph.cc:708
void setStatisticOutputParams(const Params &p)
Set a set of parameter to the statistic output module.
Definition configGraph.cc:822
void addStatisticOutputParameter(const std::string ¶m, const std::string &value)
Add parameter to the statistic output module.
Definition configGraph.cc:828
void addLink(ComponentId_t comp_id, const std::string &link_name, const std::string &port, const std::string &latency_str, bool no_cut=false)
Add a Link to a Component on a given Port.
Definition configGraph.cc:840
ConfigLinkMap_t & getLinkMap()
Return the map of links.
Definition configGraph.h:557
void setComponentRanks(RankInfo rank)
Helper function to set all the ranks to the same value.
Definition configGraph.cc:700
void print(std::ostream &os) const
Print the configuration graph.
Definition configGraph.h:453
void setStatisticOutput(const std::string &name)
Set the statistic output module.
Definition configGraph.cc:816
Represents the configuration of a generic Link.
Definition configGraph.h:50
std::string port[2]
Definition configGraph.h:55
std::string latency_str[2]
Definition configGraph.h:57
std::string name
Definition configGraph.h:53
SimTime_t latency[2]
Definition configGraph.h:56
LinkId_t id
Definition configGraph.h:52
ComponentId_t component[2]
Definition configGraph.h:54
bool no_cut
Definition configGraph.h:61
LinkId_t order
Definition configGraph.h:59
SimTime_t getMinLatency() const
Return the minimum latency of this link (from both sides)
Definition configGraph.h:67
void print(std::ostream &os) const
Print the Link information.
Definition configGraph.h:74
Class that represents a PortModule in ConfigGraph.
Definition configGraph.h:241
Definition configGraph.h:175
std::pair< bool, std::string > verifyStatsAndComponents(const ConfigGraph *graph)
Checks to make sure that all components in the group support all of the statistics as configured in t...
Definition configGraph.cc:149
Definition configGraph.h:214
Definition configGraph.h:134
StatisticId_t id
Definition configGraph.h:136
Class to contain SST Simulation Configuration variables.
Definition config.h:41
Definition serializable.h:24
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition serializer.h:45
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition output.h:54
uint32_t getVerboseLevel() const
Returns object verbose level.
Definition output.cc:107
std::string getPrefix() const
Returns object prefix.
Definition output.cc:131
@ STDERR
Definition output.h:61
void init(const std::string &prefix, uint32_t verbose_level, uint32_t verbose_mask, output_location_t location, const std::string &localoutputfilename="")
Initialize the object after construction.
Definition output.cc:71
uint32_t getVerboseMask() const
Returns object verbose mask.
Definition output.cc:119
Parameter store.
Definition params.h:58
Definition configGraph.h:692
void print(std::ostream &os) const
Print the configuration graph.
Definition configGraph.h:699
SimTime_t getMinLatency() const
Return the minimum latency of this link (from both sides)
Definition configGraph.h:671
void print(std::ostream &os) const
Print the Link information.
Definition configGraph.h:678
Main control class for a SST Simulation.
Definition simulation_impl.h:87
Class that stores data in a vector, but can access the data similar to a map.
Definition sparseVectorMap.h:45
void clear()
Clears the contents of the SparseVectorMap.
Definition sparseVectorMap.h:259
size_t size()
Returns the number of items in the SparseVectorMap.
Definition sparseVectorMap.h:266
Class for creating and managing TimeConverter objects.
Definition timeLord.h:40
Performs Unit math in full precision.
Definition unitAlgebra.h:107