Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEA] parquet: rle_stream for dictionary pages #14950

Open
abellina opened this issue Feb 1, 2024 · 2 comments
Open

[FEA] parquet: rle_stream for dictionary pages #14950

abellina opened this issue Feb 1, 2024 · 2 comments
Assignees
Labels
cuIO cuIO issue feature request New feature or request Performance Performance related issue Spark Functionality that helps Spark RAPIDS

Comments

@abellina
Copy link
Contributor

abellina commented Feb 1, 2024

I've been looking at the rle_stream class in order to decode dictionary streams in addition to repetition streams in the parquet decoder. This is a component of the work that @nvdbaranec has done here #13622, where we'd like to separate out at least a "fixed width" and a "fixed width dictionary encoded" pair of kernels.

With the changes in rle_stream, the core of the logic is able to use more threads for the RLE stream decoder. Specifically, a first warp is in charge of generating a set of runs, and other warps are able to take each one of the runs and decode them in parallel. As part of the micro kernel work, we feel that focusing on rle_stream decoder and its effects on gpuComputeStringPageBounds, gpuComputePageSizes and the use in the new fixed kernels, is a good first step to get the micro kernel work merged.

This issue then is to get a new rle_stream into cuDF that can handle both repetition AND dictionary streams, and show that the performance impact is same or better than what we have now. We hope that having this decoder will help centralize code, helping cleanup the parquet code base.

@abellina abellina added feature request New feature or request Needs Triage Need team to review and classify cuIO cuIO issue Performance Performance related issue Spark Functionality that helps Spark RAPIDS labels Feb 1, 2024
@abellina abellina self-assigned this Feb 1, 2024
@GregoryKimball GregoryKimball moved this to In progress in libcudf Feb 1, 2024
@etseidl
Copy link
Contributor

etseidl commented Feb 1, 2024

It would be interesting to compare the rle_stream approach to dictionary decoding to the approach in totalDictEntriesSize. The latter makes use of all warps for decoding work, and doesn't suffer from load balancing problems between warps, but it might be harder to save state and pick up again in a batch processing application.

@bdice bdice removed the Needs Triage Need team to review and classify label Mar 4, 2024
@abellina abellina removed their assignment Aug 22, 2024
@pmattione-nvidia
Copy link
Contributor

This work is essentially done, except there is a corner case: If we have one rle run that is extremely long, one warp is busy decoding it while the other warps sit idle. When we detect this case we should split up the work amongst the warps to better balance the load.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cuIO cuIO issue feature request New feature or request Performance Performance related issue Spark Functionality that helps Spark RAPIDS
Projects
Status: In progress
Development

No branches or pull requests

6 participants