我正在查看CUDA SDK上的FFT示例,我想知道:为什么当填充数据的一半是2的幂时,CUFFT要快得多?(一半是因为在频域中一半是冗余的)
拥有2的幂大小的意义何在?
我正在查看CUDA SDK上的FFT示例,我想知道:为什么当填充数据的一半是2的幂时,CUFFT要快得多?(一半是因为在频域中一半是冗余的)
拥有2的幂大小的意义何在?
http://forums.nvidia.com/index.php?showtopic=195094
在解决类似问题时,需要注意cuFFT使用两种不同的算法来实现FFT。其中一种是Cooley-Tuckey方法,另一种是Bluestein算法。当维度只有2、3、5和7等质因数时(例如675 = 3 ^ 3 x 5 ^ 5),使用675 x 675比使用674 x 674或677 x 677要好得多,这是通过使用Cooley-Tuckey方法实现的。如果其中一个质因数是2、3、5或7以外的质数,则该数字的FFT将使用Bluestein方法实现。Bluestein方法速度较慢,而且存在一定的精度损失。从手册中可以了解到:http://developer.download.nvidia.com/compute/cuda/3_1/toolkit/docs/CUFFT_Library_3.1.pdf。