0

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

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

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

提前致谢

丹尼尔

4

2 回答 2

3

“变换维度数组”是包含每个维度中问题大小的数组,有关更多信息,请参见多维变换部分。

cuFFT 正在分配临时空间以容纳中间数据,您引用的文档部分说这是“最坏的情况”,所以它不是“至少 8 倍”,最多。医生接着说:

根据计划的配置,可能会使用较少的内存。在某些特定情况下,临时空间分配可以低至 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)
于 2013-04-18T21:42:54.520 回答
0

使用cufftGetSize1dandcufftEstimate1d给你分配给缓冲区的内存量。文档说cufftPlan1d给出了最大数量的估计并cufftGetSize1d提供了更精确的估计。

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

总而言之,如果您需要确定 FFT 使用的内存,CuFFT 库提供了一个函数来执行此操作。

于 2014-08-28T13:39:24.917 回答