Back to browse
GitHub Repository

SIMD accelerated CSV parsing in Rust

10 starsRust

Fastest(?) SIMD CSV Parser in Rust

by juliusgeo·Feb 15, 2026·1 point·0 comments

AI Analysis

●●SolidWizardryBig Brain

Beats simd-csv with pclmulqdq trick, but CSV parsing is a solved category.

Strengths
  • Hand-tuned intrinsics for aarch64 movemask workaround shows deep SIMD knowledge
  • 60% speedup on AVX-512 with rigorous per-file benchmarks, not hand-waved claims
  • Zero-copy API mirrors simd-csv for fair comparison, reducing validation overhead
Weaknesses
  • CSV parsing already has dominant alternatives (polars, arrow, datafusion); speed alone doesn't differentiate
  • Portability story unclear—pclmulqdq limits x86_64 adoption, contradicting the portability fix
Target Audience

Rust developers, data engineers, performance-critical parsing use cases

Similar To

simd-csv · simdjson · polars

Post Description

There are already a quite a few [0][1] CSV parsers that use SIMD, some in Rust, with a variety of approaches. I found simd-csv[1] to have a very interesting approach that leverages memchr to essentially "seek" for the next delimiter, reducing a lot of the overhead that a byte-by-byte CSV parser would have. However, as noted in the README, the creators of simd-csv explicitly chose not to use the classic pclmulqdq trick[2] that other libraries like simdjson use due to portability concerns. I set out to beat to simd-csv's implementation by building a parser more similar to Geoff Langdale's, using the pclmulqdq trick as well as optimized intrinsic usage for aarch64 platforms[3]. If anyone has feedback on the Rust code, or my usage of intrinsics, I would greatly appreciate it.

[0] https://github.com/geofflangdale/simdcsv [1] https://github.com/medialab/simd-csv [2] https://branchfree.org/2019/03/06/code-fragment-finding-quot... [3] https://developer.arm.com/community/arm-community-blogs/b/se...

Similar Projects

Zero-allocation and SIMD-accelerated CSV iterator in Zig

I needed a CSV library in Zig and I hand rolled one. Then I decided to come back to it and make it avoid allocations entirely and then went down a rabbit hole o

peymo
203mo ago