Skip to content
Snippets Groups Projects
Commit 28026904 authored by guj's avatar guj
Browse files

added GetPreferred for stream reading

parent 42a905fe
No related branches found
No related tags found
1 merge request!329added GetPreferred for stream reading
...@@ -74,9 +74,16 @@ void HDF5ReaderP::UseHDFRead(Variable<T> &variable, T *data, hid_t h5Type) ...@@ -74,9 +74,16 @@ void HDF5ReaderP::UseHDFRead(Variable<T> &variable, T *data, hid_t h5Type)
{ {
int ts = 0; int ts = 0;
T *values = data; T *values = data;
size_t variableStart = variable.m_StepsStart;
if (!m_InStreamMode && (variableStart == 1))
{ // variableBase::m_StepsStart min=1
variableStart = 0;
}
while (ts < variable.m_StepsCount) while (ts < variable.m_StepsCount)
{ {
m_H5File.SetTimeStep(variable.m_StepsStart + ts); // m_H5File.SetTimeStep(variable.m_StepsStart + ts);
m_H5File.SetTimeStep(variableStart + ts);
hid_t dataSetId = hid_t dataSetId =
H5Dopen(m_H5File.m_GroupId, variable.m_Name.c_str(), H5P_DEFAULT); H5Dopen(m_H5File.m_GroupId, variable.m_Name.c_str(), H5P_DEFAULT);
...@@ -223,7 +230,43 @@ values); #endif ...@@ -223,7 +230,43 @@ values); #endif
} }
*/ */
void HDF5ReaderP::EndStep() { m_H5File.Advance(); } StepStatus HDF5ReaderP::BeginStep(StepMode mode, const float timeoutSeconds)
{
m_InStreamMode=true;
int ts = m_H5File.GetNumTimeSteps();
if (m_StreamAt >= ts) {
return StepStatus::EndOfStream;
}
return StepStatus::OK;
}
void HDF5ReaderP::EndStep() { m_StreamAt ++; m_H5File.Advance(); }
void HDF5ReaderP::PerformGets()
{
if (!m_InStreamMode) {
throw std::runtime_error("PerformGets() needs to follow stream read sequeuences.");
}
#define declare_type(T) \
for (std::string variableName : m_DeferredStack) { \
Variable<T>* var = m_IO.InquireVariable<T>(variableName); \
if (var != nullptr) \
{ \
var->m_StepsStart = m_StreamAt; \
var->m_StepsCount = 1; \
hid_t h5Type = m_H5File.GetHDF5Type<T>(); \
UseHDFRead(*var, var->GetData(), h5Type); \
break; \
} \
}
ADIOS2_FOREACH_TYPE_1ARG(declare_type)
#undef declare_type
m_DeferredStack.clear();
}
void HDF5ReaderP::Close(const int transportIndex) { m_H5File.Close(); } void HDF5ReaderP::Close(const int transportIndex) { m_H5File.Close(); }
......
...@@ -36,8 +36,11 @@ public: ...@@ -36,8 +36,11 @@ public:
bool IsValid(); bool IsValid();
StepStatus BeginStep(StepMode mode, const float timeoutSeconds = 0.f) final;
void EndStep() final; void EndStep() final;
void PerformGets() final;
void Close(const int transportIndex = -1) final; void Close(const int transportIndex = -1) final;
private: private:
...@@ -45,6 +48,7 @@ private: ...@@ -45,6 +48,7 @@ private:
void Init() final; void Init() final;
bool m_InStreamMode = false; // default is not streaming bool m_InStreamMode = false; // default is not streaming
unsigned int m_StreamAt = 0; // stream step counter
#define declare_type(T) \ #define declare_type(T) \
void DoGetSync(Variable<T> &, T *) final; \ void DoGetSync(Variable<T> &, T *) final; \
void DoGetDeferred(Variable<T> &, T *) final; \ void DoGetDeferred(Variable<T> &, T *) final; \
...@@ -62,6 +66,8 @@ private: ...@@ -62,6 +66,8 @@ private:
// void UseHDFRead(const std::string &variableName, T *values, hid_t // void UseHDFRead(const std::string &variableName, T *values, hid_t
// h5Type); // h5Type);
void UseHDFRead(Variable<T> &variable, T *values, hid_t h5Type); void UseHDFRead(Variable<T> &variable, T *values, hid_t h5Type);
std::vector<std::string> m_DeferredStack;
}; };
}; };
#endif /* ADIOS2_ENGINE_HDF5_HDF5READERP_H_ */ #endif /* ADIOS2_ENGINE_HDF5_HDF5READERP_H_ */
...@@ -33,10 +33,21 @@ void HDF5ReaderP::GetSyncCommon(Variable<T> &variable, T *data) ...@@ -33,10 +33,21 @@ void HDF5ReaderP::GetSyncCommon(Variable<T> &variable, T *data)
template <class T> template <class T>
void HDF5ReaderP::GetDeferredCommon(Variable<T> &variable, T *data) void HDF5ReaderP::GetDeferredCommon(Variable<T> &variable, T *data)
{ {
#ifdef NEVER
// returns immediately // returns immediately
// m_HDF53Deserializer.GetDeferredVariable(variable, data); // m_HDF53Deserializer.GetDeferredVariable(variable, data);
throw std::runtime_error("Todo: GetDefCommon"); if (m_InStreamMode)
{
variable.m_StepsStart = m_StreamAt; // current step
variable.m_StepsCount = 1;
}
hid_t h5Type = m_H5File.GetHDF5Type<T>();
UseHDFRead(variable, data, h5Type);
#else
m_DeferredStack.push_back(variable.m_Name);
variable.SetData(data);
#endif
} }
} // end namespace adios2 } // end namespace adios2
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment