Closed ArvidJB closed 1 month ago
I ran some benchmarks:
from versioned_hdf5.wrappers import as_subchunk_map
from ndindex import ChunkSize
%%timeit
# 1D: runtime is dominated by creation of chunk_subindexes
list(as_subchunk_map(
ChunkSize((10, 100_000)), # 8 MB
(slice(None), slice(None)),
(100_000, 100_000), # 80 GB
))
# master : 209 ms
# this PR: 41 ms
%%timeit
# 2D: runtime is dominated by final product() for loop
list(as_subchunk_map(
ChunkSize((1000, 1000)), # 8 MB
(slice(None), slice(None)),
(100_000, 100_000), # 80 GB
))
# master : 34 ms
# this PR: 31 ms
@peytondmurray this is now ready for review and merge
Taking a look now!
By reimplementing
as_subchunk_map
in Cython we can significantly improve write performance.We spend significant time in
as_subchunk_map
both when resizing and when reading the existing data from the file:By moving the
as_subchunk_map
implementation to Cython these calls are siginificantly faster (although the rest of the code of course takes the same amount of time as before):Note that we still spend significant time constructing
ndindex
objects in the Cython version ofas_subchunk_map
which accounts for the majority of the time in that function.