You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Preparation work: Refactoring
* Basic compression/filtering in HDF5
* Configure generic filters via JSON object
* Full support for the set_filter API
* Fix: captured structured bindings are a C++20 extension
* Refactoring to satisfy the Github bot
* Fix includes
* Switch to JSON config for NVidia compiler's benefit
* Verbose CI debugging lets goo
* Revert "Verbose CI debugging lets goo"
This reverts commit abefc3a.
* Use Blosc2 filter
not yet integrated into CI
* Add compression example
* Add HDF5-Blosc2 to some Linux workflow
* Update .github/workflows/dependencies/install_hdf5_blosc2
* Add Python example
* Some documentation fixes
* Fix install_hdf5_blosc2 script
* Complete examples
* ADIOS2 shorthand: dataset.operators may also be a single element
* Fix indentation
* Fix patch URL
* Update documentation and tests for ADIOS2
* Deactivate tests for HDF5-Blosc2
* Add documentation
* Some more consistency in examples
* Install with sudo rights
* Erase unnecessary line from example
* Fix datatypes in Python example
* Use CMake flag directly...
* Reset extended write example to dev
Compression example is moved to 15_compression now
* Do we need -L/usr/local/lib ??
* Try if HDF5 finds the filter on its own...
* Ok that works, so cleanup
* Explicitly set chunks = "auto"
* CI fixes
* Add HDF5-Blosc2 to further CI runs
* Add hdf5plugin to some Python runs
* Skip patch in Clang runs
* Fix includes
* Fixes
* Further fixes
* Remove blosc filter from some runs again
This is too bothersome to set up and the runs that we have are enough.
* Add missing dataset definition
* Pull the Blosc2 stuff down in the example file
* Ditch self-compiled Blosc2 plugin, use hdf5plugin package
* CI fixes
* Try installing the deb package for h5pl...
* tmp: check if python example for hdf5+blosc2 runs
* fixes
* Move hdf5plugin Python tests to other runs
* Revert "tmp: check if python example for hdf5+blosc2 runs"
This reverts commit b81437b.
* ....
* ...
* Install hdf5plugin into venv
* Remove CI debugging
* Cleanup
Copy file name to clipboardExpand all lines: docs/source/backends/hdf5.rst
+13Lines changed: 13 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,6 +25,19 @@ Virtual file drivers are configured via JSON/TOML.
25
25
Refer to the page on :ref:`JSON/TOML configuration <backendconfig-hdf5>` for further details.
26
26
27
27
28
+
Filters (compression)
29
+
*********************
30
+
31
+
HDF5 supports so-called filters for transformations such as compression on datasets.
32
+
These can be permanent (applied to an entire dataset) and transient (applied to individual I/O operations).
33
+
The openPMD-api currently supports permanent filters.
34
+
Pipelines of multiple subsequent filters are supported.
35
+
Refer also to `this documentation <https://web.ics.purdue.edu/~aai/HDF5/html/Filters.html>`_.
36
+
37
+
Filters are applied via :ref:`JSON/TOML configuration <backendconfig-hdf5>`, see there for detailed instructions on how to apply filters.
38
+
There are also extended examples on how to apply compression options to ADIOS2 and HDF5 in the examples: `Python <https://github.com/openPMD/openPMD-api/blob/dev/examples/15_compression.py>`_ / `C++ <https://github.com/openPMD/openPMD-api/blob/dev/examples/15_compression.cpp>`_.
Copy file name to clipboardExpand all lines: docs/source/details/backendconfig.rst
+20-2Lines changed: 20 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -185,8 +185,8 @@ Explanation of the single keys:
185
185
Additionally, specifying ``"disk_override"``, ``"buffer_override"`` or ``"new_step_override"`` will take precedence over options specified without the ``_override`` suffix, allowing to invert the normal precedence order.
186
186
This way, a data producing code can hardcode the preferred flush target per ``flush()`` call, but users can e.g. still entirely deactivate flushing to disk in the ``Series`` constructor by specifying ``preferred_flush_target = buffer_override``.
187
187
This is useful when applying the asynchronous IO capabilities of the BP5 engine.
188
-
* ``adios2.dataset.operators``: This key contains a list of ADIOS2 `operators<https://adios2.readthedocs.io/en/latest/components/components.html#operator>`_, used to enable compression or dataset transformations.
189
-
Each object in the list has two keys:
188
+
* ``adios2.dataset.operators``: This key contains either a single ADIOS2 `operator<https://adios2.readthedocs.io/en/latest/components/components.html#operator>`_ or a list of operators, used to enable compression or dataset transformations.
189
+
Each operator is an object with two keys:
190
190
191
191
* ``type`` supported ADIOS operator type, e.g. zfp, sz
192
192
* ``parameters`` is an associative map of string parameters for the operator (e.g. compression levels)
@@ -247,6 +247,24 @@ Explanation of the single keys:
247
247
An explicit chunk size can be specified as a list of positive integers, e.g. ``hdf5.dataset.chunks = [10, 100]``. Note that this specification should only be used per-dataset, e.g. in ``resetDataset()``/``reset_dataset()``.
248
248
249
249
Chunking generally improves performance and only needs to be disabled in corner-cases, e.g. when heavily relying on independent, parallel I/O that non-collectively declares data records.
250
+
* ``hdf5.datasets.permanent_filters``: Either a single HDF5 permanent filter specification or a list of HDF5 permanent filter specifications.
251
+
Each filter specification is a JSON/TOML object, but there are multiple options:
252
+
253
+
* Zlib: The Zlib filter has a distinct API in HDF5 and the configuration for Zlib in openPMD is hence also different. It is activated by the mandatory key ``type = "zlib"`` and configured by the optional integer key ``aggression``.
254
+
Example: ``{"type": "zlib", "aggression": 5}``.
255
+
* Filters identified by their global ID `registered with the HDF group <https://github.com/HDFGroup/hdf5_plugins/blob/master/docs/RegisteredFilterPlugins.md>`_.
256
+
They are activated by the mandatory integer key ``id`` containing this global ID.
257
+
All other keys are optional:
258
+
259
+
* ``type = "by_id"`` may optionally be specified for clarity and consistency.
260
+
* The string key ``flags`` can take the values ``"mandatory"`` or ``"optional"``, indicating if HDF5 should abort execution if the filter cannot be applied for some reason.
261
+
* The key ``cd_values`` points to a list of nonnegative integers.
262
+
These are filter-specific configuration options.
263
+
Refer to the specific filter's documentation.
264
+
265
+
Alternatively to an integer ID, the key ``id`` may also be of string type, identifying one of the six builtin filters of HDF5: ``"deflate", "shuffle", "fletcher32", "szip", "nbit", "scaleoffset"``.
266
+
267
+
250
268
* ``hdf5.vfd.type`` selects the HDF5 virtual file driver.
0 commit comments