首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab GPU性能fft与简单加法

Matlab GPU性能fft与简单加法
EN

Stack Overflow用户
提问于 2013-01-25 11:49:35
回答 2查看 943关注 0票数 2

我想知道fft和使用Matlab在GPU上简单添加的性能差异有多大。我希望fft在GPU上比简单的加法要慢。但为什么情况会相反呢?有什么建议吗?

代码语言:javascript
复制
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的时间仍然相同。

EN

回答 2

Stack Overflow用户

发布于 2013-01-25 14:48:55

我猜Matlab实际上并没有运行fft,因为输出在任何地方都没有使用。而且,在简单的加法循环中,每个迭代都依赖于前面的迭代,因此必须按顺序运行。

我不知道为什么循环的顺序很重要。也许这与清理第一个循环后的GPU内存有关。您可以尝试在循环之间调用pause(1),让计算机在第二个循环之前回到空闲状态。这可能会使你的时间更加一致。

票数 1
EN

Stack Overflow用户

发布于 2013-02-01 16:47:48

我没有一个带有GPU的2012 b MATLAB来检查这一点,但我认为您缺少了wait()命令。在2012年a,MATLAB引入了异步GPU计算。因此,当您向GPU发送一些东西时,它不会等到它完成后才在代码中继续。试试这个:

代码语言:javascript
复制
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

加法的计算时间不应再取决于何时执行。能帮我查一下然后再联系我吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14521224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档