Skip to content

Optimise bitpacked filtering for valid runs and buffer filtering - #10281

Open
robert3005 wants to merge 2 commits into
developfrom
rk/bitpacked-filter
Open

robert3005 wants to merge 2 commits into
developfrom
rk/bitpacked-filter

Conversation

@robert3005

Copy link
Copy Markdown
Contributor

Previous code assumed indices but these are almost never cached. Instead we handle the slices (which can be produced by lists) and bit buffers which are the default

claude added 2 commits October 4, 2026 00:00
…rializing indices

BitPacked's filter kernel only handled very sparse masks (below 3-9% density),
and for those it materialized the mask's `usize` indices first; any denser mask
unpacked the whole array before filtering.

The kernel now walks the selection one 1024-value FastLanes chunk at a time:
from the mask's cached slices when it has them (as FixedSizeList element masks
do) and otherwise straight from the bitmap. Empty chunks are skipped, fully
selected chunks unpack directly into the output, chunks with few selected values
use `unchecked_unpack_indices` on a small stack array, and the rest unpack into
an L1-resident scratch chunk that is compacted with run copies, a branch-free
loop or a trailing-zeros walk per mask word. Dense masks with scattered values
still decline the kernel, so the vectorized canonical filter handles them.

Adds a `bitpacking_filter` benchmark covering primitive i32 and FSL<i32>
elements bit-packed to 16 bits. Each iteration builds a fresh mask so cached
indices are not reused across iterations.

Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GEPn56FBLoa8Yq6jexAwWL
Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GEPn56FBLoa8Yq6jexAwWL
@robert3005 robert3005 added the changelog/performance A performance improvement label Oct 4, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/performance A performance improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants