テラバイトサイズの信号ファイルでFFTの計算を並列化しようとしています。現在、オープンソースライブラリを使用したこのようなFFTは、私が持っている最速のGPUでCUDAを介して実行する場合でも何時間もかかります。このプロセスに適応しようとしているフレームワークはHadoopです。非常に基本的な用語では、Hadoopは次の方法で任意の数のサーバーノードに問題を分散します。
•入力ファイルを(キー、値)のペアに分割します。
•これらのペアは「マップ」アルゴリズムに送られ、マップ内に配置したものに基づいて、(キー、値)ペアを他の(キー、値)ペアに変換します。
•次に、フレームワークは、マップからすべての(キー、値)出力を収集し、キーでソートし、同じキーを持つ値を単一のペアに集約するため、(key、list(value1、value2、 ..))ペア
•これらのペアは、「リデュース」アルゴリズムに送られ、最終結果(ファイルに書き込まれる)としてさらに(キー、値)ペアが出力されます。
サーバーログの処理など、このモデルには多くのアプリケーションがありますが、特にDSPにあまり詳しくないため、FFTを「マップ」タスクと「リデュース」タスクに分割するフレームワークを適用するのに苦労しています。
これはDSPのQ&Aであるため、私はプログラミングジャンボジャンボを気にしません。ただし、FFTを並列計算するためにどのアルゴリズムが存在するかについては混乱しています。MapとReduceタスクは(技術的に)相互に通信できないため、FFTを独立した問題に分割し、最後に結果を何らかの方法で再結合する必要があります。
Cooley-Tukey Radix 2 DITの簡単な実装をプログラミングしましたが、これは小さな例で動作しますが、10億バイトの奇数/偶数インデックスDFTを再帰的に計算するのに使用できません。MapReduce FFTアルゴリズム(Tsz-Wo SzeがSSA乗算に関する論文の一部として書いたもので、2つ以上のハイパーリンクをリンクすることはできません)と「4ステップFFT」を含む多くの論文を読むのに数週間費やしました。 (こことここ)、これは互いに似ており、私が達成しようとしていることと似ています。しかし、私は数学が絶望的に悪いので、{1,2、3、4、5、6、7、8}(すべての虚数成分が0)のような単純なセットにこれらの方法を手で適用すると、私は非常に間違った結果になりました。誰もが効率的な並列FFTアルゴリズムを簡単な英語(私がリンクしたものまたは他のリンク)で説明できるので、それを試してプログラムすることができますか?
編集:ジムクレイと私の説明で混乱する可能性のある他の人は、私はテラバイトファイルの単一のFFTをしようとしています。しかし、プロセスを高速化するために、複数のサーバーで同時に実行できるようにしたいと考えています。