0

我们对 cuFFT 使用的内存有限制吗(尤其是一维变换)。我需要为大量数据计算 FFT,并且我想充分利用我的 GPU 功能。

在用户指南中记录了

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

它还说

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

在某些特定情况下”是没有意义的。具体情况没有规定,下限也没用,我们只能用上限“8*.....”来限制GM上使用的内存大小。

就我而言,我有一个一维“经典”复杂变换,它似乎只使用“1 * ....”。但我无法验证。我应该与“ 8*batch*n[0]*..*n[rank-1] 元素”保持一致,还是有人对这些特定案例有更多详细信息?

4

1 回答 1

0

使用cufftGetSize1dcufftPlan1d为您提供为缓冲区分配的内存量。文档说 cufftPlan1d 给出了最大数量的估计,但我用一个简单的一维计划得到了两个函数的相同值。

请注意,当您计算更多 FFT 时,分配的内存会变慢。当 FFT 的大小变大时,它也会变慢。

在我的情况下,我同时使用 64 点和 8192 点 FFT,结果我有 2 个末端。64 分给了我8*batch*n[0]分配的元素,而 8192 分只给了我0.1*batch*n[0]1.000.000 FFT。

似乎分配的最小大小缓冲区可以低于1*batch*n[0]元素(如文档中所述)......

于 2014-08-28T13:35:03.890 回答