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