HDF5 API Support through VOL

We have developed a HDF5 VOL in order to comply with the ECP request to support HDF5 API. Through this VOL the HDF5 clients can read and write general ADIOS files.

Disclaimer

Note

The Virtual Object Layer (VOL) is a feature introduced in recent release of HDF5 1.12 (https://hdf5.wiki/index.php/New_Features_in_HDF5_Release_1.12).

So please do make sure your HDF5 version supports the latest VOL.

Once the ADIOS VOL is compiled, There are two ways to apply it:

  • externally (through dynamic library, no code change)

  • internally (through client code).

External

  • Set the following environment parameters:

HDF5_VOL_CONNECTOR=ADIOS2_VOL
HDF5_PLUGIN_PATH=/replace/with/your/adios2_vol/lib/path/

Without code change, ADIOS2 VOL will be loaded at runtime by HDF5, to access ADIOS files without changing user code.

Internal

  • include adios header

  • call the function to set VOL when H5F is initiated

  • call the function to unset VOL when H5F is closed

// other includes
#include <adios2/h5vol/H5Vol.h> // ADD THIS LINE TO INCLUDE ADIOS VOL

hid_t  pid = H5Pcreate(H5P_FILE_ACCESS);
// other declarations
hid_t fid = H5Fopen(filename, mode, pid);

H5VL_ADIOS2_set(pid); // ADD THIS LINE TO USE ADIOS VOL

H5Fclose(fid);

H5VL_ADIOS2_unset();  // ADD THIS LINE TO EXIT ADIOS VOL

Note: The following features are not supported in this VOL:

  • hyperslab support

  • HDF5 parameters are not passed down. e.g. compression/decompression

  • ADIOS2 parameters is not setup.

  • user defined types

  • change of variable extent is not supported in ADIOS2.