我想知道fft和使用Matlab在GPU上简单添加的性能差异有多大。我希望fft在GPU上比简单的加法要慢。但为什么情况会相反呢?有什么建议吗?
a=rand(2.^20,1);
a=gpuArray(a);
b=gpuArray(0);
c=gpuArray(1);
tic % should take a long time
for k=1:1000
fft(a);
end
toc % Elapsed time is 0.085893 seconds.
tic % should be fast, but isn't
for k=1:1000
b=b+c;
end
toc % Elapsed time is 1.430682 seconds.同样有趣的是,如果我减少vetor a的长度,那么加法(第二循环)的计算时间就会减少。
编辑
如果我改变了这两个循环的顺序,也就是说,如果首先完成加法,那么加法需要0.2秒,而不是1.4秒。FFT的时间仍然相同。
发布于 2013-01-25 14:48:55
我猜Matlab实际上并没有运行fft,因为输出在任何地方都没有使用。而且,在简单的加法循环中,每个迭代都依赖于前面的迭代,因此必须按顺序运行。
我不知道为什么循环的顺序很重要。也许这与清理第一个循环后的GPU内存有关。您可以尝试在循环之间调用pause(1),让计算机在第二个循环之前回到空闲状态。这可能会使你的时间更加一致。
发布于 2013-02-01 16:47:48
我没有一个带有GPU的2012 b MATLAB来检查这一点,但我认为您缺少了wait()命令。在2012年a,MATLAB引入了异步GPU计算。因此,当您向GPU发送一些东西时,它不会等到它完成后才在代码中继续。试试这个:
mygpu=gpuDevice(1);
a=rand(2.^20,1);
a=gpuArray(a);
b=gpuArray(0);
c=gpuArray(1);
tic % should take a long time
for k=1:1000
fft(a);
end
wait(mygpu); %Wait until the GPU has finished calculating before moving on
toc
tic % should be fast
for k=1:1000
b=b+c;
end
wait(mygpu); %Wait until the GPU has finished calculating before moving on
toc加法的计算时间不应再取决于何时执行。能帮我查一下然后再联系我吗?
https://stackoverflow.com/questions/14521224
复制相似问题