cuFFT所需的缓冲区

时间:2013-04-18 02:29:13

标签: cuda cufft

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

  

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

“变换维度数组”是什么意思? cuFFT需要多少缓冲?我对上述内容的理解是,它需要至少是被FFT数组大小的8倍,但这对我来说没有意义

提前致谢

丹尼尔

2 个答案:

答案 0 :(得分:3)

“变换维度数组”是包含每个维度中问题大小的数组,有关详细信息,请参阅multidimensional transforms部分。

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

  

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

因此,对于NxM 2D单精度变换:

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

答案 1 :(得分:0)

使用cufftGetSize1dcufftEstimate1d为您提供为缓冲区分配的内存量。文档说cufftPlan1d给出了最大金额的估算,cufftGetSize1d提供了更准确的估算。

在我的情况下,我使用64和8192点FFT。我得到了同样的问题,缓冲区大小只分配了1 * batch * n [0]个元素。我用不同的数据量和不同的FFT大小进行了测试,得到了相同的值。

总之,如果您需要确定FFT使用的内存,CuFFT库提供了执行此操作的功能。