据说,CUFFT库支持针对输入大小进行了高度优化的算法,可以按以下格式编写: 2 ^ a X 3 ^ b X 5 ^ c X 7 ^ d 。
他们怎么能设法做到这一点?
据我所知,FFT必须仅为 2 ^ a 输入大小提供最佳性能。
答案 0 :(得分:0)
这意味着素数因子大于7的输入大小会变慢。
答案 1 :(得分:0)
Cooley-Tukey算法可以在各种DFT长度上操作,可以表示为N = N_1 * N_2。该算法递归地将长度为N的DFT表示为长度为N_2的N_1个较小的DFT。
正如您所注意到的,最快的通常是基数2分解,它以N(NlogN)运行,递归地将长度为N的DFT分解为长度为N / 2的2个较小的DFT。
但是,实际性能取决于硬件和实现。例如,如果我们考虑使用线程扭曲大小为32的cuFFT,那么长度为32的某个倍数的DFT将是最佳的(注意:只是一个示例,我不知道实际的优化存在于cuFFT的引擎盖。)
简答:基于Cooley-Tukey radix-n算法,底层代码针对任何最高7的素数因子分解进行了优化。