FFTA.jl vs FFTW.jl Performance Benchmark Report
Note: This benchmark compares FFTA.jl (a pure Julia FFT implementation) against
FFTW.jl (Julia bindings to the FFTW C library). Each package was benchmarked in a separate
Julia process to ensure isolation and prevent interference.
Benchmark Configuration
Benchmarking Tool: BenchmarkTools.jl
Samples per size: 100
Evaluations per sample: 10
FFT Types: Complex FFT (ComplexF64) and Real FFT (Float64)
Total array sizes tested: 55
Report generated: 2026-01-19T16:42:39.909
Array Size Categories
- Odd Powers of 2: 2¹, 2³, 2⁵, 2⁷, 2⁹, 2¹¹, 2¹³, 2¹⁵ (2, 8, 32, 128, 512, 2048, 8192, 32768)
- Even Powers of 2: 2², 2⁴, 2⁶, 2⁸, 2¹⁰, 2¹², 2¹⁴ (4, 16, 64, 256, 1024, 4096, 16384)
- Powers of 3: 3¹, 3², 3³, 3⁴, 3⁵, 3⁶, 3⁷, 3⁸, 3⁹ (3, 9, 27, 81, 243, 729, 2187, 6561, 19683)
- Composite: 3, 12, 60, 300, 2100, 23100 (cumulative products of 3,4,5,5,7,11)
- Primes: 20 logarithmically-spaced prime numbers up to 20,000
Performance Visualizations
Complex FFT (ComplexF64 → ComplexF64)
Runtime/N vs N (All Categories)
Absolute Runtime (All Categories)
Detailed Results - Complex FFT
Real FFT (Float64 → ComplexF64)
Real FFT: The real FFT (rfft) is optimized for real-valued input data and produces
approximately N/2+1 complex output values, exploiting the conjugate symmetry property. This makes it
roughly 2x faster and more memory-efficient than complex FFT for real-valued signals.
Runtime/N vs N (All Categories)
Absolute Runtime (All Categories)
Detailed Results - Real FFT
Interpretation
The plots show Runtime/N vs N, which normalizes the runtime by the array size.
For an optimal FFT implementation with O(N log N) complexity, this should scale as O(log N).
Key Observations:
- Powers of 2 typically show the best performance for FFT algorithms due to the Cooley-Tukey radix-2 algorithm
- Powers of 3 may use different factorization strategies
- Composite numbers test the FFT implementation's ability to handle general factorizations
- Real FFTs (rfft) exploit conjugate symmetry and are generally ~2x faster than complex FFTs for real-valued input
- FFTA.jl is a pure Julia implementation, while FFTW.jl wraps optimized C code
- Interactive plots allow zooming and hovering for detailed inspection