DEVOURED
Don't Stop Early: Case-Folding Source Code at Memory Speed
GitHub boosted its case-folding speed from 3 GiB/s to 45 GiB/s by removing branches and using vectorized arithmetic to process source code.
What: Engineers replaced branch-heavy logic with branch-free byte arithmetic and optimized the Unicode lookup structure, allowing LLVM to vectorize the code and maximize CPU instruction throughput.
Why it matters: This demonstrates how low-level architecture tuning and removing conditional branches can significantly outperform 'standard' implementations, even for something as common as case-folding.
Deep dive
- GitHub searched for ways to speed up source code case-folding for its search engine.
- The primary bottleneck in the original code was an 'early-exit' branch for non-ASCII characters.
- Replacing branch-heavy logic with branch-free byte arithmetic allows for SIMD (Single Instruction, Multiple Data) optimization.
- LLVM is then able to auto-vectorize the code, processing multiple characters per instruction.
- A compact Unicode lookup table ensures the fast-path (ASCII) is never interrupted, keeping execution near memory-bandwidth limits.
- The technique emphasizes 'two clean passes' over a 'complex single pass' to achieve higher instruction-level parallelism.
Decoder
- Case-folding: A process of normalizing text (usually by lowercasing) to make comparisons case-insensitive.
- Branch-free: Code design that avoids
if/elsestatements, which can cause CPU branch mispredictions and stall pipelines. - Vectorize (SIMD): A CPU instruction optimization where the same operation is performed on multiple data points simultaneously.
Original article
GitHub accelerated case-folding in its code search engine from roughly 3 GiB/s to more than 45 GiB/s by removing an early-exit branch and using branch-free byte arithmetic that LLVM could fully vectorize. A compact Unicode lookup structure and allocation-free ASCII path keep the common case near memory-bandwidth limits, showing that two clean passes can outperform a seemingly efficient branchy single pass.
Explore all 55 articles in today's digest
Fresh dev news, AI-digested daily. Never miss a trend at devoured.fyi