[SciPy-dev] fftpack2 for review

eric jones eric at enthought.com
Mon Sep 30 16:48:24 CDT 2002


Hey Pearu,

I'll look at this tonight.

Thanks,
eric

> -----Original Message-----
> From: scipy-dev-admin at scipy.net [mailto:scipy-dev-admin at scipy.net] On
> Behalf Of Pearu Peterson
> Sent: Saturday, September 28, 2002 3:54 PM
> To: scipy-dev at scipy.org
> Subject: [SciPy-dev] fftpack2 for review
> 
> 
> Dear SciPy devels,
> 
> Please find a scipy.fftpack replacement candidate fftpack2 from
> 
>   http://cens.ioc.ee/~pearu/misc/fftpack2-0.1.tar.gz
> 
> for review. fftpack2 main features include:
> 
>   - Optional support for high-performance FFT libraries such as FFTW
and
>     DJBFFT libraries. By default, Fortran FFTPACK is used and other
>     libraries are automatically detected by
>     the scipy_distutils/system_info.py script.
> 
>   - Support for both real and complex DFT's and their inverse
>     transforms. When used with FFTW and/or DJBFFT libraries then
fftpack2
>     routines are considerably faster than Numeric.FFT and the current
>     scipy.fftpack.
>     Some comparison timings are included at the end of this message.
> 
>   - Implementation of differentiation and integration of periodic
>     sequences, various pseudo-differential operators such as Tilbert
>     transform, Hilbert transform, hyperbolic pseudo-differential
>     operators, their inverses, etc.
> 
>   - Because different FFT libraries use different data storage
convention,
>     fftpack2 implements interface to these conventions so that users
>     and developers need not to learn all these conventions, just
>     one is enough. Namely, fftpack2 uses the same data storage
>     specification as Fortran FFTPACK (also used by Numeric.FFT and
>     Matlab, though with somewhat different formal definitions).
> 
>   - Generic convolution routines that allow quick and easy way of
>     introducing new pseudo-differential operators with the same
>     performance as core pseudo-differential operators.
> 
>   - All functions have complete documentation strings.
> 
>   - A rather complete testing site.
> 
> Note that fftpack2 requires the latest F2PY that you can get from
> 
>   http://cens.ioc.ee/projects/f2py2e/2.x/F2PY-2-latest.tar.gz
> 
> For testing, fftpack2 uses scipy_test from SciPy CVS repository.
> 
> For building/testing instructions and for various notes, including
open
> questions, see NOTES.txt file after unpacking fftpack2-0.1.tar.gz.
> 
> As usual, comments, suggestions, and criticism are most welcome.
> 
> Regards,
> 	Pearu
> 
> -------------------------------
> fftpack2 timing results:
> -------------------------------
>                  Fast Fourier Transform
> ========================================================
>       |       real input       |       complex input
> --------------------------------------------------------
>  size |fftpack2|  FFT  | scipy |fftpack2|  FFT  | scipy
> --------------------------------------------------------
>   100 |   0.38 |  0.39 |  0.38 |   0.40 |  0.40 |  0.38 (secs
> for7000calls)
>  1000 |   0.31 |  0.63 |  0.60 |   0.54 |  0.64 |  0.61  (secs for
2000
>   256 |   0.60 |  0.75 |  0.62 |   0.71 |  0.78 |  0.66  (secs for
10000
>   512 |   0.77 |  1.30 |  1.00 |   0.95 |  1.30 |  1.01  (secs for
10000
>  1024 |   0.14 |  0.26 |  0.18 |   0.17 |  0.25 |  0.19  (secs for
1000
>  2048 |   0.21 |  0.51 |  0.36 |   0.34 |  0.65 |  0.54  (secs for
1000
>  4096 |   0.28 |  1.08 |  0.66 |   0.56 |  0.93 |  0.79  (secs for 500
>  8192 |   1.09 |  3.88 |  3.94 |   2.19 |  4.36 |  3.48  (secs for 500
> 
>           Inverse Fast Fourier Transform
> ========================================================
>       |       real input       |        complex input
> --------------------------------------------------------
>  size |fftpack2|  FFT  | scipy |fftpack2|  FFT  | scipy
> --------------------------------------------------------
>   100 |   0.17 |  0.26 |  0.63 |   0.45 |  0.87 |  0.85  (secs for
7000
>  1000 |   0.34 |  1.24 |  1.25 |   0.72 |  1.29 |  1.29  (secs for
2000
>   256 |   0.62 |  1.57 |  1.44 |   0.69 |  1.62 |  1.47  (secs for
10000
>   512 |   0.80 |  2.69 |  2.30 |   1.00 |  2.62 |  2.20  (secs for
10000
>  1024 |   0.12 |  0.51 |  0.41 |   0.18 |  0.54 |  0.44  (secs for
1000
>  2048 |   0.23 |  1.16 |  1.09 |   0.40 |  1.33 |  1.27  (secs for
1000
>  4096 |   0.35 |  1.75 |  1.44 |   0.63 |  1.72 |  1.54  (secs for 500
>  8192 |   1.34 |  5.71 |  6.02 |   2.40 |  6.14 |  5.67  (secs for 500
> 
>       Multi-dimensional Fast Fourier Transform
> ========================================================
>           |       real input       |       complex input
> --------------------------------------------------------
>    size   |fftpack2|  FFT  | scipy |fftpack2|  FFT  | scipy
> --------------------------------------------------------
>   100x100 |   0.43 |  0.87 |  0.81 |   0.48 |  0.88 |  0.82  (secs for
100
>  1000x100 |   0.54 |  0.78 |  0.72 |   0.56 |  0.73 |  0.75  (secs for
7
>   256x256 |   0.69 |  0.72 |  0.62 |   0.67 |  0.72 |  0.64  (secs for
10
>   512x512 |   0.81 |  0.91 |  0.84 |   0.81 |  0.87 |  0.81  (secs for
3
> 
> Fast Fourier Transform (real data)
> ==================================
>  size |fftpack2|  FFT  | scipy
> ----------------------------------
>   100 |   0.36 |  0.47 |  0.47  (secs for 7000 calls)
>  1000 |   0.29 |  0.38 |  0.38  (secs for 2000 calls)
>   256 |   0.55 |  0.76 |  0.81  (secs for 10000 calls)
>   512 |   0.67 |  1.06 |  1.07  (secs for 10000 calls)
>  1024 |   0.10 |  0.18 |  0.17  (secs for 1000 calls)
>  2048 |   0.16 |  0.30 |  0.30  (secs for 1000 calls)
>  4096 |   0.20 |  0.37 |  0.32  (secs for 500 calls)
>  8192 |   0.75 |  1.29 |  1.26  (secs for 500 calls)
> 
> Inverse Fast Fourier Transform (real data)
> ==================================
>  size |fftpack2|  FFT  | scipy
> ----------------------------------
>   100 |   0.39 |  0.90 |  0.92  (secs for 7000 calls)
>  1000 |   0.32 |  0.63 |  0.70  (secs for 2000 calls)
>   256 |   0.59 |  1.37 |  1.39  (secs for 10000 calls)
>   512 |   0.73 |  1.70 |  1.80  (secs for 10000 calls)
>  1024 |   0.11 |  0.27 |  0.27  (secs for 1000 calls)
>  2048 |   0.20 |  0.45 |  0.44  (secs for 1000 calls)
>  4096 |   0.24 |  0.65 |  0.68  (secs for 500 calls)
>  8192 |   0.73 |  1.98 |  2.06  (secs for 500 calls)
> 
> 
>  Shifting periodic functions
> ==============================
>  size  | optimized |    naive
> ------------------------------
>    100 |      0.09 |      0.52  (secs for 1500 calls)
>   1000 |      0.06 |      0.66  (secs for 300 calls)
>    256 |      0.10 |      0.84  (secs for 1500 calls)
>    512 |      0.10 |      1.02  (secs for 1000 calls)
>   1024 |      0.07 |      1.07  (secs for 500 calls)
>   2048 |      0.06 |      0.80  (secs for 200 calls)
>   4096 |      0.00 |      0.86  (secs for 100 calls)
>   8192 |      0.13 |      1.23  (secs for 50 calls)
> 
> Differentiation of periodic functions
> =====================================
>  size  |  convolve |    naive
> -------------------------------------
>    100 |      0.09 |      0.59  (secs for 1500 calls)
>   1000 |      0.06 |      0.75  (secs for 300 calls)
>    256 |      0.11 |      0.97  (secs for 1500 calls)
>    512 |      0.09 |      1.21  (secs for 1000 calls)
>   1024 |      0.08 |      1.19  (secs for 500 calls)
>   2048 |      0.06 |      1.11  (secs for 200 calls)
>   4096 |      0.09 |      1.19  (secs for 100 calls)
>   8192 |      0.14 |      1.48  (secs for 50 calls)
> 
>  Tilbert transform of periodic functions
> =========================================
>  size  | optimized |    naive
> -----------------------------------------
>    100 |      0.09 |      0.54  (secs for 1500 calls)
>   1000 |      0.06 |      0.60  (secs for 300 calls)
>    256 |      0.10 |      0.77  (secs for 1500 calls)
>    512 |      0.09 |      0.89  (secs for 1000 calls)
>   1024 |      0.07 |      0.90  (secs for 500 calls)
>   2048 |      0.05 |      0.83  (secs for 200 calls)
>   4096 |      0.07 |      0.92  (secs for 100 calls)
>   8192 |      0.11 |      1.04  (secs for 50 calls)
> .
>  Hilbert transform of periodic functions
> =========================================
>  size  | optimized |    naive
> -----------------------------------------
>    100 |      0.09 |      0.47  (secs for 1500 calls)
>   1000 |      0.06 |      0.48  (secs for 300 calls)
>    256 |      0.10 |      0.68  (secs for 1500 calls)
>    512 |      0.09 |      0.77  (secs for 1000 calls)
>   1024 |      0.07 |      0.74  (secs for 500 calls)
>   2048 |      0.06 |      0.72  (secs for 200 calls)
>   4096 |      0.07 |      0.79  (secs for 100 calls)
>   8192 |      0.11 |      0.93  (secs for 50 calls)
> 
> 
> _______________________________________________
> Scipy-dev mailing list
> Scipy-dev at scipy.net
> http://www.scipy.net/mailman/listinfo/scipy-dev




More information about the Scipy-dev mailing list