Fast Fourier Transforms form a common kernel in CCP and HEC codes. The 2012 PRACE survey of FFT codes focussed on MPI codes. As part of this work package, we will update the guidance from this survey and also consider the requirements of codes that use other parallelism methods or have specific license needs.
Reports
- Comparison of several FFT libraries in C/C++, P. Gambron and H. S. Thorne, Technical Report RAL-TR-2020-003, 2020 Citation Details
FFT libraries and their attributes
Data types key: R = real, C = complex, H = half-complex
Uniform Fast Fourier Transform Libraries:
In the following table, a, b, c, d, e, f are non-negative integers.
Name | Data types | No. dimensions | Radices (ri) | No. points (1D) | Parallelism | Bindings | License |
AccFFT | R → H C → C |
3 | Any | OpenMP, MPI, CUDA | C++ | GPL v2 | |
clFFT | R → H C → C H → R |
1, 2, 3 | 2, 3, 5, 7 | 2a * 3b * 5c * 7d | OpenCL | C | Apache v2.0 |
cuFFT | R → H C → C H → R |
1, 2, 3 | 2, 3, 5, 7 | Any but optimised for 2a * 3b * 5c * 7d | CUDA | C | Closed source, freely downloadable |
DaFT | C → C | 1, 3 | 2, 3, 5 | 2a * 3b * 5c | MPI | Fortran | Free for academics but part of DL_POLY |
FFTE | R → H C → C H → R |
1, 2, 3 | 2, 3, 5 | 2a * 3b * 5c | OpenMP, MPI, CUDA | Fortran | Open source |
FFTW | R → H C → C H → R R(even/odd) → R |
Any | 2, 3, 5, 7, 11, 13 + any if code generator used | Any but optimised for 2a * 3b * 5c * 7d * 11e * 13f with e+f = 0 or 1 | Multithreading, MPI | C, Fortran, pyFFTW Python wrapper available | GPL v2 but unlimited-use licensed version from MIT available to purchase |
GSL | R → H C → C H → R |
1 | 2, 3, 4, 5, 6, 7 | Any but optimised for 2a * 3b * 4c * 5d * 6e * 7f | – | C | GPL v3 |
MKL | R → H C → C H → R |
Any | Any | Multithreading, MPI | C, C++, Fortran | Intel Simplified Software License | |
Numpy | R → H C → C H → R |
Any | Any | Multithreading available when linked to multithreaded BLAS and LAPACK implementations | Python | Open Source. Any use permitted but must be distributed with their copyright notice | |
P3DFFT | R→ H H → R |
3 | Any | OpenMP, MPI | C, C++, Fortran90 | GPL v3 | |
P3DFFT++ | R → H C → C H → R R(even/odd) → R |
1, 3 | Any | MPI | C, C++, Fortran90 | GPL v3 |
Non-uniform Fast Fourier Transform Libraries:
Name | Data types | No. dimensions | Non-Uniform FFT Types | No. points (1D) | Parallelism | Bindings | License |
FINUFFT | C →C | 1,2,3 | 1,2,3 | Any | OpenMP | C++, C, Fortran, Julia, MATLAB, octave, and python |
Apache v2.0 |
NFFT | C →C | Any | 1,2,3 | Any | – | C, MATLAB, octave | GPL v2 |
PNFFT | C →C | 3 | 1,2,3 | Any | MPI | C | GPL v2 |
NUFFT | C →C | 1,2,3 | 1,2,3 | Any | – | Fortran90, MATLAB | GPL or FreeBSD depending on version of NUFFT |