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
Random-access for variable-based encoding (i.e. use SetStepSelection for ADIOS2 steps) (#1706)
* Add preparseSnapshots
* Serial ADIOS2 implementation for readAttributeAllsteps
* Feature-complete, untested
* Fixes
* wip: parallel impl. for readAttributeAllsteps
huh this works??
* Simplify, cleanup
* wip testing
* CI fixes
* Fix test
* Add MPI_CHECK
* Stricter warning about group-based encoding in BP5
* variableBased as default in ADIOS2
* Add error check for non-homogeneous datasets
* Reset steps before reading the rankTable
* Use writeIterations() in MPI Benchmark
* Use group tables by default
* Add iterate_nonstreaming_series test to parallel tests
This covers the use case that the snapshot attribute has more than just
one entry.
* Remove std::cout calls
* wip: use variable-based encoding in tests
* CI fixes
* Fix Windows testing
* Cleanup
* Warn unimplemented modifiable attributes for now
* Fix test???
* Add this to variableBasedSeries test
* Remove debugging line
* Use own flag for the warning
Previously implementation did not work: ornladios/ADIOS2#4466
* Documentation
* Skip inhomogeneous datasets instead of outright failing
* add test for default iteration encoding
* Move test to its own file
* Don't distinguish ADIOS2 v2.9 any more
* Some more documentation
Copy file name to clipboardExpand all lines: docs/source/usage/concepts.rst
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -48,7 +48,7 @@ openPMD-api implements various file-formats (backends) and encoding strategies f
48
48
**Iteration encoding:** The openPMD-api can encode iterations in different ways.
49
49
The method ``Series::setIterationEncoding()`` (C++) or ``Series.set_iteration_encoding()`` (Python) may be used in writing for selecting one of the following encodings explicitly:
50
50
51
-
* **group-based iteration encoding:** This encoding is the default.
51
+
* **group-based iteration encoding:** This encoding is the default for HDF5 and JSON. In ADIOS2, variable-based encoding is preferred when possible due to better performance characteristics, see below.
52
52
It creates a separate group in the hierarchy of the openPMD standard for each iteration.
53
53
As an example, all data pertaining to iteration 0 may be found in group ``/data/0``, for iteration 100 in ``/data/100``.
54
54
* **file-based iteration encoding:** A unique file on the filesystem is created for each iteration.
@@ -57,6 +57,7 @@ The method ``Series::setIterationEncoding()`` (C++) or ``Series.set_iteration_en
57
57
A padding may be specified by ``"series_%06T.json"`` to create files ``series_000000.json``, ``series_000100.json`` and ``series_000200.json``.
58
58
The inner group layout of each file is identical to that of the group-based encoding.
59
59
* **variable-based iteration encoding:** This experimental encoding uses a feature of some backends (i.e., ADIOS2) to maintain datasets and attributes in several versions (i.e., iterations are stored inside *variables*).
60
+
When creating an ADIOS2 Series with steps (e.g. via ``series.writeIterations()`` / ``series.write_iterations()``), this encoding will be picked as a default instead of group-based encoding due to bad performance characteristics of group-based encoding in ADIOS2.
60
61
No iteration-specific groups are created and the corresponding layer is dropped from the openPMD hierarchy.
61
62
In backends that do not support this feature, a series created with this encoding can only contain one iteration.
Copy file name to clipboardExpand all lines: docs/source/usage/workflow.rst
+8-4Lines changed: 8 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -76,10 +76,14 @@ The openPMD-api distinguishes between a number of different access modes:
76
76
3. In streaming backends, random-access is not possible.
77
77
When using such a backend, the access mode will be coerced automatically to *linear read mode*.
78
78
Use of Series::readIterations() is mandatory for access.
79
-
4. Reading a variable-based Series is only fully supported with *linear access mode*.
80
-
If using *random-access read mode*, the dataset will be considered to only have one single step.
81
-
If the dataset only has one single step, this is guaranteed to work as expected.
82
-
Otherwise, it is undefined which step's data is returned.
79
+
4. *Random-access read mode* for a variable-based Series is currently experimental.
80
+
There is currently only very restricted support for metadata definitions that change across steps:
81
+
82
+
1. Modifiable attributes (except ``/data/snapshot``) can currently not be read. Attributes such as ``/data/time`` that naturally change their value across Iterations will hence not be really well-usable; the last Iteration's value will currently leak into all other Iterations.
83
+
2. There is no support for datasets that do not exist in all Iterations. The internal Iteration layouts should be homogeneous.
84
+
If you need this feature, please contact the openPMD-api developers; implementing this is currently not a priority.
85
+
Datasets that do not exist in all steps will be skipped at read time (with an error).
86
+
3. Datasets with changing extents are supported.
83
87
84
88
* **Read/Write mode**: Creates a new Series if not existing, otherwise opens an existing Series for reading and writing.
85
89
New datasets and iterations will be inserted as needed.
0 commit comments