使用时缓慢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内部循环,我错过什么?
接受的答案
Edric埃利斯
2019年10月10日
= 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