Let's see Paul Allen's SIMD CSV parser
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单指令完成
相关资源
- simdjson论文 - JSON解析的SIMD技术
- SIMD Base64介绍
- 作者的实现
标签
SIMD
CSV解析
Rust
性能优化
ARM NEON
底层系统