Python interface (GPU)

Quick-start examples

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 pycuda library. 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). Now f is a size-N array containing the NUDFT of c at the points x.

Other possible calculations are possible by supplying different options during plan creation. See the full API documentation below for more information.

Full documentation