我试图并行化TB级信号文件上FFT的计算。现在,使用开源库进行这样的FFT需要花费数小时,即使在我拥有的最快GPU上通过CUDA运行时也是如此。我正在尝试适应此过程的框架是Hadoop。用非常基本的术语来说,Hadoop通过以下方式将问题分配到任意数量的服务器节点上:
•您将输入文件分成(键,值)对。
•这些对被输入到“映射”算法中,该算法根据您放入映射中的内容将您的(键,值)对转换为其他一些(键,值)对。
•然后,框架从Maps收集所有(键,值)输出,并按键对它们进行排序,并将具有相同键的值聚合为一对,因此最后得到了(键,list(value1,value2, ..))对
•然后,将这些对馈入“ Reduce”算法中,该算法依次输出更多(键,值)对作为您的最终结果(写入文件)。
该模型在诸如处理服务器日志之类的实际应用中有许多应用程序,但是我很难应用该框架将FFT分解为“映射”和“减少”任务,特别是因为我对DSP并不很熟悉。
我不会打扰您,因为这是DSP问题与解答。但是,我对存在哪些并行计算FFT的算法感到困惑;映射和归约任务无法(在技术上)相互交谈,因此必须将FFT分成独立的问题,最后可以以某种方式重新组合结果。
我已经为Cooley-Tukey Radix 2 DIT编写了一个简单的实现,可以在较小的示例上运行,但是将其用于递归计算十亿字节的奇/偶索引DFT将不起作用。我花了几周时间阅读许多论文,包括一篇关于MapReduce FFT算法的文章(由Tsz-Wo Sze作为其关于SSA乘法的论文的一部分撰写,我不能链接两个以上的超链接)和“四步FFT” (这里和这里),它们看起来彼此相似,而且与我要完成的任务相似。但是,我在数学上是绝望的,将这些方法中的任何一种手工应用于{1,2,3,4,5,6,7,8}(所有虚部均为0)这样的简单集合,可以得出我非常不正确的结果。谁能用简单的英语(我链接的或其他链接的)向我解释一种有效的并行FFT算法,以便我尝试对其进行编程?
编辑:吉姆·克莱(Jim Clay)和其他可能对我的解释感到困惑的人,我正在尝试对TB文件进行一次FFT。但是我希望能够在多台服务器上同时执行此操作,以加快该过程。