From a40ae1c3ac5cdde407dd52a26f5dca28216b8d87 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Sun, 21 Jan 2018 16:10:34 +0100 Subject: [PATCH] H5Writer optimizations --- src/H5Writer.cpp | 20 +++++++++++++------- src/H5Writer.hpp | 13 ++++++------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/H5Writer.cpp b/src/H5Writer.cpp index ec35f2d..579363e 100644 --- a/src/H5Writer.cpp +++ b/src/H5Writer.cpp @@ -11,8 +11,10 @@ extern "C" using namespace std; -H5Writer::H5Writer(const string filename, const string dataset_name, hsize_t frames_per_file, hsize_t initial_dataset_size) : - filename(filename), dataset_name(dataset_name), frames_per_file(frames_per_file), initial_dataset_size(initial_dataset_size) +H5Writer::H5Writer(const std::string filename, const std::string dataset_name, + hsize_t frames_per_file, hsize_t initial_dataset_size, hsize_t dataset_increase_step) : + filename(filename), dataset_name(dataset_name), frames_per_file(frames_per_file), + initial_dataset_size(initial_dataset_size), dataset_increase_step(dataset_increase_step) { #ifdef DEBUG_OUTPUT cout << "[H5Writer::H5Writer] Creating chunked writer"; @@ -89,7 +91,8 @@ void H5Writer::write_frame_data(size_t frame_index, size_t* frame_shape, size_t } } -void H5Writer::create_file(size_t* frame_shape, hsize_t frame_chunk, string& type, string& endianness) { +void H5Writer::create_file(size_t* frame_shape, hsize_t frame_chunk, string& type, string& endianness) +{ if (file.getId() != -1) { close_file(); @@ -153,11 +156,13 @@ void H5Writer::create_file(size_t* frame_shape, hsize_t frame_chunk, string& typ } -bool H5Writer::is_file_open() { +bool H5Writer::is_file_open() +{ return (file.getId() != -1); } -hsize_t H5Writer::prepare_storage_for_frame(size_t frame_index, size_t* frame_shape, string& data_type, string& endianness) { +hsize_t H5Writer::prepare_storage_for_frame(size_t frame_index, size_t* frame_shape, string& data_type, string& endianness) +{ hsize_t relative_frame_index = frame_index; @@ -185,7 +190,7 @@ hsize_t H5Writer::prepare_storage_for_frame(size_t frame_index, size_t* frame_sh // Expand the dataset if needed. if (relative_frame_index > current_dataset_size) { - current_dataset_size = h5_utils::expand_dataset(dataset, relative_frame_index, config::dataset_increase_step); + current_dataset_size = h5_utils::expand_dataset(dataset, relative_frame_index, dataset_increase_step); } // Keep track of the max index in this file - needed for shrinking the dataset at the end. @@ -196,6 +201,7 @@ hsize_t H5Writer::prepare_storage_for_frame(size_t frame_index, size_t* frame_sh return relative_frame_index; } -H5::H5File& H5Writer::get_h5_file() { +H5::H5File& H5Writer::get_h5_file() +{ return file; } \ No newline at end of file diff --git a/src/H5Writer.hpp b/src/H5Writer.hpp index 5372f03..85aaac6 100644 --- a/src/H5Writer.hpp +++ b/src/H5Writer.hpp @@ -2,8 +2,7 @@ #define H5WRITER_H #include -#include "config.hpp" -#include "h5_utils.hpp" +#include class H5Writer { @@ -12,10 +11,8 @@ class H5Writer std::string dataset_name; hsize_t frames_per_file; hsize_t initial_dataset_size; + hsize_t dataset_increase_step = 0; - // Configuration parameters. - hsize_t dataset_increase_step = config::dataset_increase_step; - // State variables. hsize_t max_frame_index = 0; hsize_t current_dataset_size = 0; @@ -28,11 +25,13 @@ class H5Writer void create_file(size_t* frame_shape, hsize_t frame_chunk, std::string& data_type, std::string& endianness); public: - H5Writer(const std::string filename, const std::string dataset_name, hsize_t frames_per_file=0, hsize_t initial_dataset_size=config::initial_dataset_size); + H5Writer(const std::string filename, const std::string dataset_name, + hsize_t frames_per_file=0, hsize_t initial_dataset_size=1000, hsize_t dataset_increase_step=1000); ~H5Writer(); bool is_file_open(); void close_file(); - void write_frame_data(size_t frame_index, size_t* frame_shape, size_t data_bytes_size, char* data, std::string data_type, std::string endianness); + void write_frame_data(size_t frame_index, size_t* frame_shape, size_t data_bytes_size, + char* data, std::string data_type, std::string endianness); H5::H5File& get_h5_file(); };