2013-04-18 80 views
0

这个问题是关于cuFFT所需的缓冲区。在用户指南则记载,cuFFT所需的缓冲区

在最坏的情况下,CUFFT库 8分配空间*批次* N [0] * .. * N [秩1] cufftComplex或cufftDoubleComplex元件 (其中batch表示将在 平行中执行的变换的数量,rank是输入数据的维数(参见 多维变换),n []是变换 维的数组),分别用于单精度变换和双精度变换。

“变换维数组”是什么意思? cuFFT需要多少缓冲区?我与上面的理解是,它需要至少8倍被FFTed数组的大小,但这样做没有意义,我

在此先感谢

丹尼尔

回答

3

变换尺寸的“阵列“是包含每个维度中问题大小的数组,请参阅multidimensional transforms部分以获取更多信息。

cuFFT正在分配临时空间来容纳中间数据,你引用的文档部分说这是“最糟糕的情况”,所以它至多不是“至少8倍”。文档goes on要说:

根据计划的配置,可以使用更少的内存。 在某些特定情况下,临时空间分配可以为1 *批* * [0] * .. * n [rank-1] cufftComplex或cufftDoubleComplex 元素的低 。

所以对于一个N×M的2D单精度变换:

1*N*M*sizeof(cufftComplex) <= space for tmp data <= 8*N*M*sizeof(cufftComplex) 
0

使用cufftGetSize1dcufftEstimate1d给你分配给缓冲区的内存量。该文件说cufftPlan1d给出了最大数量的估计,并提供了一个更精确的估计。

在我的情况下,我使用64和8192点FFT。我得到同样的问题,缓冲区大小只分配1 *批量* n [0]个元素。我已经用不同数据量和不同FFT大小进行了测试,并且得到了相同的值。总之,如果您需要确定FFT使用的内存,CuFFT库提供了一个功能来完成此操作。