Large discrepency between CPU and GPU with fftn and ifftn?
Afficher commentaires plus anciens
Hello,
I am using a GPU to compute multipul 3D FFTs. I've come across a problem where the output I am recieving from the GPU FFT is vastly different in terms of shape and values. I am unsure why this is the case and if there is any way to mitigate this problem.
I have included a small portion of code where data is generated, and the fftn and ifftn are applied to this data. Below the code are surface plots which show the difference in output. Is there a method that can be applied to where the output from the GPU FFT will be closer to the output of the CPU FFT?
N = 128;
x = (pi/4).*(0:N-1);
z = (3*pi/4).*(0:N-1);
tol = 1.0e-8;
kx = [tol 1:N/2 -N/2+1:-1].*2.*pi.*(1i)./N;
[X,Y,Z] = ndgrid(x,x,z);
X = cos(2.*pi.*X./(32*pi));
Y = cos(2.*pi.*Y./(32*pi));
Z = exp(-(Z-(48*pi)).^2./100./(96*pi));
A = 4.*Z.*(Y+1i.*X);
%% What the output should look like
A0 = A;
A0 = fftn(A0);
A0 = A0.*kx';
A0(1,:,:) = 0;
A0 = ifftn(A0);
A0 = real(A0);
A01 = squeeze(A0(:,:,64));
subplot(1,2,1)
surf(A01)
title('CPU')
%% GPU output is signigicantly different
A1 = gpuArray(A);
A1 = fftn(A1);
A1 = A1.*kx';
A1(1,:,:) = 0;
A1 = ifftn(A1);
A1 = real(A1);
A11 = squeeze(A1(:,:,64));
subplot(1,2,2)
surf(A11)
title('GPU')
%% Compares output of both
max(abs(A0-A1),[],'all')

2 commentaires
David Goodmanson
le 23 Mai 2020
Hi Nathan,
in your definition of A11, could you explain why you have VM on the right hand side in place of A1?
Nathan Zechar
le 25 Mai 2020
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Fourier Analysis and Filtering dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!