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
Track the remaining ALP improvements after the initial implementation in #48345.
Accept unsorted and duplicate exception positions while preserving the
optimized patch loop for strictly increasing positions.
Serialize vectors one at a time instead of retaining all encoded vectors
and a separate offset array for the page.
Make ALP vector size configurable through writer properties and encoder
factories.
Cache and reuse a column-chunk preset across pages.
Encode complete vectors as values arrive in Put() / PutSpaced(),
retaining only the unfinished vector instead of buffering the entire page
as raw values until FlushValues().
Support falling back from ALP when ALP would produce a larger page.
Improve EstimatedDataEncodedSize() using observed encoded bytes per value,
including metadata and exception overhead, instead of returning the raw
buffered byte count.
Activity
apacheGH-55448: [C++][Parquet] Optimize ALP and make vector sizes con…
apacheGH-55448: [C++][Parquet] Optimize ALP and make vector sizes con…
pitrou commentedon Nov 10, 2026
We could also improve decoding speed with explicit vectorization.
I made a quick-and-dirty attempt using xsimd here:
https://gist.github.com/pitrou/b52c3af4aa7b8d8b4dd77f4afbf59e70
Benchmark numbers (AVX2):
cc @mapleFU
pitrou commentedon Nov 10, 2026
Also @prtkgaur FYI
mapleFU commentedon Nov 10, 2026
ALP's official impl is efficient for SIMD execution, let's just eat it!
By the way
19.3666Gi/sis extremly fast😂