Skip to content

Platforms and limits ​

Which transform works on which number type and platform. ✓ means implemented and covered by the test suite; ◐ means implemented but not tuned or not tested on that platform; – means not available.

Transforms ​

transformCPU, Float32/Float64CPU, other AbstractFloats (BigFloat, Double64, Float128)GPU (KernelAbstractions)libfftl
complex DFT (fft, bfft, ifft)✓ threads, SIMD✓ one thread✓ tuned on Metal, measured on CUDA✓
real input rfft, irfft, brfft✓✓✓ at about complex speed✓ r2c, c2r, also in place and split
DCT-II, the orthonormal dct/idct✓✓✓✓
DCT-I, DCT-III, DCT-IV✓✓◐ partly tuned✓
DST-II✓✓✓✓
DST-I, DST-III, DST-IV✓✓◐ partly tuned✓
DHT, R2HC, HC2R✓✓◐ not tuned✓
batched 1D passes (plan_pass, plan_r2r_pass) with pruning✓–––
any rank and any subset of dimensions✓✓✓✓
any length (Bluestein above prime factor 31)✓✓✓✓

Platforms ​

platformstatus
Apple M1 Max (arm64, macOS)development machine; codelets use the FCADD/FCMLA complex instructions; GPU via Metal
AMD EPYC 7763 (Zen 3, x86-64 with AVX2, Linux)x86-64 development machine
AMD EPYC 7702 (Zen 2, x86-64 with AVX2, Linux)x86-64 machine of the benchmarks
Intel Core i7-1185G7 (Tiger Lake, x86-64 with AVX-512, Linux)512-bit kernels tested; radix rules not retuned for AVX-512
Linux and macOS in CIquick tests on every push to main and on pull requests; full tests weekly
NVIDIA RTX A6000GPU via CUDA, measured against cuFFT
AMD, Intel GPUsnot tested
Windowsnot tested

Julia versions ​

version
the packageJulia 1.10 and newer (weekly CI on 1.10)
the libfftl buildJulia 1.12 and newer with juliac

Limits ​

quantitylimit
element types, complexComplexF32, ComplexF64; any Complex{T} with T a floating-point type on the generic path
element types, realFloat32, Float64, and every other AbstractFloat on the generic path; Float16 and integers are converted
rankany
length of a dimensionany; memory is the limit
threadsThreads.nthreads() by default; a plan may use fewer
transforms on the GPUout of place; a plan holds about two buffers of the array's size
libfftl precisionfloat and double (FFTW3's fftw_ and fftwf_ functions; no fftwl_, fftwq_)
libfftl interfaceFFTW3's C, legacy Fortran and Fortran 2003 interfaces; layouts other than one contiguous array are copied
libfftl threadsfixed at build time

Numbers that are not in this table, such as the largest transform that fits on a particular machine, depend on the machine and are reported with the benchmarks.