我是一名业余爱好者,致力于并行 FFT 操作/同时执行多个文件。比如说,我有 1000 个文件,每个文件都有不同大小的实际数据,即如果一个文件有 22000 个值,其他文件可以有 15000 个值,下一个文件可以有 19000 个值,依此类推。
您知道如何实现这一目标吗?如果您的答案是通过BATCH,请解释一下如何进行?
最佳答案
您的问题有两种标准解决方案:
流:cuFFT 通过 cufftSetStream 支持 CUDA 流功能。您想要使用的模式是将每个 FFT 与单独的流相关联。这可能允许您重叠处理多个 FFT。此外,进出 GPU 的复制可以与计算重叠,而对性能的影响最小。
批处理:正如您提到的,批处理是另一种解决方案。如果所有 FFT 的大小都相当相似(如您的示例中所示),您应该能够用不会改变/显着改变输出的数据填充较小的 FFT,以使它们全部具有相同的大小。您可以使用批量调用来处理它们。
我认为在你的情况下流将是一个更好的解决方案。这是因为它允许您在执行计算时向设备传输数据和/或从设备传输数据,并且您不会因为必须对空数据执行额外的工作而导致效率低下。
关于我们可以使用 cuFFT 处理多个不同大小的文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25339663/