Python interface (GPU)¶
As mentioned in the Python GPU installation instructions, the easiest way to install the Python interface for cuFINUFFT is to run
pip install cufinufft.
Assuming cuFINUFFT has been installed, we will now consider how to calculate a 1D type 1 transform.
To manage the GPU and transfer to and from host and device, we will use the
Consequently, we start with a few import statements.
import numpy as np import pycuda.autoinit from pycuda.gpuarray import to_gpu import cufinufft
We then proceed to setting up a few parameters.
# number of nonuniform points M = 100000 # grid size N = 200000 # generate positions for the nonuniform points and the coefficients x = 2 * np.pi * np.random.uniform(size=M) c = (np.random.standard_normal(size=M) + 1J * np.random.standard_normal(size=M))
Now that the data is prepared, we need to set up a cuFINUFFT plan that can be executed on that data.
# create plan plan = cufinufft.Plan(1, (N,), dtype=np.float64) # set the nonuniform points plan.setpts(to_gpu(x))
With everything set up, we are now ready to execute the plan.
# execute the plan f_gpu = plan.execute(to_gpu(c)) # move results off the GPU f = f_gpu.get()
The last line is needed here to copy the data from the device (GPU) to the host (CPU).
f is a size-
N array containing the NUDFT of
c at the points
Other possible calculations are possible by supplying different options during plan creation. See the full API documentation below for more information.