Fourier Transforms
AMDGPU.jl implements the AbstractFFTs.jl interface on top of AMD's rocFFT, so fft, ifft, rfft, and the planning API work on ROCArray just as they do on the CPU. Load AbstractFFTs (or a package that re-exports it, such as FFTW) alongside AMDGPU:
julia
using AMDGPU
using AbstractFFTs
x = ROCArray(ComplexF32[1, 2, 3, 4])
y = fft(x) # forward transform on the GPU
z = ifft(y) # z ≈ xReal-to-complex transforms are available through rfft:
julia
xr = AMDGPU.rand(Float32, 1024)
yr = rfft(xr) # length 513 complex outputPlans
For repeated transforms of the same size, create a plan once and reuse it to amortize setup cost. Both out-of-place and in-place plans are supported:
julia
x = ROCArray(rand(ComplexF32, 1024))
p = plan_fft(x) # out-of-place
y = p * x
p! = plan_fft!(x) # in-place, overwrites its argument
p! * xMultidimensional transforms and transforms over selected dimensions work as usual, e.g. fft(x, (1, 2)) for a 2D transform of a higher-dimensional array.