Skip to main content
QUICK REVIEW

[论文解读] Transcoding Billions of Unicode Characters per Second with SIMD Instructions

Daniel Lemire, Wojciech Muła|arXiv (Cornell University)|Sep 21, 2021
Algorithms and Data Compression参考文献 13被引用 9
一句话总结

本文提出了一套高度优化的SIMD加速算法,用于在UTF-8和UTF-16格式之间高效转换Unicode文本,在现代x64和ARM处理器上实现了每秒超过40亿个字符的处理速度。通过利用AVX2和SSE指令集,结合紧凑的查找表与位操作,作者在混合内容及表情符号丰富的数据上,即使与ICU等传统库相比,也实现了高达4倍的性能提升,同时仅消耗约11 KB的表空间。

ABSTRACT

In software, text is often represented using Unicode formats (UTF-8 and UTF-16). We frequently have to convert text from one format to the other, a process called transcoding. Popular transcoding functions are slower than state-of-the-art disks and networks. These transcoding functions make little use of the single-instruction-multiple-data (SIMD) instructions available on commodity processors. By designing transcoding algorithms for SIMD instructions, we multiply the speed of transcoding on current systems (x64 and ARM). To ensure reproducibility, we make our software freely available as an open source library.

研究动机与目标

  • 解决Unicode转换中的性能瓶颈,尽管网络和磁盘速度持续提升,但该瓶颈仍限制系统吞吐量。
  • 设计基于SIMD优化的算法,高效实现UTF-8与UTF-16之间的转换,并支持完整验证。
  • 在保持低内存占用和代码膨胀的同时,最大化各类工作负载(包括非ASCII和表情符号丰富的文本)的处理吞吐量。
  • 提供一种实用、可移植且开源的实现,兼容x64、ARM和POWER架构。

提出的方法

  • 使用AVX2和SSE指令设计向量化算法,实现多个字节或16位字的并行处理。
  • 采用紧凑的16字节查找表(总计约11 KB),根据字符长度模式对UTF-8/UTF-16数据进行重排与提取。
  • 应用位操作和掩码运算,高效提取并重组多字节序列中的码点。
  • 采用混合方法,通过快速路径检测并处理ASCII序列,避免查找表访问。
  • 使用SIMD重排指令(如pshufb)根据预计算的索引,在128位寄存器内重新排列字节。
  • 在转换过程中通过向量化检查实现输入序列的验证,检测字节延续模式和起始字节模式。

实验结果

研究问题

  • RQ1SIMD指令能否有效用于加速UTF-8与UTF-16之间的完整Unicode转换,包括表情符号和多字节字符等边缘情况?
  • RQ2使用SIMD实现高吞吐量Unicode转换所需的最小内存占用是多少?
  • RQ3与ICU和LLVM等最先进的非SIMD库相比,基于SIMD的转换性能如何?
  • RQ4同一算法是否能在无需平台特定调优的情况下,跨x64、ARM和POWER等多样化平台实现高性能?
  • RQ5是否可能在不依赖大型查找表或复杂数据对齐的情况下实现高吞吐量?

主要发现

  • 所提出的基于SIMD的转换函数在现代x64和ARM处理器上实现了每秒超过40亿个字符的处理速度,显著优于ICU和LLVM。
  • UTF-8到UTF-16的转换器速度高于反向转换,性能比最高可达2:1,原因在于UTF-8变长编码的更高复杂度。
  • 该方法仅使用约11 KB的查找表,远低于先前方法(如Inoue等人方法的105 KB,Gatilov的utf8lut为2 MB),且未牺牲性能。
  • 该实现具有可移植性,可编译为小于50 KB的二进制库,支持Linux、macOS、Windows及多种CPU架构。
  • 与utf8sse4和u8u16等现有SIMD解决方案相比,该库通过减少指令数量实现了更高的吞吐量。
  • 该方法在混合内容数据(包括表情符号和非BMP字符)上仍保持高性能,而许多竞争技术则无法做到。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。