以疯狂速度用 AVX-512 将 ASCII 字符串转换为小写字母 - Daniel Lemire 的博客

主要观点:AMD Zen 4 和 Zen 5 以及近期的 Intel 服务器处理器支持 AVX - 512 指令集,它是强大的 SIMD 指令,允许“掩码”操作,可快速将 ASCII 字符串转换为小写。
关键信息:

  • AVX - 512 可一次加载 64 字节,可安全进行对齐加载,内存页按 64 字节划分。
  • 有多种将 ASCII 字母转换为小写的函数实现,如使用 SIMD 指令的 tolower64 函数等。
  • 有处理字符串转换为小写的函数,如处理 64 字节块的 lower64 函数,以 64 字节为块进行处理更高效。
  • 该 AVX - 512 代码在 Intel Ice Lake 处理器和 LLVM 16 下的测试结果,在小字符串上比传统方法快 20 倍,在短字符串上仍有竞争力。
    重要细节:
  • tolower64 函数通过比较和掩码操作将 64 字节块的字符转换为小写。
  • lower64 函数处理字符串转换为小写,处理 64 字节块,考虑字符串对齐情况。
  • 测试中使用不同大小的固定字符串进行基准测试,报告速度为 GB/s。
  • 只有 AVX - 512 指令集能实现这种神奇性能,Intel 非服务器处理器不再包含 AVX - 512。
  • 提到一年前与 Robert Clausecker 讨论过这些问题。
阅读 14
0 条评论