Skip to content

[Story] Improve performance of regex processing in cuDF #21125

Description

@GregoryKimball

Is your feature request related to a problem? Please describe.

cuDF includes a precompiled regex (regular expression) engine that supports a wide set of regex patterns and good data processing throughput.

cuDF's regex engine uses a string-parallel approach, and shows lower data processing throughput with longer strings. Even for short strings, cuDF's regex engine shows a throughput much lower than the GPU global memory bandwidth.

This example shows pandas data processing throughput for contains_re around 3 GB/s, and cuDF data processing thoughput from 0.1 to 30 GB/s depending on string length.
Image

Approach Outlook Status
Use cudf::transform with UDF's (user defined functions) to JIT-compile efficient kernels for doing regex transformation cuDF's JIT transform API can be used to complete regex transformations (see blog). The conversion from regex pattern to UDF requires a translation. See this example implementation. available since ~25.06 (#18490)
Add a utility to convert a compiled cuDF regex program into a UDF cuDF regex processing goes through a compile step to parse the pattern before executing with the engine. The compiled program could be inspected and some types directly converted into UDFs.
Add custom kernels to cuDF for some common regex patterns cuDF could inspect the pattern and dispatch to a custom kernel instead of the full engine. In progress in #22178
Introduce a new regex engine based on Glushkov automata Add a bit-parallel Glushkov NFA regex engine to libcudf for compatible regex expressions. In progress in #21936
Expand microbenchmarks to cover the most important customer use cases

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature requestNew feature or requestlibcudfAffects libcudf (C++/CUDA) code.stringsstrings issues (C++ and Python)

    Type

    No type

    Projects

    Status
    Story Issue

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions