内存需求¶
在内存使用方面,cuFFTMp 需要一定数量的临时存储器,具体取决于各个维度的大小和计划类型。
假设我们正在使用内置 Slab(即,CUFFT_XT_FORMAT_INPLACE 和/或 CUFFT_XT_FORMAT_INPLACE_SHUFFLED)。还假设我们正在计算一个变换,总共有 S=X*Y*Z 个元素,分布在 n 个 GPU 上。除了输入/输出描述符(每个 GPU 大约 S/n 个元素)之外,cuFFT 每个 GPU 需要 S/n 到 2S/n 个元素的临时存储器。
当使用自定义数据分布(cufftXtSetDistribution,带有 CUFFT_XT_FORMAT_DISTRIBUTED_INPUT 和/或 CUFFT_XT_FORMAT_DISTRIBUTED_OUTPUT)时,临时存储器的量会更大。对于大小为 S=X*Y*Z 的变换,临时存储器的量大约是
S/n到2S/n,当所有 GPU 通过对等互连连接时;3S/n到4S/n,否则。
通常,对于 2、3、5 和 7 的纯幂以及一些复合大小,可以获得最小的临时存储器使用量。
当有多个计划(例如 C2R 或 R2C 计划)时,可以使用 cufftSetWorkArea 和 cufftGetSize 在计划之间共享临时存储器。
注意
位于 r2c_c2r_shared_scratch 中的 C++ 示例展示了计划之间共享临时存储器的示例。