How do I perform muliple FFTs on a stack of data in parallel on a GPU?

조회 수: 5 (최근 30일)
Adam
Adam 2013년 3월 18일
Hi, I have a stack of images, and I want to compute the 2d fourier-transform of each image in parallel. For example, if I was not using a GPU, I would be doing something like this:
A = rand(256,256,100);
B = zeros(256, 256, 100);
for j = 1:100
B(:,:,j) = fftshift(fft2(A(:,:,j)));
end;
I would like to do each iteration of this for-loop in parallel. Is there a way to do that using gpuArray and arrayfun, or do I have to define my own cuda kernel?

답변 (1개)

Edric Ellis
Edric Ellis 2013년 3월 18일
FFT2 in MATLAB already applies to each 'page' of a 3-dimensional array, and this is true on the GPU too. Unfortunately, FFTSHIFT doesn't work that way, so you need something like this:
A = gpuArray.rand(256, 256, 100);
B = fftshift(fftshift(fft2(A), 1), 2);
  댓글 수: 1
Adam
Adam 2013년 3월 18일
Thanks for your help! This definitely makes things very simple! Out of curiosity, is there a standard way of independently processing multiple independent 'pages' simultaneously by some arbitrary function? For example, if I have a function:
b = myfun(a)
where b and a are both n-by-n, how would I use arrayfun to apply 'myfun' to each page of a n-by-n-by-m gpuArray, (thus returning another 3D gpuArray)?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 GPU Computing에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by