Hasty Briefsbeta

双语

Let's See Paul Allen's SIMD CSV Parser

7 hours ago
  • 这篇文章介绍了一个研究性的CSV解析器,它利用SIMD一次处理64字节,基于simdjson论文的技术。
  • SIMD能够同时处理多个字节,并且最适合无分支代码,避免使用if语句和函数调用。
  • CSV解析分为三个步骤:分类结构字符,过滤掉引号字段内的虚假分隔符,以及收集分隔符位置。
  • 分类使用带有半字节的向量化查找表:每个字节被拆分为高半字节和低半字节,对两个查找表结果进行AND运算可得出逗号、引号和换行符的正确类别。
  • 分类后的字节被压缩成位掩码,其中每个位表示在给定的字节位置是否出现某个字符类别。
  • 在引号字段内,引号前缀XOR(运行奇偶性)确定解析器是在引号内还是引号外;转义引号会相互抵消,因此反转的前缀掩码会移除引号字段内的逗号和换行符。
  • 分隔符位置从清理后的位掩码中通过计数前导零提取,从而得到将字节流分割为行和字段所需的偏移量。