Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 8 additions & 29 deletions src/kg/include/kg/io/Engine.inl
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,9 @@ inline Engine::Engine(File&& file, MPI_Comm comm) : file_{std::move(file)}
MPI_Comm_size(comm, &mpi_size_);
}

inline void Engine::beginStep(StepMode mode)
{
file_.beginStep(mode);
}
inline void Engine::beginStep(StepMode mode) { file_.beginStep(mode); }

inline void Engine::endStep()
{
file_.endStep();
}
inline void Engine::endStep() { file_.endStep(); }

// ----------------------------------------------------------------------
// put
Expand Down Expand Up @@ -78,18 +72,12 @@ inline void Engine::get(const std::string& pfx, T& datum, Args&&... args)
// ----------------------------------------------------------------------
// performPuts

inline void Engine::performPuts()
{
file_.performPuts();
}
inline void Engine::performPuts() { file_.performPuts(); }

// ----------------------------------------------------------------------
// performGets

inline void Engine::performGets()
{
file_.performGets();
}
inline void Engine::performGets() { file_.performGets(); }

// ----------------------------------------------------------------------
// internal
Expand All @@ -105,7 +93,7 @@ inline void Engine::putVariable(const T* data, const Mode launch,
template <typename T>
inline void Engine::putAttribute(const T& datum)
{
file_.putAttribute(prefix(), &datum, 1);
file_.putAttribute(prefix(), datum);
}

template <typename T>
Expand Down Expand Up @@ -150,20 +138,11 @@ inline Dims Engine::variableShape()
// ----------------------------------------------------------------------
// close

inline void Engine::close()
{
file_.close();
}
inline void Engine::close() { file_.close(); }

inline int Engine::mpiRank() const
{
return mpi_rank_;
}
inline int Engine::mpiRank() const { return mpi_rank_; }

inline int Engine::mpiSize() const
{
return mpi_size_;
}
inline int Engine::mpiSize() const { return mpi_size_; }

} // namespace io
} // namespace kg
3 changes: 3 additions & 0 deletions src/kg/include/kg/io/File.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ class File
template <typename T>
void getAttribute(const std::string& name, T* data);

template <typename T>
void putAttribute(const std::string& name, const T& datum);

template <typename T>
void putAttribute(const std::string& name, const T* data, size_t size);

Expand Down
28 changes: 12 additions & 16 deletions src/kg/include/kg/io/File.inl
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,13 @@ namespace io

inline File::File(FileBase* impl) : impl_{impl} {}

inline File::~File()
{
close();
}
inline File::~File() { close(); }

inline void File::close()
{
impl_.reset();
}
inline void File::close() { impl_.reset(); }

inline void File::beginStep(StepMode mode)
{
impl_->beginStep(mode);
}
inline void File::beginStep(StepMode mode) { impl_->beginStep(mode); }

inline void File::endStep()
{
impl_->endStep();
}
inline void File::endStep() { impl_->endStep(); }

inline void File::performPuts()
{
Expand Down Expand Up @@ -73,6 +61,14 @@ inline void File::getAttribute(const std::string& name, T* data)
impl_->getAttribute(name, dataVar);
}

template <typename T>
inline void File::putAttribute(const std::string& name, const T& datum)
{
assert(impl_);
FileBase::Type datumVar = datum;
impl_->putAttribute(name, datumVar);
}

template <typename T>
inline void File::putAttribute(const std::string& name, const T* data,
size_t size)
Expand Down
5 changes: 5 additions & 0 deletions src/kg/include/kg/io/FileAdios2.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class FileAdios2 : public FileBase
Dims shapeVariable(const std::string& name) const override;

void getAttribute(const std::string& name, TypePointer data) override;
void putAttribute(const std::string& name, const Type& datum) override;
void putAttribute(const std::string& name, TypeConstPointer data,
size_t size) override;
size_t sizeAttribute(const std::string& name) const override;
Expand All @@ -44,6 +45,7 @@ class FileAdios2 : public FileBase
struct GetVariable;
struct GetAttribute;
struct PutAttribute;
struct PutAttributeScalar;

template <typename T>
void putVariable(const std::string& name, const T* data, Mode launch,
Expand All @@ -57,6 +59,9 @@ class FileAdios2 : public FileBase
template <typename T>
void getAttribute(const std::string& name, T* data);

template <typename T>
void putAttribute(const std::string& name, const T& datum);

template <typename T>
void putAttribute(const std::string& name, const T* data, size_t size);

Expand Down
37 changes: 37 additions & 0 deletions src/kg/include/kg/io/FileAdios2.inl
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ inline FileAdios2::FileAdios2(adios2::ADIOS& ad, const std::string& name,
io_name_ = io_name;
}
io_ = ad.DeclareIO(io_name_);
// io_.SetEngine("BP4");
adios2::Mode adios2_mode;
if (mode == Mode::Read) {
adios2_mode = adios2::Mode::Read;
Expand Down Expand Up @@ -179,6 +180,21 @@ inline Dims FileAdios2::shapeVariable(const std::string& name) const
std::abort();
}

template <typename T>
inline void FileAdios2::putAttribute(const std::string& name, const T& datum)
{
// if (mpiRank() != 0) { // FIXME, should we do this?
// return;
// }
auto attr = io_.InquireAttribute<T>(name);
if (attr) {
mprintf("attr '%s' already exists -- ignoring it!\n", name.c_str());
} else {
// FIXME? we're never using "single value", just an array of size 1
io_.DefineAttribute<T>(name, datum);
}
}

template <typename T>
inline void FileAdios2::putAttribute(const std::string& name, const T* data,
size_t size)
Expand Down Expand Up @@ -224,6 +240,27 @@ inline void FileAdios2::getAttribute(const std::string& name, TypePointer data)
mpark::visit(GetAttribute{*this, name}, data);
}

struct FileAdios2::PutAttributeScalar
{
PutAttributeScalar(FileAdios2& self, const std::string& name)
: self{self}, name{name}
{}

template <typename T>
void operator()(const T& datum)
{
self.putAttribute(name, datum);
}

FileAdios2& self;
const std::string& name;
};

inline void FileAdios2::putAttribute(const std::string& name, const Type& datum)
{
mpark::visit(PutAttributeScalar{*this, name}, datum);
}

struct FileAdios2::PutAttribute
{
PutAttribute(FileAdios2& self, const std::string& name, size_t size)
Expand Down
3 changes: 3 additions & 0 deletions src/kg/include/kg/io/FileBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ namespace io
class FileBase
{
public:
using Type = mpark::variant<int, unsigned int, unsigned long,
unsigned long long, float, double, std::string>;
using TypePointer =
mpark::variant<int*, unsigned int*, unsigned long*, unsigned long long*,
float*, double*, std::string*>;
Expand Down Expand Up @@ -41,6 +43,7 @@ class FileBase
virtual Dims shapeVariable(const std::string& name) const = 0;

virtual void getAttribute(const std::string& name, TypePointer data) = 0;
virtual void putAttribute(const std::string& name, const Type& datum) = 0;
virtual void putAttribute(const std::string& name, TypeConstPointer data,
size_t size) = 0;
virtual size_t sizeAttribute(const std::string& name) const = 0;
Expand Down
7 changes: 6 additions & 1 deletion src/kg/testing/io/TestIOAdios2.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ TEST(IOAdios2, CtorDtor) { auto io = kg::io::IOAdios2{}; }
TEST(IOAdios2, OpenWrite)
{
auto io = kg::io::IOAdios2{};
auto file = io.openFile("test1", kg::io::Mode::Write);
auto file = io.openFile("test1.bp", kg::io::Mode::Write);
}

TEST(IOAdios2, OpenReadMissingFile)
Expand Down Expand Up @@ -76,6 +76,8 @@ TEST(IOAdios2, FilePutGetAttribute)
file.beginStep(kg::io::StepMode::Append);
auto dbl = std::vector<double>{1., 2., 3., 4., 5.};
file.putAttribute("attr_dbl", dbl.data(), dbl.size());
double val = 99.;
file.putAttribute("attr_dbl_scalar", val);
file.endStep();
}
{
Expand All @@ -84,7 +86,10 @@ TEST(IOAdios2, FilePutGetAttribute)
auto size = file.sizeAttribute("attr_dbl");
auto dbl = std::vector<double>(size);
file.getAttribute("attr_dbl", dbl.data());
double val;
file.getAttribute("attr_dbl_scalar", &val);
EXPECT_EQ(dbl, (std::vector<double>{1., 2., 3., 4., 5.}));
EXPECT_EQ(val, 99.);
file.endStep();
}
}
Expand Down
Loading