From 03d48601e105c5aae0caab1c3bba571385d41628 Mon Sep 17 00:00:00 2001 From: "Sergey \"Shnatsel\" Davidoff" Date: Mon, 12 Feb 2024 22:05:32 +0000 Subject: [PATCH 1/2] Update README.md --- README.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 423a995..8c1e48c 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ including [RustFFT](https://crates.io/crates/rustfft/). ## Features -- Performance on par with FFTW and far exceeding other Rust implementations - Simple implementation using a single, general-purpose FFT algorithm +- Performance on par with other Rust FFT implementations - Zero `unsafe` code - Takes advantage of latest CPU features up to and including AVX-512, but performs well even without them - Optional parallelization of some steps to 2 threads (with even more planned) @@ -50,10 +50,9 @@ We also use the Cache-Optimal Bit Reveral Algorithm ([COBRA](https://csaws.cs.technion.ac.il/~itai/Courses/Cache/bit.pdf)) on large datasets and optionally run it on 2 parallel threads, accelerating it even further. -All of this combined results in a fast and efficient FFT implementation that surpasses the performance of existing Rust -FFT crates, -including [RustFFT](https://crates.io/crates/rustfft/) on large inputs and while using significantly -less memory. +All of this combined results in a fast and efficient FFT implementation competitive with +the performance of existing Rust FFT crates, +including [RustFFT](https://crates.io/crates/rustfft/), while using significantly less memory. ## Quickstart @@ -123,17 +122,14 @@ PhastFT is licensed under MIT or Apache 2.0 license, at your option. ## PhastFT vs RustFFT [RustFFT](https://crates.io/crates/rustfft/) is another excellent FFT implementation in pure Rust. -RustFFT and PhastFT are optimized for different workloads. - -RustFFT performs best on small inputs that fit entirely into the L2 cache, -while PhastFT is optimized for large input sizes common in scientific computing. - -PhastFT also uses 2x less memory, which is important for processing large datasets. +RustFFT and PhastFT make different trade-offs. RustFFT made the choice to work on stable Rust compiler at the cost of `unsafe` code, while PhastFT contains no `unsafe` blocks but requires a nightly build of Rust compiler to access the Portable SIMD API. +PhastFT uses 2x less memory than RustFFT, which is important for processing large datasets. + ## What's with the name? The name, **PhastFT**, is derived from the implementation of the From d65698a51253d265fed7ff56804399c97d6ef7b1 Mon Sep 17 00:00:00 2001 From: "Sergey \"Shnatsel\" Davidoff" Date: Mon, 12 Feb 2024 22:08:16 +0000 Subject: [PATCH 2/2] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 8c1e48c..921229a 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,9 @@ RustFFT made the choice to work on stable Rust compiler at the cost of `unsafe` while PhastFT contains no `unsafe` blocks but requires a nightly build of Rust compiler to access the Portable SIMD API. +RustFFT implements multiple FFT algorithms and tries to pick the best one depending on the workload, +while PhastFT has a single FFT implementation and still achieves competitive performance. + PhastFT uses 2x less memory than RustFFT, which is important for processing large datasets. ## What's with the name?