H5Writer optimizations

This commit is contained in:
2018-01-21 16:10:34 +01:00
parent f26f1ee5db
commit a40ae1c3ac
2 changed files with 19 additions and 14 deletions
+13 -7
View File
@@ -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;
}
+6 -7
View File
@@ -2,8 +2,7 @@
#define H5WRITER_H
#include <map>
#include "config.hpp"
#include "h5_utils.hpp"
#include <H5Cpp.h>
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();
};