SST 12.1.0
Structural Simulation Toolkit
statengine.h
1// Copyright 2009-2022 NTESS. Under the terms
2// of Contract DE-NA0003525 with NTESS, the U.S.
3// Government retains certain rights in this software.
4//
5// Copyright (c) 2009-2022, NTESS
6// All rights reserved.
7//
8// This file is part of the SST software package. For license
9// information, see the LICENSE file in the top level directory of the
10// distribution.
11
12#ifndef SST_CORE_STATAPI_STATENGINE_H
13#define SST_CORE_STATAPI_STATENGINE_H
14
15#include "sst/core/clock.h"
16#include "sst/core/factory.h"
17#include "sst/core/oneshot.h"
18#include "sst/core/sst_types.h"
19#include "sst/core/statapi/statbase.h"
20#include "sst/core/statapi/statfieldinfo.h"
21#include "sst/core/statapi/statgroup.h"
22#include "sst/core/statapi/statnull.h"
23#include "sst/core/threadsafe.h"
24#include "sst/core/unitAlgebra.h"
25
26/* Forward declare for Friendship */
27extern int main(int argc, char** argv);
28extern void finalize_statEngineConfig(void);
29
30namespace SST {
31class BaseComponent;
32class Simulation_impl;
33class ConfigGraph;
34class ConfigStatGroup;
35class ConfigStatOutput;
36class Params;
37
38namespace Statistics {
39
40// template<typename T> class Statistic;
41// class StatisticBase;
42class StatisticOutput;
43
44/**
45 \class StatisticProcessingEngine
46
47 An SST core component that handles timing and event processing informing
48 all registered Statistics to generate their outputs at desired rates.
49*/
50
52{
53 static StatisticProcessingEngine* instance;
54
55public:
56 static StatisticProcessingEngine* getInstance() { return instance; }
57
58 /** Called by the Components and Subcomponent to perform a statistic Output.
59 * @param stat - Pointer to the statistic.
60 * @param EndOfSimFlag - Indicates that the output is occurring at the end of simulation.
61 */
62 void performStatisticOutput(StatisticBase* stat, bool endOfSimFlag = false);
63
64 /** Called by the Components and Subcomponent to perform a global statistic Output.
65 * This routine will force ALL Components and Subcomponents to output their statistic information.
66 * This may lead to unexpected results if the statistic counts or data is reset on output.
67 * @param endOfSimFlag - Indicates that the output is occurring at the end of simulation.
68 */
69 void performGlobalStatisticOutput(bool endOfSimFlag = false);
70
71 template <class T>
72 Statistic<T>* createStatistic(
73 BaseComponent* comp, const std::string& type, const std::string& statName, const std::string& statSubId,
74 Params& params)
75 {
76
77 return Factory::getFactory()->CreateWithParams<Statistic<T>>(type, params, comp, statName, statSubId, params);
78 }
79
80 bool registerStatisticWithEngine(StatisticBase* stat) { return registerStatisticCore(stat); }
81
82 uint8_t statLoadLevel() const { return m_statLoadLevel; }
83
84 const std::vector<StatisticOutput*>& getStatOutputs() const { return m_statOutputs; }
85
86private:
87 friend class SST::Simulation_impl;
88 friend int ::main(int argc, char** argv);
89 friend void ::finalize_statEngineConfig(void);
90
92 void setup(ConfigGraph* graph);
94
95 static void init(ConfigGraph* graph);
96
97 StatisticOutput* createStatisticOutput(const ConfigStatOutput& cfg);
98
99 bool registerStatisticCore(StatisticBase* stat);
100
101 StatisticOutput* getOutputForStatistic(const StatisticBase* stat) const;
102 StatisticGroup& getGroupForStatistic(const StatisticBase* stat) const;
103 bool addPeriodicBasedStatistic(const UnitAlgebra& freq, StatisticBase* Stat);
104 bool addEventBasedStatistic(const UnitAlgebra& count, StatisticBase* Stat);
105 bool addEndOfSimStatistic(StatisticBase* Stat);
106 UnitAlgebra getParamTime(StatisticBase* stat, const std::string& pName) const;
107 void setStatisticStartTime(StatisticBase* Stat);
108 void setStatisticStopTime(StatisticBase* Stat);
109
110 void finalizeInitialization(); /* Called when performWireUp() finished */
111 void startOfSimulation();
112 void endOfSimulation();
113
114 void performStatisticOutputImpl(StatisticBase* stat, bool endOfSimFlag);
115 void performStatisticGroupOutputImpl(StatisticGroup& group, bool endOfSimFlag);
116
117 bool handleStatisticEngineClockEvent(Cycle_t CycleNum, SimTime_t timeFactor);
118 bool handleGroupClockEvent(Cycle_t CycleNum, StatisticGroup* group);
119 void handleStatisticEngineStartTimeEvent(SimTime_t timeFactor);
120 void handleStatisticEngineStopTimeEvent(SimTime_t timeFactor);
121 StatisticBase* isStatisticInCompStatMap(
122 const std::string& compName, const ComponentId_t& compId, const std::string& statName,
123 const std::string& statSubId, StatisticFieldInfo::fieldType_t fieldType);
124 void addStatisticToCompStatMap(StatisticBase* Stat, StatisticFieldInfo::fieldType_t fieldType);
125 void castError(const std::string& type, const std::string& statName, const std::string& fieldName);
126
127private:
128 typedef std::vector<StatisticBase*> StatArray_t; /*!< Array of Statistics */
129 typedef std::map<SimTime_t, StatArray_t*> StatMap_t; /*!< Map of simtimes to Statistic Arrays */
130 typedef std::map<ComponentId_t, StatArray_t*> CompStatMap_t; /*!< Map of ComponentId's to StatInfo Arrays */
131
132 StatArray_t m_EventStatisticArray; /*!< Array of Event Based Statistics */
133 StatMap_t m_PeriodicStatisticMap; /*!< Map of Array's of Periodic Based Statistics */
134 StatMap_t m_StartTimeMap; /*!< Map of Array's of Statistics that are started at a sim time */
135 StatMap_t m_StopTimeMap; /*!< Map of Array's of Statistics that are stopped at a sim time */
136 CompStatMap_t m_CompStatMap; /*!< Map of Arrays of Statistics tied to Component Id's */
137 bool m_SimulationStarted; /*!< Flag showing if Simulation has started */
138
139 Output& m_output;
140 uint8_t m_statLoadLevel;
141 std::vector<StatisticOutput*> m_statOutputs;
142 StatisticGroup m_defaultGroup;
143 std::vector<StatisticGroup> m_statGroups;
145};
146
147} // namespace Statistics
148} // namespace SST
149
150#endif // SST_CORE_STATAPI_STATENGINE_H
Main component object for the simulation.
Definition: baseComponent.h:51
A Configuration Graph A graph representing Components and Links.
Definition: configGraph.h:390
Definition: configGraph.h:195
Definition: threadsafe.h:48
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition: output.h:52
Parameter store.
Definition: params.h:56
Main control class for a SST Simulation.
Definition: simulation_impl.h:77
Forms the base class for statistics gathering within SST.
Definition: statbase.h:64
Definition: statgroup.h:28
Forms the base class for statistics output generation within the SST core.
Definition: statoutput.h:50
An SST core component that handles timing and event processing informing all registered Statistics to...
Definition: statengine.h:52
void performGlobalStatisticOutput(bool endOfSimFlag=false)
Called by the Components and Subcomponent to perform a global statistic Output.
Definition: statengine.cc:484
void performStatisticOutput(StatisticBase *stat, bool endOfSimFlag=false)
Called by the Components and Subcomponent to perform a statistic Output.
Definition: statengine.cc:429
Forms the template defined base class for statistics gathering within SST.
Definition: statbase.h:361
Performs Unit math in full precision.
Definition: unitAlgebra.h:109