c++ - 是否可以将批处理的 FFT 与 CUDA 的 cuFFT 库和 cufftPlanMany 重叠?

标签 c++ c cuda cufft

我正在尝试并行化称为 Chromaprint 的声学指纹识别库的 FFT 变换。它的工作原理是“将原始音频分成许多重叠的帧,并对它们应用傅立叶变换”。 Chromaprint 使用 4096 帧大小,有 2/3 重叠。例如,第一帧由元素 [0...4095] 组成,然后第二帧类似于 [1366.. 5462]。

使用 cufftPlanMany,我知道您可以指定大小为 4096 的批处理,这将执行 [0...4095]、[4096...8192] 等批处理。是否有某种方法可以使批处理转换重叠,还是我应该考虑另一种不使用批量执行的方法?

最佳答案

如果您使用 Advanced Data Layoutidist 参数应该允许您在 2 个连续转换输入集的起点之间设置任意偏移量。

对于一维情况,将根据您传递的参数根据以下内容选择输入:

input[ b * idist + x * istride]

(其中 b 是当前正在处理的批号,即 b = 0, 1, 2, ... batch size)

“idist和odist参数表示输入和输出数据中连续两个批处理的第一个元素之间的距离。”

关于c++ - 是否可以将批处理的 FFT 与 CUDA 的 cuFFT 库和 cufftPlanMany 重叠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719812/

相关文章:

c++ - 如何在 Qt Creator 4.8 中使用 C++11

c++ - cygwin 不识别 >> 运算符? C++

c++ - 交叉编译库通信

c++ - 矩阵乘法 - Cuda 值得吗?

c++ - 此代码产生的欧拉角阶数是多少?

检查C中是否存在文件。如果存在,则继续读取文件的最后一个值并加一

c - Arduino uno无法上传

c - 来自标准输入的段错误(核心转储)

c++ - 是否有针对 CUDA-GPU 或 MPI-CPU+CUDA-GPU 的基准测试?

cuda - 同时使用动态分配和静态分配的共享内存