我研究了Cooley Tukey算法,我明白了。我在CUDA convolutionFFT2D示例中得到了所有内容,直到这些内核:
spProcess2D调用 - > spProcess2D_kernel调用了很多 - > spPostprocessC2C,mulAndScale和spPreprocessC2C
这是完整的代码: http://nopaste.info/30c13e44fe.html(convolutionFFT2D.cu,这里是spProcess2D函数) http://nopaste.info/78d22afac2.html(convolutionFFT2D.cuh,这里是其他函数)
我已经阅读了所有的nvidia sdk论文,但我还是不知道这些函数是做什么的(他们使用的是twiddles,但似乎没有像Cooley Tukey算法那样)
如果可以,请帮助我,或者至少指出我在哪里解决我的问题
更新:我找到了这个链接:http://cnx.org/content/m16336/latest/#uid38 也许这些函数正在执行广度优先算法?我仍然不能说,但形状似乎相同
答案 0 :(得分:1)
看起来算法正在做类似于提到的算法here。预处理步骤看起来将大小为N的实数输入(在填充之后)重新排序为大小为N / 2的复数输入。后处理步骤是重新排序数据以返回原始的FFT 输入数组。
答案 1 :(得分:0)
spPostprocessC2C
看起来像一个FFT蝴蝶。调用例程的复杂性来自于将FFT算法拟合到CUDA的SIMT模型中。
也许如果你解释了你想要实现的目标(除了理解这个特定的FFT实现是如何工作的),那么你可能会得到一些更具体的答案。