我们宣布在 Libs 团队内启动便携式 SIMD 项目组。该小组致力于为稳定的 Rust 用户提供便携式 SIMD API。
便携式 SIMD 项目组由 @calebzulawski、@Lokathor 和 @workingjubilee 领导。
什么是项目组?
Rust 使用项目组来帮助协调工作。它们是人们参与塑造对他们重要的 Rust 部分的地方。
什么是 SIMD?
SIMD 代表单指令多数据。它允许 CPU 将单个指令应用于数据“向量”。向量是由多个相同数据类型的“通道”组成的单个超宽 CPU 寄存器。您可以将其视为类似于数组。不是单独处理每个通道,而是所有通道同时应用相同的操作。这使您可以比使用标准代码更快地转换数据。并非所有问题都可以通过“向量化”代码加速,但对于多媒体和列表处理应用程序,可能会有显着的收益。
为什么需要使其可移植?
不同的芯片供应商提供不同的 SIMD 指令。其中一些在 Rust 的 std::arch
模块中可用。您可以使用它构建向量化函数,但代价是为要支持的每个 CPU 维护不同的版本。您也可以不编写向量化操作,并希望 LLVM 的优化将“自动向量化”您的代码。但是,自动向量化器很容易混淆,并且可能无法优化“明显的”向量任务。
可移植 SIMD API 将使您只需使用高级 API 编写一次 SIMD 代码。通过明确地向编译器传达您的意图,它可以更好地生成最佳的最终代码。这仍然只是尽力而为的过程。如果您的目标不支持 SIMD 中所需的操作,编译器将回退到使用标量代码,一次处理一个通道。可用的内容取决于构建目标。
我们打算将便携式 SIMD API 作为 std::simd
发布。我们将涵盖尽可能多的用例,但您可能仍然适合直接使用 std::arch
。因此,std::simd
类型也将在需要时轻松转换为 std::arch
类型。
我如何参与?
每个人都可以参与!无需任何先前的经验。如果您想帮助实现便携式 SIMD,您可以访问我们的 GitHub 存储库 或在 Zulip 上联系我们并打个招呼!:wave