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
This issue should serve as documentation of a performance issue seen in our HDF5 backend.
Describe the issue
When parsing an HDF5 dataset, the majority of time will be spent reading attributes. The following graph was created by using openpmd-ls on a PIConGPU output with ~80 iterations:
Looking into the implementation of HDF5IOHandlerImpl::readAttribute():
For each read attribute, the object containing the attribute is opened and then closed. For subsequent attribute reads at the same object, this is unnecessary.
For each read attribute, a property is created and then closed. This is generally unnecessary, the property should be stored at the IOHandler level.
I've seen benchmarks before (though not the one above) where H5Tequal() was a sizeable portion of runtime. I'm not sure if we can find a better way to detect the attribute type.
To Reproduce
Not needed as the cause of the inefficiency is understood.
Expected behavior
Would a READ_ATTRIBUTES task help that reads all attributes in a group? --> Not fully since the frontend explicitly reads some attributes. Buffer the attributes of the last active group?
Definitely buffer the attribute read property.
Additional context
Not labeling as a a bug, since this is inefficient, but neither pathetically nor surprisingly so.
The text was updated successfully, but these errors were encountered:
This issue should serve as documentation of a performance issue seen in our HDF5 backend.
Describe the issue
When parsing an HDF5 dataset, the majority of time will be spent reading attributes. The following graph was created by using
openpmd-ls
on a PIConGPU output with ~80 iterations:Looking into the implementation of
HDF5IOHandlerImpl::readAttribute()
:This exposes several problems:
H5Tequal()
was a sizeable portion of runtime. I'm not sure if we can find a better way to detect the attribute type.To Reproduce
Not needed as the cause of the inefficiency is understood.
Expected behavior
Would a
READ_ATTRIBUTES
task help that reads all attributes in a group? --> Not fully since the frontend explicitly reads some attributes. Buffer the attributes of the last active group?Definitely buffer the attribute read property.
Additional context
Not labeling as a a bug, since this is inefficient, but neither pathetically nor surprisingly so.
The text was updated successfully, but these errors were encountered: