使用时缓慢fftn在gpu的性能在一个循环

2视图(30天)
我刚刚意识到fftn操作在一个循环的执行时间不是循环的长度成正比,当工作在GPU。
作为一个例子,如果我在GPU中定义一个多维数据集
= gpuArray(的(256256256,“单一”));
我看到用户时间不规模的数量在一个循环中。温和的循环我读:
> > N = 100;抽搐;i = 1: N; g = fftn(一个);结束toc;
运行时间是0.008618秒。
…但对于一个循环,是10倍
> > N = 1000;抽搐;i = 1: N; g = fftn(一个);结束toc;
运行时间是7.299844秒。
的总时间不规模10但到1000年! ! ! !我知道tic和toc并不是最好的方法来测量性能,但它仍然是程序的用户所看到的时间……有一些基本的原则处理gpuArrays内部循环,我错过什么?
2的评论
Arabarra
Arabarra 2019年10月15日
完整的代码都是上面三行……不确定你是什么意思

登录置评。

接受的答案

Edric埃利斯
Edric埃利斯 2019年10月10日
各种方法在GPU异步操作在某种程度上。但有限制,这取决于可用的内存数量等。GPU操作时间的最佳方式是使用 gputimeit 像这样:
= gpuArray(的(256256256,“单一”));
%基本情况,没有循环
fftn t1 = gputimeit (@ () ());
%循环情况下
t100 = gputimeit (@ () iLoop (, 100));
t1000 = gputimeit (@ () iLoop (, 1000));
%比较结果
disp ([t1, t100/100 t1000/1000])
函数iLoop (N)
i = 1: N
fftn(一个);
结束
结束
在我的机器上,我看到结果——即是一致的。 gputimeit 很好地得到一个精确的时间甚至一个电话 fftn 。运行上面的脚本,我得到的结果是:
> >再生产
0.0081 0.0081 0.0081
3评论
Arabarra
Arabarra 2020年4月29日
谢谢你的回答!设备上等待命令给了我发现我的算法的关键是创建一个隐藏的瓶颈。

登录置评。

更多的答案(0)

类别

找到更多的在GPU计算帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!