MKL 和 FFTW 提供可以同时对多个输入进行操作的一维 FFT——换句话说,它们可以批量转换某些输入矩阵的列。这些多重变换的性能是否明显优于仅循环输入(假设它们存储为同一矩阵的列)并在每列上执行单独的 FFT?谷歌一无所获,我目前没有能力对此进行测试。
批量一维 FFT 的 MKL/FFTW 性能
计算科学
表现
fftw
英特尔-mkl
2021-12-05 05:25:12
1个回答
从旧文档:英特尔® 数学内核库 FFT 到 DFTI 包装器,A314775-001US:
所有变换都需要额外的内存来存储变换系数。当执行多个相同维度的 FFT 时,系数表应该只创建一次,然后在所有 FFT 上使用。使用同一个表而不是为每个 FFT 重复创建它会产生明显的性能提升。
这解释了节省的来源。现在,实际节省的金额取决于向量的大小、使用的机器架构以及许多其他因素。因此,您需要在相关数据集上进行基准测试来回答您的问题,特别是因为“显着优越”的定义可能会因评判人的不同而从“5%”到“200%”不等。
但是,我想知道为什么要避免使用英特尔 MKL 和 FFTW 提供的功能来同时执行多个 FFT,即使节省的成本没有人们希望的那么大。