I am trying to use VDS in my application.
We have data scattered across thousands of processes. But each process does not own an hyperslab of the data. It actually owns a somewhat random collection of pieces of data, which are all hyperslabs. To write this data to a file collectively, I first tried to make each process select a combination of hyperslabs using
H5Scombine_hyperslab. That would be the perfect tool for us, but it does not work (it says “feature not supported” with
Now I am trying to reproduce this behaviour using VDS: all pieces are written in a dataset in disorder. Another dataset (virtual this time) maps all pieces in the right order. It works when using 1 process!
The problem: I am unable to create this VDS in a collective way.
More precisely, I would like to prepare the mapping individually (each process owns a dataset creation property list with virtual layout for mapping its own pieces), then calls
H5Dcreate2 collectively. All the creation property lists from all processes should be merged in the VDS. Unfortunately, I could not find any way to tell
H5Dcreate2 to work collectively: it ends up crashing at flush time.
I know it would be possible to make 1 process create this VDS independently from the other processes. But the number of pieces is so large that it would take too much time and memory.
-> is it possible to create a VDS collectively ?