12 #ifndef SST_CORE_STATAPI_STATOUTPUT_H 13 #define SST_CORE_STATAPI_STATOUTPUT_H 15 #include "sst/core/eli/elementinfo.h" 16 #include "sst/core/module.h" 17 #include "sst/core/params.h" 18 #include "sst/core/serialization/serializable.h" 19 #include "sst/core/sst_types.h" 20 #include "sst/core/statapi/statbase.h" 21 #include "sst/core/statapi/statfieldinfo.h" 22 #include "sst/core/warnmacros.h" 26 #include <unordered_map> 30 #define STATISTICSDEFAULTOUTPUTNAME "sst.statOutputConsole" 31 #define STATISTICSDEFAULTLOADLEVEL 0 32 #define STATISTICLOADLEVELUNINITIALIZED 0xff 37 namespace Statistics {
38 class StatisticProcessingEngine;
59 using fieldType_t = StatisticFieldInfo::fieldType_t;
60 using fieldHandle_t = StatisticFieldInfo::fieldHandle_t;
61 using FieldInfoArray_t = std::vector<StatisticFieldInfo*>;
62 using FieldNameMap_t = std::unordered_map<std::string, fieldHandle_t>;
76 virtual void output(
StatisticBase* statistic,
bool endOfSimFlag) = 0;
78 virtual bool supportsDynamicRegistration()
const {
return false; }
88 static const std::vector<SST::ElementInfoParam>& ELI_getParams()
90 static std::vector<SST::ElementInfoParam> var {};
95 friend class SST::Simulation;
140 virtual void registerStatistic(StatisticBase* stat) = 0;
142 void registerGroup(StatisticGroup* group);
143 void outputGroup(StatisticGroup* group,
bool endOfSimFlag);
145 virtual void startOutputGroup(StatisticGroup* group) = 0;
146 virtual void stopOutputGroup() = 0;
148 virtual void startRegisterGroup(StatisticGroup* group) = 0;
149 virtual void stopRegisterGroup() = 0;
159 void setStatisticOutputName(
const std::string& name) { m_statOutputName = name; }
161 void lock() { m_lock.lock(); }
162 void unlock() { m_lock.unlock(); }
165 std::string m_statOutputName;
166 Params m_outputParameters;
167 std::recursive_mutex m_lock;
176 void output(
StatisticBase* statistic,
bool endOfSimFlag)
override;
179 void stopOutputGroup()
override;
182 void stopRegisterGroup()
override;
215 template <
typename T>
220 StatisticFieldInfo::fieldType_t FieldType =
221 StatisticFieldInfo::StatisticFieldInfo::getFieldTypeFromTemplate<T>();
226 FieldNameMap_t::const_iterator found = m_outputFieldNameMap.find(NewStatFieldInfo->getFieldUniqueName());
227 if ( found != m_outputFieldNameMap.end() ) {
230 ExistingStatFieldInfo = m_outputFieldInfoArray[found->second];
231 delete NewStatFieldInfo;
232 return ExistingStatFieldInfo;
235 delete NewStatFieldInfo;
250 virtual void outputField(fieldHandle_t fieldHandle, int32_t data);
251 virtual void outputField(fieldHandle_t fieldHandle, uint32_t data);
252 virtual void outputField(fieldHandle_t fieldHandle, int64_t data);
253 virtual void outputField(fieldHandle_t fieldHandle, uint64_t data);
254 virtual void outputField(fieldHandle_t fieldHandle,
float data);
255 virtual void outputField(fieldHandle_t fieldHandle,
double data);
266 template <
typename T>
269 StatisticFieldInfo::fieldType_t FieldType =
270 StatisticFieldInfo::StatisticFieldInfo::getFieldTypeFromTemplate<T>();
272 auto res = generateFieldHandle(addFieldToLists(fieldName, FieldType));
273 implRegisteredField(res);
294 m_highestFieldHandle(0),
295 m_currentFieldStatName(
"")
302 virtual void implRegisteredField(fieldHandle_t UNUSED(fieldHandle)) {}
304 FieldInfoArray_t m_outputFieldInfoArray;
305 FieldNameMap_t m_outputFieldNameMap;
306 fieldHandle_t m_highestFieldHandle;
307 std::string m_currentFieldStatName;
313 virtual void stopRegisterFields();
315 virtual void startOutputEntries(StatisticBase* statistic);
316 virtual void stopOutputEntries();
322 #endif // SST_CORE_STATAPI_STATOUTPUT_H This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:42
std::string & getStatisticOutputName()
Return the Statistic Output name.
Definition: statoutput.h:68
The class for representing Statistic Output Fields.
Definition: statfieldinfo.h:98
ImplementVirtualSerializable(SST::Statistics::StatisticFieldsOutput) protected StatisticFieldsOutput()
Construct a base StatisticOutput.
Definition: statoutput.h:293
RankInfo getRank()
Gets the Rank (MPI rank and thread) that this StatisticOutput is associated with. ...
Definition: statoutput.cc:97
Forms the base class for statistics output generation within the SST core.
Definition: statoutput.h:52
virtual void implStopOutputEntries()=0
Indicate to Statistic Output that a statistic is finished sending data to be output Allows object to ...
std::string getAbsolutePathForOutputFile(const std::string &filename)
Get the absolute path for the specified file taking into account the specified output directory...
Definition: statoutput.cc:109
Forms the base class for statistics gathering within SST.
Definition: statbase.h:49
virtual void implStartOutputEntries(StatisticBase *statistic)=0
Indicate to Statistic Output that a statistic is about to send data to be output Allows object to per...
Definition: serializable.h:23
FieldInfoArray_t & getFieldInfoArray()
Return the array of registered field infos.
Definition: statoutput.h:240
virtual bool checkOutputParameters()=0
Have the Statistic Output check its parameters.
const char * getFieldTypeShortName(fieldType_t type)
Output field data.
Definition: statoutput.cc:263
fieldHandle_t registerField(const char *fieldName)
Register a field to be output (templated function)
Definition: statoutput.h:267
Definition: paramsInfo.h:39
virtual void startOfSimulation()=0
Indicate to Statistic Output that simulation has started.
virtual void outputField(fieldHandle_t fieldHandle, int32_t data)
Output field data.
Definition: statoutput.h:170
StatisticOutput(Params &outputParameters)
Construct a base StatisticOutput.
Definition: statoutput.cc:29
Params & getOutputParameters()
Return the parameters for the StatisticOutput.
Definition: statoutput.h:71
virtual void printUsage()
Have Statistic Object print out its usage and parameter info.
Definition: statoutput.cc:78
SimTime_t getCurrentSimCycle()
Gets the current simulstion cycle.
Definition: statoutput.cc:103
Output & getSimulationOutput()
Gets the Output object for the Simulation object associeted with this StatOutput. ...
Definition: statoutput.cc:85
Parameter store.
Definition: params.h:63
RankInfo getNumRanks()
Gets the number of ranks for the simulation.
Definition: statoutput.cc:91
An SST core component that handles timing and event processing informing all registered Statistics to...
Definition: statengine.h:54
StatisticFieldInfo * getRegisteredField(fieldHandle_t fieldHandle)
Adjust the hierarchy of the fields (FUTURE SUPPORT)
Definition: statoutput.cc:160
Definition: statgroup.h:31
virtual void startRegisterFields(StatisticBase *statistic)
These can be overriden, if necessary, but must be callable by the derived class.
Definition: statoutput.cc:280
StatisticFieldInfo * getRegisteredField(const char *statisticName, const char *fieldName)
Return the information on a registered field via known names.
Definition: statoutput.h:216
virtual bool acceptsGroups() const
True if this StatOutput can handle StatisticGroups.
Definition: statoutput.h:74
virtual void endOfSimulation()=0
Indicate to Statistic Output that simulation has ended.