在C / C ++中,您可以将内在函数用于SIMD(例如AVX和AVX2)指令。有没有办法在Rust中使用SIMD?
答案 0 :(得分:10)
答案是肯定的,并提出警告:
core::arch
module的稳定版,可重新导出为std::arch
。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功能。