在稳定的 Rust 中使用便携式 SIMD

主要观点:SIMD 可在单核上显著加快代码速度,其性能提升可与多核并行结合,但 SIMD 指令因 CPU 架构和型号而异。有两种处理方式,一是为每种 SIMD 指令变体编写自定义版本,二是使用便携式 SIMD 库。文中介绍了std::simd库(在 Rust 标准库中但仅在不稳定编译器中可用),重点介绍了wide库(可在稳定 Rust 中实现便携式 SIMD)和pulp库(另一个稳定的高级 SIMD 抽象库),并比较了它们的优缺点及使用方法。
关键信息

  • std::simd仅在不稳定编译器中可用。
  • wide库可在稳定 Rust 中实现便携式 SIMD,代码与std::simd相似但有差异,如数据类型限制等。
  • 使用wide的好处是可在稳定 Rust 中运行,无需不稳定编译器,缺点是 API 文档有限。
  • pulp是另一个稳定的高级 SIMD 抽象库,文档比wide好,作者提供了曼德布洛特算法的实现。
    重要细节
  • ARM CPU 和 x86 - 64 CPU 的 SIMD 指令不同,不同 x86 - 64 型号支持的指令也不同,如 i7 - 12700K CPU 不支持 AVX - 512 SIMD。
  • 在使用 SIMD 时需确保编译器使用 SIMD 扩展,如RUSTFLAGS="-C target-cpu=native" cargo build --release
  • 可在GitHub 仓库中查看所有代码和其他实现。
阅读 172
0 条评论