[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