内存需求¶
在内存使用方面,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++ 示例展示了计划之间共享临时存储器的示例。