因为自己对cuda不熟悉,但是项目需求要并发计算FFT,所以总结下来,自己最近查的有效资料
- 作为数学生,刚开始不太理解从时域到频域的转换,看了这篇文章后理解了,文章链接戳这里,同时对于转换前后信号的对应关系,可以参考这篇
- 刚开始在cpu上实现FFT,可以参考这两篇文章,1,2,但是这两篇文章对于输入数据都是用的数组,后来查找发现用复数域的库更方便,我就把输入数据改成用复数库了。FFT的公式推导啥的没有特别找文章看,在找资料的时候随便看了看就理解公式怎么来的了。
- 开始在GPU上写FFT代码了,先是文章1。计算完成以后发现速度很慢,根本就没有并行计算的优势,又找了文章2,这篇文章用的CUDA的自带的库cufft,我没有在自己电脑上跑,同事跑了,比上面那篇文章快很多。然后我不理解为什么文章1这么慢,就又开始找,找到了文章3,这篇文章的源码会报错,自己需要改一改,但是很简单,这个就跑的很快了,但是我没有和CUDA自带的cufft库进行比较,我觉得肯定cufft更快的。这篇文章里面用了三个核函数,前两个核函数是用来做输入数据的逆转的,最后一个核函数里面才是进行蝶形运算的。文章1是在一个核函数里面进行两个for循环,我怀疑就是这样,让速度变慢的。但是文章3的计算结果大部分值是对的,有小部分值有问题,我没有找到原因(估计是我CUDA没有学好的原因),希望和我有同样需求的小伙伴一起交流讨论。我准备放一放FFT了,我要开始学cmake了。