Let's see Paul Allen's SIMD CSV parser

⭐⭐⭐⭐⭐ 5星 · Lobsters · 2026-03-24

https://chunkofcoal.com/posts/simd-csv/

摘要

深度解析SIMD技术在CSV解析中的应用,参考simdjson论文,展示了如何使用ARM NEON intrinsics实现64字节并行处理。

核心亮点

  • SIMD背景:CPU时钟频率在20年前遇到天花板,无法通过提升单核频率提速,转而采用SIMD(单指令多数据)技术并行处理多个数据
  • Vectorized Classification:使用两个lookup table(高nibble + 低nibble)来分类字节,比标量方法快16/32/64倍
  • ARM NEON intrinsics:展示了vqtbl1q_u8、vmull_p64等指令的用法
  • Bitmask压缩:将分类结果压缩成3个位掩码(逗号、引号、换行)
  • 引号过滤:使用prefix XOR确定是否在引号内,vmull_p64单指令完成计算

关键技术点

1. Nibble Lookup Table

// 高位和低位nibble分别查表
// 0x2C (逗号) -> 高位0x2返回COMMA|QUOTE,低位0xC返回COMMA
// AND后只剩下COMMA

2. Branchless Processing

// SIMD代码最有效的是无分支代码
// 不使用if语句,循环和函数调用
// 无论输入如何都执行相同的操作

3. Prefix XOR for Quote Tracking

// 使用prefix XOR计算当前位置前的引号数量
// 偶数个引号 = 在引号外
// 奇数个引号 = 在引号内
vmull_p64 // ARM单指令完成

相关资源

标签

SIMD CSV解析 Rust 性能优化 ARM NEON 底层系统