Rust 中的不必要优化:汉明距离、SIMD 和自动向量化

主要观点:作者在开发应用时进行纳米级基准测试,用二进制向量嵌入构建 Scour 服务,比较 Rust 中不同的汉明距离实现,发现hamming-bitwise-fast在多数基准测试中最快,simsimd紧随其后,同时探讨了自动向量化的优势及代码实现方式。
关键信息:

  • 测试使用criterion,在 3 种机器上测试向量长度为 512、768、1024 和 2048 位的距离计算,机器包括 2023 MacBook Pro M2 Max、Linode 专用 CPU 机器、Fly.io 性能节点。
  • 各实现在不同机器上的测试结果:hamming-bitwise-fast在多数情况下最快,simsimd接近,朴素实现在 MacBook 上表现良好等。
  • 自动向量化是编译器分析代码并利用单指令多数据(SIMD)优化的能力,hamming-bitwise-fast的实现遵循相关结论。
    重要细节:
  • 比较的 crate 不包括计算字符串汉明距离的,代码可在这里找到。
  • 在 MacBook 上尝试 16 字节块和 u128 时,在 512 和 768 位向量上快 30%,但在其他基准测试中较慢。
  • 感谢 Alex Kesling 提供原始灵感及反馈等。可在 Lobsters、Reddit、Hacker News 或 Bluesky 上讨论。有#embeddings、#rust、#scour 标签。
阅读 20
0 条评论