内存需求

在内存使用方面,cuFFTMp 需要一定数量的临时存储器,具体取决于各个维度的大小和计划类型。

假设我们正在使用内置 Slab(即,CUFFT_XT_FORMAT_INPLACE 和/或 CUFFT_XT_FORMAT_INPLACE_SHUFFLED)。还假设我们正在计算一个变换,总共有 S=X*Y*Z 个元素,分布在 n 个 GPU 上。除了输入/输出描述符(每个 GPU 大约 S/n 个元素)之外,cuFFT 每个 GPU 需要 S/n2S/n 个元素的临时存储器。

当使用自定义数据分布(cufftXtSetDistribution,带有 CUFFT_XT_FORMAT_DISTRIBUTED_INPUT 和/或 CUFFT_XT_FORMAT_DISTRIBUTED_OUTPUT)时,临时存储器的量会更大。对于大小为 S=X*Y*Z 的变换,临时存储器的量大约是

  • S/n2S/n,当所有 GPU 通过对等互连连接时;

  • 3S/n4S/n,否则。

通常,对于 2、3、5 和 7 的纯幂以及一些复合大小,可以获得最小的临时存储器使用量。

当有多个计划(例如 C2R 或 R2C 计划)时,可以使用 cufftSetWorkAreacufftGetSize 在计划之间共享临时存储器。

注意

位于 r2c_c2r_shared_scratch 中的 C++ 示例展示了计划之间共享临时存储器的示例。