⚡ Bolt: Optimize decompress offset 3 (~540% faster)#236
Conversation
This commit optimizes the decompression of `offset == 3` matches in `decompress_bmi2` (x86-64). Previously, this case fell back to a slow byte-by-byte scalar copy loop. The optimization uses `_mm_shuffle_epi8` with precomputed cyclic masks (`OFFSET3_MASKS`) to construct 16-byte vectors containing the repeating 3-byte pattern from the first 16 bytes loaded from `src` (safely masking out garbage). The copy loop is unrolled to process 48 bytes (LCM of 3 and 16) per iteration. Performance Impact: - `Decompress offset3` throughput improved by ~540% (~1.44 GiB/s -> ~9.22 GiB/s). - `Decompress offset3 small` throughput improved by ~1.4%. - `Decompress offset30` throughput improved by ~4%. - `Decompress offset31` throughput improved by ~9%. - `Decompress offset32` throughput improved by ~1.8%. This aligns the performance of offset 3 with other small offsets that are already optimized. Co-authored-by: 404Setup <[email protected]>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
Implemented SIMD optimization for
offset == 3indecompress_bmi2.OFFSET3_MASKS(48 bytes) for the 3-byte cycle.offset == 3branch usingpshufbto replicate the pattern.cargo testandcargo bench.PR created automatically by Jules for task 13715871091694478525 started by @404Setup