[SciPy-Dev] NUFFT
Ghislain Vaillant
ghisvail at gmail.com
Mon Mar 2 06:53:21 EST 2015
I have used both libs extensively during my PhD, and made Python wrappers
for them [1, 2]. I am also involved with upstream NFFT development so I can
give you a bit more insights regarding the difference between the two.
NUFFT is a Fortran implementation of a fast algorithm for computing the
convolution part of the accelerated NUFT. For that, is uses a Gaussian
kernel which offers a nice trade-off between memory foot-print and
performance. The accuracy / speed trade-off is defined by a single
parameter (eps), which automatically choose the appropriate width of the
kernel and size of the oversampled convolution grid. The implementation is
serial, with no way to re-use past computed problems AFAIK.
NFFT on the other hand replicates the design of FFTW, i.e. a plan data
structure holds the precomputed internals of the problem and is passed to
execution routines (trafo / adjoint in NFFT, execute_dft in FFTW). By
default, the NFFT uses a Kaiser-Bessel kernel and difference pre-allocation
strategies may be used. The control over the NUFT problem parameters is
more granular and plans can be re-used once pre-allocated, which leads to
better performance with repeated computations. OpenMP can also be used to
speed things up.
NUFFT is now BSD licensed. NFFT is GPLv2. I spoke with the upstream devs on
the subject a while back, and they had no intentions to use a more
permssive license in the future.
Hope that helps,
Ghis
[1] NUFFT: https://github.com/ghisvail/nufft-f2py
[2] NFFT: https://github.com/ghisvail/pyNFFT
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20150302/45b97a99/attachment.html>
More information about the SciPy-Dev
mailing list