宣布便携式 SIMD 项目组

2020 年 9 月 29 日 · Jubilee 和 Lokathor 代表库团队

我们宣布在 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