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.

8 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:

3 Likes

An addition

Ah, that one’s a classic. Didn’t realize AMD had adopted it. It always won races for “the fastest” FFT. But to get the very fasted you had to build and optimize it on the target CPU. It probably has some mode where you don’t need to that, but it was always a pretty big and intimidating package.