From 658665ab77af5aa5d53ffa93ab612e24a4dd5edc Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Tue, 26 May 2020 11:07:45 +0200 Subject: [PATCH] Pre cache entire metadata --- sf-replay/src/ReplayH5Reader.cpp | 35 ++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/sf-replay/src/ReplayH5Reader.cpp b/sf-replay/src/ReplayH5Reader.cpp index 795c9df..c38bfc2 100644 --- a/sf-replay/src/ReplayH5Reader.cpp +++ b/sf-replay/src/ReplayH5Reader.cpp @@ -18,6 +18,21 @@ void ReplayH5Reader::load_buffers(const uint64_t pulse_id) dset_metadata_ = current_file_.openDataSet(BUFFER_H5_METADATA_DATASET); dset_frame_ = current_file_.openDataSet(BUFFER_H5_FRAME_DATASET); + + hsize_t b_m_dims[2] = {FILE_MOD, ModuleFrame_N_FIELDS}; + H5::DataSpace b_m_space (2, b_m_dims); + hsize_t b_m_count[] = {FILE_MOD, ModuleFrame_N_FIELDS}; + hsize_t b_m_start[] = {0, 0}; + b_m_space.selectHyperslab(H5S_SELECT_SET, b_m_count, b_m_start); + + hsize_t f_m_dims[2] = {FILE_MOD, ModuleFrame_N_FIELDS}; + H5::DataSpace f_m_space (2, f_m_dims); + hsize_t f_m_count[] = {FILE_MOD, ModuleFrame_N_FIELDS}; + hsize_t pulse_id_start[] = {0, 0}; + f_m_space.selectHyperslab(H5S_SELECT_SET, f_m_count, pulse_id_start); + + dset_metadata_.read( + m_buffer_, H5::PredType::NATIVE_UINT64, b_m_space, f_m_space); } auto file_index = BufferUtils::get_file_frame_index(pulse_id); @@ -27,21 +42,6 @@ void ReplayH5Reader::load_buffers(const uint64_t pulse_id) buffer_start_pulse_id_ = pulse_id - (file_index - cache_start_index); buffer_end_pulse_id_ = buffer_start_pulse_id_ + REPLAY_READ_BUFFER_SIZE - 1; - hsize_t b_m_dims[2] = {REPLAY_READ_BUFFER_SIZE, ModuleFrame_N_FIELDS}; - H5::DataSpace b_m_space (2, b_m_dims); - hsize_t b_m_count[] = {REPLAY_READ_BUFFER_SIZE, ModuleFrame_N_FIELDS}; - hsize_t b_m_start[] = {0, 0}; - b_m_space.selectHyperslab(H5S_SELECT_SET, b_m_count, b_m_start); - - hsize_t f_m_dims[2] = {FILE_MOD, ModuleFrame_N_FIELDS}; - H5::DataSpace f_m_space (2, f_m_dims); - hsize_t f_m_count[] = {REPLAY_READ_BUFFER_SIZE, ModuleFrame_N_FIELDS}; - hsize_t pulse_id_start[] = {cache_start_index, 0}; - f_m_space.selectHyperslab(H5S_SELECT_SET, f_m_count, pulse_id_start); - - dset_metadata_.read( - m_buffer_, H5::PredType::NATIVE_UINT64, b_m_space, f_m_space); - hsize_t b_f_dims[3] = {REPLAY_READ_BUFFER_SIZE, MODULE_Y_SIZE, MODULE_X_SIZE}; H5::DataSpace b_f_space (3, b_f_dims); @@ -67,7 +67,7 @@ ReplayH5Reader::ReplayH5Reader( device_(device), channel_name_(channel_name) { - m_buffer_ = new ModuleFrame[REPLAY_READ_BUFFER_SIZE]; + m_buffer_ = new ModuleFrame[FILE_MOD]; f_buffer_ = new char[MODULE_N_BYTES * REPLAY_READ_BUFFER_SIZE]; } @@ -99,9 +99,10 @@ void ReplayH5Reader::get_buffer( load_buffers(pulse_id); } + auto file_index = BufferUtils::get_file_frame_index(pulse_id); auto buffer_index = pulse_id - buffer_start_pulse_id_; - metadata = m_buffer_ + buffer_index; + metadata = m_buffer_ + file_index; data = f_buffer_ + (buffer_index * MODULE_N_BYTES); if (metadata->pulse_id != 0 && metadata->pulse_id != pulse_id) {