v1.0.0-rc.149 (#59)
Build Packages / Unit tests (push) Skipped
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 24m44s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 23m45s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 26m12s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 26m53s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 28m49s
Build Packages / build:rpm (rocky8) (push) Successful in 25m28s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 29m49s
Build Packages / XDS test (durin plugin) (push) Successful in 18m59s
Build Packages / Generate python client (push) Successful in 51s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 23m42s
Build Packages / Create release (push) Skipped
Build Packages / Build documentation (push) Successful in 1m51s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 26m30s
Build Packages / XDS test (neggia plugin) (push) Successful in 19m47s
Build Packages / build:rpm (rocky9) (push) Successful in 29m37s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 22m18s
Build Packages / DIALS test (push) Successful in 30m9s

* XDS plugin: Fix HDF5 mutex to run on multiple processors

Reviewed-on: #59
This commit was merged in pull request #59.
This commit is contained in:
2026-06-13 21:27:41 +02:00
parent cc3eb8352c
commit ea575f790a
131 changed files with 166 additions and 162 deletions
+33 -31
View File
@@ -219,50 +219,52 @@ void plugin_get_header(int *nx, int *ny, int *nbytes, float *qx, float *qy,
void plugin_get_data(int *frame_number, int *nx, int *ny, int *data_array,
int info[1024], int *error_flag) {
std::shared_lock sl(plugin_mutex);
std::vector<uint8_t> tmp;
CompressionAlgorithm algorithm = CompressionAlgorithm::NO_COMPRESSION;
try {
if (!hdf5_file)
throw PluginError(-1, "HDF5 file not open");
{
std::unique_lock h5l(hdf5_mutex);
if (!hdf5_file)
throw PluginError(-1, "HDF5 file not open");
FillInfoArray(info);
FillInfoArray(info);
if (*frame_number <= 0 || *frame_number > total_image_number)
throw PluginError(-1, "Frame number out of range");
if (*frame_number <= 0 || *frame_number > total_image_number)
throw PluginError(-1, "Frame number out of range");
std::string dataset_name;
hsize_t image_id;
std::string dataset_name;
hsize_t image_id;
if (format == FileWriterFormat::NXmxLegacy) {
char str[256];
size_t dataset_index = (*frame_number - 1) / images_per_file + 1;
snprintf(str, sizeof(str), "/entry/data/data_%06ld", dataset_index);
dataset_name = std::string(str);
image_id = (*frame_number - 1) % images_per_file;
} else {
dataset_name = "/entry/data/data";
image_id = *frame_number - 1;
}
if (format == FileWriterFormat::NXmxLegacy) {
char str[256];
size_t dataset_index = (*frame_number - 1) / images_per_file + 1;
snprintf(str, sizeof(str), "/entry/data/data_%06ld", dataset_index);
dataset_name = std::string(str);
image_id = (*frame_number - 1) % images_per_file;
} else {
dataset_name = "/entry/data/data";
image_id = *frame_number - 1;
}
HDF5DataSet dataset(*hdf5_file, dataset_name);
HDF5Dcpl dcpl(dataset);
HDF5DataSet dataset(*hdf5_file, dataset_name);
HDF5Dcpl dcpl(dataset);
std::vector<uint8_t> tmp;
std::vector<hsize_t> start = {image_id, 0, 0};
std::vector<hsize_t> start = {image_id, 0, 0};
CompressionAlgorithm algorithm = CompressionAlgorithm::NO_COMPRESSION;
auto chunk_size = dcpl.GetChunking();
auto chunk_size = dcpl.GetChunking();
if ((chunk_size.size() == 3)
&& (chunk_size[0] == 1)
&& (chunk_size[1] == image_size_y)
&& (chunk_size[2] == image_size_x)) {
dataset.ReadDirectChunk(tmp, start);
algorithm = dcpl.GetCompression();
if ((chunk_size.size() == 3)
&& (chunk_size[0] == 1)
&& (chunk_size[1] == image_size_y)
&& (chunk_size[2] == image_size_x)) {
dataset.ReadDirectChunk(tmp, start);
algorithm = dcpl.GetCompression();
} else {
dataset.ReadVectorToU8(tmp, start, {1, image_size_y, image_size_x});
algorithm = CompressionAlgorithm::NO_COMPRESSION;
}
}
if (algorithm != CompressionAlgorithm::NO_COMPRESSION) {
std::vector<uint8_t> decompressed_image(image_size_x * image_size_y * pixel_byte_depth);
JFJochDecompressPtr(decompressed_image.data(),
@@ -300,4 +302,4 @@ void plugin_close(int *error_flag) {
*error_flag = -1;
}
}
} /* extern "C" */
} /* extern "C" */