[SciPy-dev] djbfft - The fastest FFT in the universe ;)
Pearu
pearu at scipy.org
Fri Aug 23 06:27:25 EDT 2002
Hi,
I have found a fft library djbfft by D. J. Bernstein that is even faster
than FFTW. I have implemented its (currently optional) support to
fftpack2.
djbfft provides power-of-2 FFT for single/double real/complex data.
Therefore, djbfft must live with some other fft library that would provide
non-power-of-2 FFT. However, there is upto 1.7 times speed improvement for
power-of-2 FFTs when using djbfft.
djbfft home page is at
http://cr.yp.to/djbfft.html
Eric, can you check if there are any license issues with djbfft that
would prevent us including it to scipy?
At least to me it is not clear if djbfft is in public domain or not? The
author notes that "djbfft can be used in my own code" but he does not
specify if it can be distributed in a package like scipy. See also
relevant notes in
http://cr.yp.to/distributors.html
but the link above does not mention djbfft.
Here are the latest testing results (only with complex input):
fftpack2 = f2py interface to fftpack
FFT = f2c version of fftpack (from NumPy)
scipy = current scipy interface to Fortran fftpack
Fast Fourier Transform
==================================
size |fftpack2 | FFT | scipy | fftw2
100 | 0.36 | 0.39 | 0.37 | skipped (secs for 7000 calls)
1000 | 0.56 | 0.63 | 0.53 | skipped (secs for 2000 calls)
256 | 0.60 | 0.74 | 0.61 | skipped (secs for 10000 calls)
512 | 0.96 | 1.29 | 0.98 | skipped (secs for 10000 calls)
1024 | 0.17 | 0.25 | 0.17 | skipped (secs for 1000 calls)
2048 | 0.35 | 0.49 | 0.35 | skipped (secs for 1000 calls)
4096 | 0.52 | 0.70 | 0.52 | skipped (secs for 500 calls)
8192 | 2.50 | 2.83 | 2.59 | skipped (secs for 500 calls)
fftpack2 = djbfft & fftpack
Fast Fourier Transform
==================================
size |fftpack2 | FFT | scipy | fftw2
100 | 0.37 | 0.39 | 0.37 | skipped (secs for 7000 calls)
1000 | 0.57 | 0.63 | 0.53 | skipped (secs for 2000 calls)
256 | 0.57 | 0.74 | 0.61 | skipped (secs for 10000 calls)
512 | 0.81 | 1.28 | 0.97 | skipped (secs for 10000 calls)
1024 | 0.14 | 0.25 | 0.17 | skipped (secs for 1000 calls)
2048 | 0.27 | 0.58 | 0.35 | skipped (secs for 1000 calls)
4096 | 0.42 | 0.70 | 0.51 | skipped (secs for 500 calls)
8192 | 1.40 | 2.99 | 2.66 | skipped (secs for 500 calls)
.
fftpack2 = djbfft & fftw
Fast Fourier Transform
==================================
size |fftpack2 | FFT | scipy | fftw2
100 | 0.35 | 0.39 | 0.37 | skipped (secs for 7000 calls)
1000 | 0.47 | 0.63 | 0.53 | skipped (secs for 2000 calls)
256 | 0.57 | 0.74 | 0.61 | skipped (secs for 10000 calls)
512 | 0.82 | 1.29 | 0.98 | skipped (secs for 10000 calls)
1024 | 0.14 | 0.25 | 0.17 | skipped (secs for 1000 calls)
2048 | 0.27 | 0.48 | 0.35 | skipped (secs for 1000 calls)
4096 | 0.42 | 0.71 | 0.52 | skipped (secs for 500 calls)
8192 | 1.49 | 2.95 | 2.57 | skipped (secs for 500 calls)
Regards,
Pearu
More information about the SciPy-Dev
mailing list