Complete list of C/C++ FFT libraries

All listed libraries support forward/backward, complex-to-complex, and real-to-complex transforms unless otherwise noted. I won’t include benchmarks for performance or accuracy because your application’s usage will vary.

Library Date of first release License Implementation Types Dims Andrew’s notes
CPU libraries
FFTW 1997 GPLv2+ or commercial C generated with OCaml double, single, long double, quad 1-N Large dependency but included on most Linux distros. Very fast, very accurate.
KISS FFT 2003 BSD C any with macro 1-2
pffft 2011 FFTPACK, similar to BSD C single 1 Written by Julien Pommier, co-developer of Pianoteq. Currently used by VCV Rack. Very fast given its small size, due to manual SIMD up to AVX.
marton78’s pffft fork 2015 same as pffft C single, double 1
pocketfft 2018 BSD C double 1
pocketfft C++ 2019 BSD C++ header-only any via templates 1-N No state needed, uses global caching instead. 2+ dimension supports C++ multithreading. Now used by Numpy/Scipy.
FFTS 2001 BSD C single 1-N
ffmpeg libavcodev 2000 GPLv2.1+ C single, fixed-32 1 Initially written by Fabrice Bellard.
Ooura’s FFT 1996 custom open-source C and Fortran77 versions double 1
FFTE 2000 custom open-source Fortran77 and Nvidia CUDA (GPU) ? 1-3
FFTReal 1999 WTFPL C++ any via templates 1-N
FFTPACK 1982 public domain Fortran translated to C single 1 Grandfather of many other FFT libraries. Included for history, not recommended for modern use.
KFR 2016 GPLv2+ or commercial C++ any via templates 1 Includes many other DSP routines.
GNU Scientific Library 1996 GPLv3 C double 1 Includes many other numerical routines.
Intel MKL 2003 freeware ? single, double 1-N Probably the fastest on this list for Intel CPUs.
Apple vDSP ~2001 freeware ? single, double 1-2 Only for Apple Mac.
muFFT 2015 MIT C single 1-2
meow_fft 2017 0-Clause BSD C header-only single 1
wareya fft 2017 public domain C header-only double 1 No real-to-complex.
dj_fft (for CPU) 2019 public domain or MIT C++ header-only any via templates 1-3 No real-to-complex.
minfft 2018 MIT C single, double, long double 1-3
GPU libraries
cuFFT ? freeware Nvidia CUDA (GPU) single, double 1-N
clFFT 2013 Apache-2.0 OpenCL (GPU) single, double 1-N
GLFFT 2015 MIT OpenGL GLSL (GPU) single, half-single 1-2
dj_fft (for GPU) 2019 public domain or MIT C++ header-only, OpenGL GLSL (GPU) single 1-3 No real-to-complex.
Distributed memory libraries
FFTW++ 2004 GPLv3+ C++ double? 1-3
fftMPI <=2018 BSD C++ single, double 2-3 1D FFTs computed by FFTW, MKL, or KISS FFT.
AccFFT 2015 GPLv2+ C++ double 1-3
SWFFT 2017 custom open-source C++
P3DFFT
pfft

Comment below or email contact@vcvrack.com for corrections or to recommend a missing library.

7 Likes

Cool list, I found it interesting to learn that Julien Pommier (co)developed both pffft and Pianoteq… I use both and never realized! Off-topic, but Pianoteq is some seriouly awesome modeling, it’s incredible that those sounds are not sampled. :musical_keyboard:

2 Likes