How to execute fft's with gpu,cuda in parallel (spmd)?
1 view (last 30 days)
Show older comments
I have IxJxL single type data volume. I want to execute 1-D fft's of L length IxJ times.
Win7-64,GFX670,MatlabR2012a
data_device = gpuArray(data);
Nested 'for' loop on GPU works slower than on CPU.
for ii = 1:I
for jj = 1:J
data_device(ii,jj,:) = fft(data_device(ii,jj,:));
end
end
'Parfor' works even slower than simple 'for' loop.
1 Is there a way to use spmd method on GPU alike its done on CPU? How?
2 What is the optimal size of data to be send to GPU, considering params gpuDevice() function retuns?
0 Comments
Accepted Answer
Edric Ellis
on 12 Jun 2013
MATLAB's FFT function can operate along any single dimension. So you can simply do:
data_device = fft(data_device, [], 3);
3 Comments
Ben Tordoff
on 17 Jun 2013
Hi Greg, assuming you mean a GTX670, it actually has 1344 cores (7 processors, each with 192 cores). However, you cannot address a core individually. Infact you can't even address a processor individually. You need to send the GPU one big operation to perform and let it work out how to split it over the heirarchy of symmetric multi-processors and the cores they contain.
Our recommendation is always to send as much work (and data) in a single command as you can.
More Answers (0)
See Also
Categories
Find more on GPU Computing in MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!