mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-04-30 21:12:24 +02:00
H5Writer optimizations
This commit is contained in:
+13
-7
@@ -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
@@ -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();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user