Fast Fourier Transforms

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

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