Cuda 袖口所需的缓冲器

Cuda 袖口所需的缓冲器,cuda,cufft,Cuda,Cufft,这个问题是关于cuFFT所需的缓冲区。《用户指南》中记录了以下内容: 在最坏的情况下,CUFFT库为 8*批次*n[0]*..*n[rank-1]袖套复合或袖套双重复合元素 (其中batch表示将在中执行的转换数。) parallel,rank是输入数据的维数(请参见 多维变换),n[]是变换的数组 尺寸),分别用于单精度和双精度变换 “变换维度数组”是什么意思?cuFFT需要多少缓冲?我对上述内容的理解是,它需要至少8倍于FFTed阵列的大小,但这对我来说没有意义 提前谢谢 Daniel变换维

这个问题是关于cuFFT所需的缓冲区。《用户指南》中记录了以下内容:

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

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

提前谢谢

Daniel

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

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

根据计划的配置,可能会使用更少的内存。 在某些特定情况下,临时空间分配可以尽可能低 作为1*批次*n[0]*..*n[rank-1]袖口复合体或袖口双体复合体 元素

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

1*N*M*sizeof(cufftComplex) <= space for tmp data <= 8*N*M*sizeof(cufftComplex)
1*N*M*sizeof(cufftComplex)变换维度数组是在每个维度中包含问题大小的数组,有关详细信息,请参见上一节

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

根据计划的配置,可能会使用更少的内存。 在某些特定情况下,临时空间分配可以尽可能低 作为1*批次*n[0]*..*n[rank-1]袖口复合体或袖口双体复合体 元素

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

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

1*N*M*sizeof(cufftComplex)使用
cufftGetSize1d
cufftEstimate1d
为缓冲区分配内存量。文档中说,
cufftPlan1d
给出了最大金额的估计值,
cufftpgetsize1d
提供了更精确的估计值

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


总之,如果您需要确定FFT使用的内存,则CuFFT库提供了一个功能。

使用
cufftGetSize1d
cufftEstimate1d
为缓冲区分配内存量。文档中说,
cufftPlan1d
给出了最大金额的估计值,
cufftpgetsize1d
提供了更精确的估计值

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

总之,如果您需要确定FFT使用的内存,那么CuFFT库提供了一个功能