这个问题是关于cuFFT所需的缓冲区。在用户指南中,记录了
在最坏的情况下,CUFFT库为其分配空间 8 * batch * n [0] * .. * n [rank-1] cufftComplex或cufftDoubleComplex元素 (其中batch表示将在其中执行的变换数 parallel,rank是输入数据的维数(参见 多维变换)和n []是变换数组 尺寸)分别用于单精度和双精度变换。
“变换维度数组”是什么意思? cuFFT需要多少缓冲?我对上述内容的理解是,它需要至少是被FFT数组大小的8倍,但这对我来说没有意义
提前致谢
丹尼尔
答案 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)
使用cufftGetSize1d
和cufftEstimate1d
为您提供为缓冲区分配的内存量。文档说cufftPlan1d
给出了最大金额的估算,cufftGetSize1d
提供了更准确的估算。
在我的情况下,我使用64和8192点FFT。我得到了同样的问题,缓冲区大小只分配了1 * batch * n [0]个元素。我用不同的数据量和不同的FFT大小进行了测试,得到了相同的值。
总之,如果您需要确定FFT使用的内存,CuFFT库提供了执行此操作的功能。