-
Notifications
You must be signed in to change notification settings - Fork 157
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Turn on collective HDF5 metadata #620
Turn on collective HDF5 metadata #620
Conversation
Thank you for this useful contribution. There's a few mechanical changes I'd like to make, i.e. split the two setting (to allow users to pick whichever the need), use the " Finally, I'm undecided about adding this to Let's look at reading metadata. The list of collective operations is here: For reading I see the list of affected HDF5 function call is: Therefore we have functions that would become collective. The interesting ones are:
The two that Therefore, I'd suggest having nothing or a |
add(MPIOFileAccess(comm, info)); | ||
add(MPIOCollectiveMD()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As an alternative to MPIOFileDriver
(which I personally would like to see deprecated), one can use:
FileDriver adam;
adam.add(MPIOFileAccess(MPI_COMM_WORLD, MPI_INFO_NULL));
adam.add(MPIOCollectiveMD());
File file(filename.str(), File::ReadWrite | File::Create | File::Truncate, adam);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
that makes a lot more sense to me, especially now that i have a better feel for "the highfive way" after taking a crack at the collective data work.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We'll merge this into a feature branch; and perform some mechanical changes there. Thanks again for the contribution.
Work continued here: #624 |
This PR enables users to configure collective metadata reads and writes (at file level). The heavy lifting was done in #620; here we simply restructure the proposed solution. In more detail, this PR adds: * ability to request collective MPI-IO metadata reads * ability to request collective MPI-IO metadata writes * explains the caveats of collective metadata reads * add collective MPI-IO metadata writes to `MPIOFileDriver`. Co-authored-by: Rob Latham <rlatham@gmail.com>
Description
Since HDF5 1.10.0 (march 2016), HDF5 has the ability to request "collective metadata". When requested, HDF5 (internally) will use collective operations to update the data structures stored in the HDF5 file. If not requested, every single process will make these data structure updates, resulting in lots of small reads and writes -- particularly at scale.
This does not fix #112 but users who are interested in collective I/O optimizations and are OK with the restrictions collective I/O imposes (every process has to create datasets, every process has to call H5Dwrite etc) are likely to be interested in this optimization as well.
A "darshan" log of a four process
parallel_hdf5_write_dataset
example from HighFive tells me there were 0 MPI-IO collective writes, 11 MPI-IO independent writes, and 11 POSIX writes before this change, andPlease include a summary of the change and which issue is fixed or which feature is added.
How to test this?
The Darshan (https://www.mcs.anl.gov/research/projects/darshan/) I/O characterization tool collects counters (not logs) of I/O applications. I used it to observe the effects of this change on the
parallel_hdf5_write_dataset
example. I'm also using the 'spack' package management tool, but that's not relevant to this pull request.Test System