How to execute fft's with gpu,cuda in parallel (spmd)?
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Edric Ellis
2013-6-12
MATLAB's FFT function can operate along any single dimension. So you can simply do:
data_device = fft(data_device, [], 3);
3 个评论
Ben Tordoff
2013-6-17
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.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 GPU Computing in MATLAB 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!