12 #ifndef SST_CORE_STATAPI_STATOUTPUTHDF5_H 13 #define SST_CORE_STATAPI_STATOUTPUTHDF5_H 15 #include "sst/core/sst_types.h" 16 #include "sst/core/statapi/statoutput.h" 17 #include "sst/core/warnmacros.h" 19 DISABLE_WARN_MISSING_OVERRIDE
39 SST_ELI_REGISTER_DERIVED(
44 SST_ELI_ELEMENT_VERSION(1,0,0),
45 "Output to an HDF5 file")
47 SST_ELI_DOCUMENT_PARAMS(
48 {
"filepath",
"Filepath for the output file",
"./StatisticOutput.h5"}
69 void implRegisteredField(fieldHandle_t fieldHandle)
override;
70 void stopRegisterFields()
override;
73 void stopRegisterGroup()
override;
101 void stopOutputGroup()
override;
109 void outputField(fieldHandle_t fieldHandle, int32_t data)
override;
110 void outputField(fieldHandle_t fieldHandle, uint32_t data)
override;
111 void outputField(fieldHandle_t fieldHandle, int64_t data)
override;
112 void outputField(fieldHandle_t fieldHandle, uint64_t data)
override;
113 void outputField(fieldHandle_t fieldHandle,
float data)
override;
114 void outputField(fieldHandle_t fieldHandle,
double data)
override;
132 explicit DataSet(H5::H5File* file) :
135 virtual ~DataSet() {}
136 H5::H5File* getFile() {
return file; }
137 virtual bool isGroup()
const = 0;
139 virtual void setCurrentStatistic(StatisticBase* UNUSED(stat)) {}
141 virtual void finalizeCurrentStatistic() = 0;
143 virtual void beginGroupRegistration(StatisticGroup* UNUSED(group)) {}
144 virtual void finalizeGroupRegistration() {}
146 virtual void startNewGroupEntry(Cycle_t UNUSED(cycle)) {}
147 virtual void finishGroupEntry() {}
149 virtual void startNewEntry(StatisticBase* stat, Cycle_t cycle) = 0;
150 virtual StatData_u& getFieldLoc(fieldHandle_t fieldHandle) = 0;
151 virtual void finishEntry() = 0;
157 class StatisticInfo :
public DataSet
159 StatisticBase* statistic;
160 std::vector<fieldHandle_t> indexMap;
161 std::vector<StatData_u> currentData;
162 std::vector<fieldType_t> typeList;
163 std::vector<std::string> fieldNames;
165 H5::DataSet* dataset;
166 H5::CompType* memType;
171 StatisticInfo(StatisticBase* stat, H5::H5File* file) :
176 typeList.push_back(StatisticFieldType<uint64_t>::id());
177 indexMap.push_back(-1);
178 fieldNames.push_back(
"SimTime");
182 if ( dataset )
delete dataset;
183 if ( memType )
delete memType;
186 void finalizeCurrentStatistic()
override;
188 bool isGroup()
const override {
return false; }
189 void startNewEntry(StatisticBase* stat, Cycle_t cycle)
override;
190 StatData_u& getFieldLoc(fieldHandle_t fieldHandle)
override;
191 void finishEntry()
override;
194 class GroupInfo :
public DataSet
199 std::string statPath;
201 H5::DataSet* dataset;
202 H5::CompType* memType;
206 std::vector<std::string> registeredFields;
207 std::vector<fieldType_t> typeList;
208 std::map<fieldHandle_t, size_t> handleIndexMap;
210 std::vector<StatData_u> currentData;
211 size_t currentCompOffset;
213 GroupStat(GroupInfo* group, StatisticBase* stat);
214 void finalizeRegistration();
215 static std::string getStatName(StatisticBase* stat);
217 void startNewGroupEntry();
219 void startNewEntry(
size_t componentIndex, StatisticBase* stat);
220 StatData_u& getFieldLoc(fieldHandle_t fieldHandle);
223 void finishGroupEntry();
227 std::map<std::string, GroupStat> m_statGroups;
228 GroupStat* m_currentStat;
229 StatisticGroup* m_statGroup;
230 std::vector<BaseComponent*> m_components;
231 H5::DataSet* timeDataSet;
234 GroupInfo(StatisticGroup* group, H5::H5File* file);
235 void beginGroupRegistration(StatisticGroup* UNUSED(group))
override {}
236 void setCurrentStatistic(StatisticBase* stat)
override;
238 void finalizeCurrentStatistic()
override;
239 void finalizeGroupRegistration()
override;
241 bool isGroup()
const override {
return true; }
242 void startNewEntry(StatisticBase* stat, Cycle_t cycle)
override;
243 StatData_u& getFieldLoc(fieldHandle_t fieldHandle)
override {
return m_currentStat->getFieldLoc(fieldHandle); }
244 void finishEntry()
override;
246 void startNewGroupEntry(Cycle_t cycle)
override;
247 void finishGroupEntry()
override;
248 size_t getNumComponents()
const {
return m_components.size(); }
250 const std::string& getName()
const;
254 DataSet* m_currentDataSet;
255 std::map<StatisticBase*, StatisticInfo*> m_statistics;
256 std::map<std::string, GroupInfo> m_statGroups;
258 StatisticInfo* initStatistic(StatisticBase* statistic);
259 StatisticInfo* getStatisticInfo(StatisticBase* statistic);
264 #endif // SST_CORE_STATAPI_STATOUTPUTHDF5_H This class is basically a wrapper for objects to declare the order in which their members should be s...
Definition: serializer.h:42
void outputField(fieldHandle_t fieldHandle, int32_t data) override
Implementation functions for output.
Definition: statoutputhdf5.cc:153
Forms the base class for statistics output generation within the SST core.
Definition: statoutput.h:52
Forms the base class for statistics gathering within SST.
Definition: statbase.h:49
ImplementSerializable(SST::Statistics::StatisticOutputHDF5) private void startRegisterFields(StatisticBase *stat) override
Perform a check of provided parameters.
Definition: statoutputhdf5.cc:65
void implStartOutputEntries(StatisticBase *statistic) override
Implementation function for the start of output.
Definition: statoutputhdf5.cc:123
virtual bool checkOutputParameters()=0
Have the Statistic Output check its parameters.
fieldHandle_t registerField(const char *fieldName)
Register a field to be output (templated function)
Definition: statoutput.h:267
bool acceptsGroups() const override
True if this StatOutput can handle StatisticGroups.
Definition: statoutputhdf5.h:56
void implStopOutputEntries() override
Implementation function for the end of output.
Definition: statoutputhdf5.cc:130
Definition: statoutput.h:170
The class for statistics output to a comma separated file.
Definition: statoutputhdf5.h:36
void startOfSimulation() override
Indicate to Statistic Output that simulation started.
Definition: statoutputhdf5.cc:110
Parameter store.
Definition: params.h:63
void endOfSimulation() override
Indicate to Statistic Output that simulation ended.
Definition: statoutputhdf5.cc:114
Definition: elementinfo.h:44
Definition: statgroup.h:31