今天尝试用cuda把FFT实现,遇到了难题。直接调用cufft库的话,内存拷贝与数据处理的时间比大约是1:2。但是据说cufft并不是最高效的,所以想自己锻炼一下。
我的思路是将二维的每一行映射到一个block,每个点都是一个thread。
先将数据拷贝到显卡全局内存,然后拷贝到每个block的共享内存,这是因为读取global memory会占用更多的指令周期。
然后就是处理这段shared memory,可是每当写的时候就会很慢,后来仔细阅读了一下bank conflict的部分,将相邻的线程所对应的memory错开存储,果然好多了,可是这个虽然只包括一维fft(还没做矩阵转置和另一个一维变换),还是要耗费掉和cufft库差不多的时间。
仔细检查发现是在写内存的时候占用的时间比例很大,不知道怎么才能缩短时间。
本文分享了使用 CUDA 实现快速傅立叶变换(FFT)的过程,并探讨了如何通过优化内存访问来提升性能。作者尝试将二维数据映射到 block 和 thread 上,利用共享内存减少 global memory 的访问,并通过避免 bank conflict 来提高写操作效率。
356

被折叠的 条评论
为什么被折叠?



