cufft库的效率

大家好,我的应用是做256x256的二维fft。我有两个问题问一下
(1) 我想问一下cufft的库的执行效率和用户自己写的fft的kernel的效率有多大差别?
(2)我看了最新的开普勒的GK110支持Shuffle instruction,请问一下cuda5.5中的cufft有没有用 Shuffle instruction,如果没有用的话,是不是自己写的kernel会不会有更大的提高呢?

楼主你好:

(1)我不懂FFT,因此无法为你提供建议。不过如果你是初学者的话,用写好的库一般会比你自己写的要快。你可以进一步咨询ICE版主是否知道cufft的更多信息,他是电磁专家。
(2)是否使用warp shuffle能更快则要看原本的瓶颈在哪里。warp shuffle对于需要在以warp(32个线程)或者小于32个线程为单位的原本需要通过shared memory进行数据交换的代码,能够起到一定的加速作用。如果原本的瓶颈在shared memory读写上,同时是warp或更小范围内的交换,则可以加速,反之则不能。而FFT变换是否瓶颈在shared memory上,这个我不清楚,因为无法给出确切的答案。

感谢来访。

ICE版主 可以回答一下我的问题吗?

ICE今日有酒场,目测醉酒中。

LZ您好:

我没有评估过cufft的效率如何,以及我也不专门研究fft,仅仅一般使用cufft这个库而已。
1:一般而言,库的效率还是不错的,不过不排除专门研究人员写出更好的FFT并行计算方法或者把FFT计算部分集成到自己的算法中,发挥综合优势。当然,自己写写的不如cufft也是有可能的。

2:这个不清楚,我不详细研究FFT的实现,无法回答是否使用Shuffle instruction能有效提升效率。以及,也无法回答CUDA 5.5中的CUFFT是否使用了Shuffle instruction,CUFFT是一个闭源的实现。如果您确实需要搞清楚这个问题,请向驻版的NV原厂支持人员求证。或者如果您使用Shuffle instruction实现了好得多的效率,那么可以联系NV原厂支持,看看能否在下一版将您的实现纳入cufft库,造福广大用户。

祝您好运~

好吧,谢谢ice版主

矩阵大小3052*3052,一次2D FFT变换时间(s)
1)0.009943
2)0.009158
3)0.009312
测试了三次,取均值就行,供参考。

(1)你是用cufft还是自己写的fft kernel?
(2)如果是自己写的kernel 可以帮我测试一下256行256列的二维fft是时间?

tengwl您好:

感谢您积极参与讨论!

如果您能同时提供您测试的硬件信息和软件信息,您的结果将更有参考价值。

再次感谢~

[
我用的cufft。

当时我自己写了一个CPU版本的,但不容易并行,可能与代码实现有关。

更正下:矩阵大小:3072*3072, 显卡:GTX660 Ti,OS:WIN 7 64bit

FFT也是我程序的瓶颈,我还查到另外两个FFT的CUDA实现库:
GPUFFTW和nufft,你可以google下。

据说nufft的性能比cufft快3倍,但那时cuda2.0的版本,到现在已经是CUDA5.5了,谁的性能好就不好说了,还没有测试。

感谢您提供上述信息,欢迎您常来论坛参与讨论!

tengwl你好:
cufft和nufft的的区别是什么?什么场合下用nufft呢?
我现在只知道nufft是非均匀采样fft,其他的就搞不懂了。你可以解释一下吗?

我只知道 nufft 也实现了fft功能,但是具体什么情况就不知道了,cufft是离散傅里叶变换,按你说的nufft的FFT实现原理和cufft的不一样?

NUFFT是非均匀采样,空域非均匀,谱域非均匀和两边都非均匀。FFT只是NUFFT的一个特例,NUFFT算FFT一定比相同点数的FFT慢,因为通用的过程都是要通过grid spreading或者解个超定方程或者max-min的办法把N个非均匀点做到2N或者3N个均匀点上,然后再进行一次2N或者3N点的FFT

善哉。终于论坛有学信号的大神了。

热烈欢迎您的莅临!
感谢您的发文!

不好意思哦版主哥哥,我是学计算电磁场的。。。。。。。这个是我业余弄弄的:lol

热烈欢迎计算电磁方向的朋友莅临论坛!

以后有您专业方向的帖子以及您业余爱好方向的帖子,欢迎踊跃发帖讨论!

论坛有你而精彩!

善哉。熱烈歡迎CEM方向的同仁。

願論壇越來越好。

我给各位倒酒,看着大神们聊天就是舒服,虽然有些看不懂:lol