fearless_simd 是一款致力于把 unsafe 从 SIMD 编程中剥离的 Rust 库。无论你追求的是自动向量化与多版本化、可移植 SIMD,还是安全访问原始 intrinsics,fearless_simd 都能覆盖。它零依赖、构建时间短、公开 API 安全,且内部 unsafe 代码量比同类方案少几个数量级。
v0.7 的核心新增包括:64 位整数向量支持、用显式 SSE2 级别取代 x86 上的标量回退、改进的泛型编程支持,以及更多已实现的 SIMD 操作。这也是 Fearless SIMD v1.0 之前的最后一个主要版本——前提是没有人对现有 API 提出异议。
此前 fearless_simd 不支持 64 位整数向量,是因为硬件支持参差不齐。例如 AVX2 在 64 位整数的许多操作上缺乏硬件支持,想要获得理想性能就得用现有 SIMD 指令进行软件模拟。此外,跟踪每条 intrinsic 属于哪套指令集也相当棘手,一旦弄错就可能造成内存安全违规。v0.5 中编译器接管了这一跟踪工作,移除了绝大多数 unsafe 块,也让实现硬件支持不均衡的操作变得容易很多。
如今,除了 64 位整数,i8/u8、i16/u16、i32/u32 以及 f32/f64 向量类型在之前的版本中早已就绪,v0.7 补上了完整类型覆盖的最后一块拼图。待 f16 类型在标准库中稳定后,团队还将研究对它的支持。
在操作层面,swizzle_dyn 现已覆盖所有向量宽度,支持任意字节重排;作者还为该操作向标准库 SIMD 模块(std::simd)提交了性能改进。
作为 1.0 前的最后一站,v0.7 也向社区发出信号:如果对 API 有任何担忧,现在正是提出建议的最后窗口。
热门跟贴