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"
27#include <unordered_map>
31#define STATISTICSDEFAULTOUTPUTNAME "sst.statOutputConsole"
32#define STATISTICSDEFAULTLOADLEVEL 0
33#define STATISTICLOADLEVELUNINITIALIZED 0xff
60 using fieldType_t = StatisticFieldInfo::fieldType_t;
61 using fieldHandle_t = StatisticFieldInfo::fieldHandle_t;
62 using FieldInfoArray_t = std::vector<StatisticFieldInfo*>;
63 using FieldNameMap_t = std::unordered_map<std::string, fieldHandle_t>;
77 virtual void output(
StatisticBase* statistic,
bool endOfSimFlag) = 0;
79 virtual bool supportsDynamicRegistration()
const {
return false; }
89 static const std::vector<SST::ElementInfoParam>& ELI_getParams()
91 static std::vector<SST::ElementInfoParam> var {};
96 friend class SST::Simulation;
97 friend class SST::Statistics::StatisticProcessingEngine;
147 virtual void stopOutputGroup() = 0;
150 virtual void stopRegisterGroup() = 0;
160 void setStatisticOutputName(
const std::string& name) { m_statOutputName = name; }
162 void lock() { m_lock.lock(); }
163 void unlock() { m_lock.unlock(); }
166 std::string m_statOutputName;
167 Params m_outputParameters;
168 std::recursive_mutex m_lock;
177 void output(
StatisticBase* statistic,
bool endOfSimFlag)
override;
180 void stopOutputGroup()
override;
183 void stopRegisterGroup()
override;
216 template <
typename T>
221 StatisticFieldInfo::fieldType_t FieldType =
222 StatisticFieldInfo::StatisticFieldInfo::getFieldTypeFromTemplate<T>();
227 FieldNameMap_t::const_iterator found = m_outputFieldNameMap.find(NewStatFieldInfo->
getFieldUniqueName());
228 if ( found != m_outputFieldNameMap.end() ) {
231 ExistingStatFieldInfo = m_outputFieldInfoArray[found->second];
232 delete NewStatFieldInfo;
233 return ExistingStatFieldInfo;
236 delete NewStatFieldInfo;
251 virtual void outputField(fieldHandle_t fieldHandle, int32_t data);
252 virtual void outputField(fieldHandle_t fieldHandle, uint32_t data);
253 virtual void outputField(fieldHandle_t fieldHandle, int64_t data);
254 virtual void outputField(fieldHandle_t fieldHandle, uint64_t data);
255 virtual void outputField(fieldHandle_t fieldHandle,
float data);
256 virtual void outputField(fieldHandle_t fieldHandle,
double data);
267 template <
typename T>
270 StatisticFieldInfo::fieldType_t FieldType =
271 StatisticFieldInfo::StatisticFieldInfo::getFieldTypeFromTemplate<T>();
273 auto res = generateFieldHandle(addFieldToLists(fieldName, FieldType));
274 implRegisteredField(res);
295 m_highestFieldHandle(0),
296 m_currentFieldStatName(
"")
303 virtual void implRegisteredField(fieldHandle_t UNUSED(fieldHandle)) {}
305 FieldInfoArray_t m_outputFieldInfoArray;
306 FieldNameMap_t m_outputFieldNameMap;
307 fieldHandle_t m_highestFieldHandle;
308 std::string m_currentFieldStatName;
314 virtual void stopRegisterFields();
316 virtual void startOutputEntries(StatisticBase* statistic);
317 virtual void stopOutputEntries();
Main component object for the simulation.
Definition baseComponent.h:67
Definition serializable.h:25
This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition serializer.h:43
Definition paramsInfo.h:41
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition output.h:58
Parameter store.
Definition params.h:65
Main control class for a SST Simulation.
Definition simulation.h:121
Forms the base class for statistics gathering within SST.
Definition statbase.h:51
The class for representing Statistic Output Fields.
Definition statfieldinfo.h:99
std::string getFieldUniqueName() const
Return the field type related to this field info.
Definition statfieldinfo.cc:42
Definition statoutput.h:172
FieldInfoArray_t & getFieldInfoArray()
Return the array of registered field infos.
Definition statoutput.h:241
fieldHandle_t registerField(const char *fieldName)
Register a field to be output (templated function).
Definition statoutput.h:268
ImplementVirtualSerializable(SST::Statistics::StatisticFieldsOutput) protected StatisticFieldsOutput()
Construct a base StatisticOutput.
Definition statoutput.h:294
const char * getFieldTypeShortName(fieldType_t type)
Output field data.
Definition statoutput.cc:262
StatisticFieldInfo * getRegisteredField(fieldHandle_t fieldHandle)
Adjust the hierarchy of the fields (FUTURE SUPPORT).
Definition statoutput.cc:159
virtual void implStopOutputEntries()=0
Indicate to Statistic Output that a statistic is finished sending data to be output Allows object to ...
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...
StatisticFieldInfo * getRegisteredField(const char *statisticName, const char *fieldName)
Return the information on a registered field via known names.
Definition statoutput.h:217
virtual void outputField(fieldHandle_t fieldHandle, int32_t data)
Output field data.
virtual void startRegisterFields(StatisticBase *statistic)
These can be overriden, if necessary, but must be callable by the derived class.
Definition statoutput.cc:279
Definition statgroup.h:32
Forms the base class for statistics output generation within the SST core.
Definition statoutput.h:54
virtual void printUsage()
Have Statistic Object print out its usage and parameter info.
Definition statoutput.cc:78
Output & getSimulationOutput()
Gets the Output object for the Simulation object associeted with this StatOutput.
Definition statoutput.cc:84
virtual bool checkOutputParameters()=0
Have the Statistic Output check its parameters.
std::string & getStatisticOutputName()
Return the Statistic Output name.
Definition statoutput.h:69
RankInfo getNumRanks()
Gets the number of ranks for the simulation.
Definition statoutput.cc:90
virtual void startOfSimulation()=0
Indicate to Statistic Output that simulation has started.
virtual bool acceptsGroups() const
True if this StatOutput can handle StatisticGroups.
Definition statoutput.h:75
SimTime_t getCurrentSimCycle()
Gets the current simulstion cycle.
Definition statoutput.cc:102
RankInfo getRank()
Gets the Rank (MPI rank and thread) that this StatisticOutput is associated with.
Definition statoutput.cc:96
StatisticOutput(Params &outputParameters)
Construct a base StatisticOutput.
Definition statoutput.cc:29
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:108
virtual void endOfSimulation()=0
Indicate to Statistic Output that simulation has ended.
Params & getOutputParameters()
Return the parameters for the StatisticOutput.
Definition statoutput.h:72
An SST core component that handles timing and event processing informing all registered Statistics to...
Definition statengine.h:55