tolower() 与 AVX-512 – Tony Finch

主要观点:几年前写过关于使用 SWAR 技巧批量快速转换为小写的内容,几天前被 Olivier Giniaux 关于处理小字符串的优化文章吸引,此文是关于优化 DNS 名称系列的一部分,介绍了适合字符串处理的一些 SIMD 指令集(ARM SVE、RISC-V Vector 扩展、AVX-512-BW)及使用 AVX-512-BW 实现的 tolower64()函数,包括填充寄存器、比较字符、掩码操作、批量加载存储等,还进行了基准测试,得出 AVX-512-BW 处理字符串效果好、性能平稳等结论,代码可在网站获取,感谢他人提供相关版本和指出错误。

关键信息:

  • 相关文章系列:tolower() in bulk at speed using SWAR tricks等。
  • 可用 SIMD 指令集:ARM SVE、RISC-V Vector 扩展、AVX-512-BW。
  • tolower64()函数实现细节:填充寄存器、比较字符、掩码操作等。
  • 基准测试结果:pink 的 tolower64 线性能较好,green 的 copybytes64 线速度提升不明显等。

重要细节:

  • 使用*在 Intel 内在函数指南中搜索字节级 AVX-512 函数。
  • 掩码操作中通过len_bitslen_mask处理字符串长度。
  • 不同函数在不同长度字符串下的性能表现及原因。
  • 代码可在https://dotat.at/cgi/git/vectolower.git获取。
阅读 32
0 条评论