Skip to content
Snippets Groups Projects
Commit 5d141ed2 authored by William F Godoy's avatar William F Godoy
Browse files

Adding Operator at the IO level

parent 6f2c6b2e
No related branches found
No related tags found
1 merge request!294Bp1read : Initial Reading Capabilities and latest API
...@@ -16,8 +16,11 @@ ...@@ -16,8 +16,11 @@
#include <adios2.h> #include <adios2.h>
void UserCallBack(const void *data, std::string doid, std::string var, // matches Signature1 in ADIOS2
std::string dtype, std::vector<std::size_t> varshape) template <class T>
void UserCallBack(const T *data, const std::string &doid,
const std::string &var, const std::string &dtype,
const std::vector<std::size_t> &varshape)
{ {
std::cout << "data object ID = " << doid << "\n"; std::cout << "data object ID = " << doid << "\n";
std::cout << "variable name = " << var << "\n"; std::cout << "variable name = " << var << "\n";
...@@ -27,7 +30,9 @@ void UserCallBack(const void *data, std::string doid, std::string var, ...@@ -27,7 +30,9 @@ void UserCallBack(const void *data, std::string doid, std::string var,
std::multiplies<std::size_t>()); std::multiplies<std::size_t>());
for (unsigned int i = 0; i < varsize; ++i) for (unsigned int i = 0; i < varsize; ++i)
{
std::cout << ((float *)data)[i] << " "; std::cout << ((float *)data)[i] << " ";
}
std::cout << std::endl; std::cout << std::endl;
} }
...@@ -43,6 +48,12 @@ int main(int argc, char *argv[]) ...@@ -43,6 +48,12 @@ int main(int argc, char *argv[])
{ {
adios2::ADIOS adios(adios2::DebugON); adios2::ADIOS adios(adios2::DebugON);
adios2::Operator &callbackFloat = adios.DefineOperator(
"Print float Variable callback",
std::function<void(const float *, const std::string &,
const std::string &, const std::string &,
const adios2::Dims &)>(UserCallBack<float>));
adios2::IO &dataManIO = adios.DeclareIO("WAN"); adios2::IO &dataManIO = adios.DeclareIO("WAN");
dataManIO.SetEngine("DataManReader"); dataManIO.SetEngine("DataManReader");
dataManIO.SetParameters({{"real_time", "yes"}, dataManIO.SetParameters({{"real_time", "yes"},
......
/*
* Distributed under the OSI-approved Apache License, Version 2.0. See
* accompanying file Copyright.txt for details.
*
* Callback.inl
*
* Created on: Oct 18, 2017
* Author: William F Godoy godoywf@ornl.gov
*/
#ifndef ADIOS2_CORE_CALLBACK_INL_
#define ADIOS2_CORE_CALLBACK_INL_
#ifndef ADIOS2_CORE_CALLBACK_H_
#error "Inline file should only be included from it's header, never on it's own"
#endif
namespace adios2
{
template <class R, class... Args>
Callback<R, Args...>::Callback(std::function<R(Args...)> function,
const Params &parameters, const bool debugMode)
: Operator("Callback", parameters, debugMode), m_Function(function)
{
}
} // end namespace adios2
#endif /* ADIOS2_CORE_CALLBACK_INL_ */
...@@ -73,6 +73,11 @@ unsigned int IO::AddTransport(const std::string type, const Params &parameters) ...@@ -73,6 +73,11 @@ unsigned int IO::AddTransport(const std::string type, const Params &parameters)
return static_cast<unsigned int>(m_TransportsParameters.size() - 1); return static_cast<unsigned int>(m_TransportsParameters.size() - 1);
} }
void IO::AddOperator(Operator &adiosOperator, const Params &parameters) noexcept
{
m_Operators.push_back(OperatorInfo{adiosOperator, parameters});
}
void IO::SetTransportParameter(const unsigned int transportIndex, void IO::SetTransportParameter(const unsigned int transportIndex,
const std::string key, const std::string value) const std::string key, const std::string value)
{ {
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
namespace adios2 namespace adios2
{ {
/** used for Variables and Attributes */ /** used for Variables and Attributes, name, type, type-index */
using DataMap = using DataMap =
std::unordered_map<std::string, std::pair<std::string, unsigned int>>; std::unordered_map<std::string, std::pair<std::string, unsigned int>>;
...@@ -44,6 +44,12 @@ class IO ...@@ -44,6 +44,12 @@ class IO
{ {
public: public:
struct OperatorInfo
{
Operator &ADIOSOperator;
Params Parameters;
};
/** unique identifier */ /** unique identifier */
const std::string m_Name; const std::string m_Name;
...@@ -55,7 +61,7 @@ public: ...@@ -55,7 +61,7 @@ public:
const bool m_DebugMode = false; const bool m_DebugMode = false;
/** from ADIOS class passed to Engine created with Open */ /** from ADIOS class passed to Engine created with Open */
std::string m_HostLanguage = "C++"; const std::string m_HostLanguage = "C++";
/** From SetParameter, parameters for a particular engine from m_Type */ /** From SetParameter, parameters for a particular engine from m_Type */
Params m_Parameters; Params m_Parameters;
...@@ -63,6 +69,9 @@ public: ...@@ -63,6 +69,9 @@ public:
/** From AddTransport, parameters in map for each transport in vector */ /** From AddTransport, parameters in map for each transport in vector */
std::vector<Params> m_TransportsParameters; std::vector<Params> m_TransportsParameters;
/** From Add Operator */
std::vector<OperatorInfo> m_Operators;
/** /**
* Constructor called from ADIOS factory class * Constructor called from ADIOS factory class
* @param name unique identifier for this IO object * @param name unique identifier for this IO object
...@@ -221,9 +230,14 @@ public: ...@@ -221,9 +230,14 @@ public:
*/ */
bool InConfigFile() const; bool InConfigFile() const;
void SetCallBack(std::function<void(const void *, std::string, std::string, /**
std::string, std::vector<size_t>)> * Adds an operator defined by the ADIOS class. Could be a variable set
callback); * transform, callback function, etc.
* @param adiosOperator operator created by the ADIOS class
* @param parameters specific parameters for IO
*/
void AddOperator(Operator &adiosOperator,
const Params &parameters) noexcept;
/** /**
* Creates a polymorphic object that derives the Engine class, * Creates a polymorphic object that derives the Engine class,
......
...@@ -20,6 +20,14 @@ Operator::Operator(const std::string type, const Params &parameters, ...@@ -20,6 +20,14 @@ Operator::Operator(const std::string type, const Params &parameters,
{ {
} }
void Operator::SetParameter(const std::string key,
const std::string value) noexcept
{
m_Parameters[key] = value;
}
Params &Operator::GetParameters() noexcept { return m_Parameters; }
#define declare_type(T) \ #define declare_type(T) \
\ \
void Operator::RunCallback1(const T *arg1, const std::string &arg2, \ void Operator::RunCallback1(const T *arg1, const std::string &arg2, \
......
...@@ -42,6 +42,10 @@ public: ...@@ -42,6 +42,10 @@ public:
virtual ~Operator() = default; virtual ~Operator() = default;
void SetParameter(const std::string key, const std::string value) noexcept;
Params &GetParameters() noexcept;
#define declare_type(T) \ #define declare_type(T) \
virtual void RunCallback1(const T *, const std::string &, \ virtual void RunCallback1(const T *, const std::string &, \
const std::string &, const std::string &, \ const std::string &, const std::string &, \
......
...@@ -29,6 +29,17 @@ class VariableBase ...@@ -29,6 +29,17 @@ class VariableBase
{ {
public: public:
/** Operators metadata info */
struct OperatorInfo
{
/** reference to object derived from Operator class */
Operator &ADIOSOperator;
/** Variable specific parameters */
Params Parameters;
/** resulting sizes from Operator */
Dims Sizes;
};
/** unique identifier inside Method that creates a Variable */ /** unique identifier inside Method that creates a Variable */
const std::string m_Name; const std::string m_Name;
...@@ -51,17 +62,6 @@ public: ...@@ -51,17 +62,6 @@ public:
/** Global array was written as Local value, so read accordingly */ /** Global array was written as Local value, so read accordingly */
bool m_ReadAsLocalValue = false; bool m_ReadAsLocalValue = false;
/** Transforms metadata info */
struct OperatorInfo
{
/** reference to object derived from Transform class */
Operator &OperatorRef;
/** parameters from AddTransform */
Params Parameters;
/** resulting sizes from transformation */
Dims Sizes;
};
/** Registered transforms */ /** Registered transforms */
std::vector<OperatorInfo> m_OperatorsInfo; std::vector<OperatorInfo> m_OperatorsInfo;
......
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