22个版本 (稳定版)
6.2.0 | 2024年1月22日 |
---|---|
6.1.0 | 2022年11月8日 |
6.0.1 | 2021年5月10日 |
5.1.1 | 2021年5月10日 |
0.0.2 | 2015年3月17日 |
#8 在 算法 中
每月下载量116,574
用于 299 个crate(123个直接使用)
2.5MB
49K SLoC
RustFFT
RustFFT是一个纯Rust编写的、SIMD加速的高性能FFT库。它可以在O(nlogn)时间内计算任何大小的FFT,包括素数大小的FFT。
使用方法
// Perform a forward FFT of size 1234
use rustfft::{FftPlanner, num_complex::Complex};
let mut planner = FftPlanner::<f32>::new();
let fft = planner.plan_fft_forward(1234);
let mut buffer = vec![Complex{ re: 0.0, im: 0.0 }; 1234];
fft.process(&mut buffer);
SIMD加速
x86_64目标
RustFFT支持AVX指令集以提升性能。无需特殊代码即可启用AVX:只需在一个支持avx
和fma
CPU特性的机器上使用FftPlanner
规划FFT,RustFFT将自动切换到更快的AVX加速算法。
对于没有AVX的机器,RustFFT也支持SSE4.1指令集。与AVX类似,使用FftPlanner时将自动启用SSE4.1。如果同时启用了AVX和SSE4.1支持,规划器将自动选择最快的可用指令集。
AArch64目标
RustFFT支持64位Arm,AArch64中的NEON指令集。与AVX和SSE类似,无需特殊代码即可激活NEON加速代码路径:只需在AArch64目标上使用FftPlanner
规划FFT,RustFFT将自动切换到更快的NEON加速算法。
WebAssembly目标
RustFFT支持WebAssembly的固定宽度SIMD扩展。与AVX、SSE和NEON一样,无需特殊代码即可利用此代码路径:只需使用FftPlanner
规划FFT。
注意:编译WASM SIMD加速代码时有一个重要的限制:与AVX、SSE和NEON不同,WASM不允许动态特性检测。因此,RustFFT无法检测CPU特性并自动切换到WASM SIMD加速算法。相反,如果启用了wasm_simd
crate特性,它将无条件地使用SIMD代码路径。有关此限制的更多信息,请参阅官方Rust文档。
特性标志
x86_64目标
默认情况下启用了 avx
和 sse
功能。在 x86_64 上,这些功能可以启用 AVX 和 SSE 加速代码的编译。
禁用它们可以减少编译时间和二进制文件大小。
在其他平台(非 x86_64)上,这些功能不起作用,RustFFT 将表现得好像它们没有被设置。
AArch64目标
默认启用了 neon
功能。在 AArch64 上,此功能可以启用 Neon 加速代码的编译。
禁用它可以减少编译时间和二进制文件大小。
在其他平台(非 AArch64)上,此功能不起作用,RustFFT 将表现得好像它没有被设置。
WebAssembly目标
功能 wasm_simd
默认是禁用的。在 WASM 平台上,此功能可以启用 WASM SIMD 加速代码的编译。
要执行使用 wasm_simd
编译的二进制文件,您需要一个支持 fixed-width SIMD
的目标浏览器或运行时。如果您在不受支持的平台上运行 SIMD 加速代码,WebAssembly 将指定一个陷阱,导致立即执行取消。
在其他平台(非 WASM)上,此功能不起作用,RustFFT 将表现得好像它没有被设置。
稳定性/未来破坏性变更
最新版本是 6.2 - 5.0 版本于 2022 年初发布,包含从先前版本中删除的几个破坏性 API 变更。对于使用 RustFFT 非常旧版本的用户,请查看升级指南,了解 RustFFT 5.0 需要升级的更改。为了稳定起见,我们承诺在未来 3 年内(即直到 2024 年)不再进行破坏性更改。
此政策有一个例外:我们目前重新导出 num-complex 和 num-traits 的预 1.0 版本。为了避免生态系统碎片化,我们将继续跟踪这些包,即使这需要主要版本的增加。当这些包发布新的主要版本时,我们将尽快升级,这将需要我们自己的主要版本更改。在这些情况下,num-complex/num-traits 的版本增加将是发布中的唯一破坏性更改。
支持的 Rust 版本
RustFFT 需要 rustc 1.61 或更高版本。RustFFT 的次要版本可能会将 MSRV(最低支持 Rust 版本)升级到 rustc 的新版本。但是,如果我们需要提高 MSRV,新的 Rust 版本必须至少在六个月前发布。
许可
根据您的选择,受以下任一许可协议的许可
- Apache 许可证 2.0 版(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则任何旨在包含在您的工作中的贡献,根据 Apache-2.0 许可证定义,均应按上述方式双许可,没有任何附加条款或条件。
在提交 PR 之前,请确保运行 cargo fmt
。