是否可以在Rust中使用SIMD指令?

时间:2017-03-21 21:58:53

标签: rust simd avx avx2

在C / C ++中,您可以将内在函数用于SIMD(例如AVX和AVX2)指令。有没有办法在Rust中使用SIMD?

1 个答案:

答案 0 :(得分:10)

答案是肯定的,并提出警告:

  • 适用于x86和x86_64 through the core::arch module的稳定版,可重新导出为std::arch
  • 其他CPU现在需要使用夜间编译器。
  • 并非所有说明都可以通过core::arch获得,在这种情况下,内联汇编是必要的,这也需要夜间编译器。

std::arch模块仅提供CPU指令作为内在函数,并且需要在包含这些指令的函数上使用unsafe块以及特定feature来正确对齐参数。 std::arch的文档是编写时间和运行时检测CPU功能的良好起点。

如文档中所述,未来某些时候可能会在std::simd(可能是core::simd)下提供更高级别的API;在the stdsimd crate中可以预览:

  

工效学

     

重要的是要注意使用arch模块并不是世界上最容易的事情,所以如果你想要尝试一下,你可能想要为自己的一些冗长做准备!

     

该模块的主要目的是在crates.io上启用稳定的板条箱,以构建更符合人体工程学的抽象,最终在引擎盖下使用SIMD。随着时间的推移,这些抽象也可能会进入标准库本身,但是现在这个模块的任务是提供在稳定的Rust上使用供应商内在函数所需的最低限度。

注意:您也可以使用FFI链接到为您这样做的库中;例如Shepmaster's cupid crate使用这样的策略在运行时访问cpu功能。