3

基本的に、私はFFTを使用して3Dで拡散方程式を解いています。これを並列化する方法のひとつは、3DFFTを2DFFTに分解することです。

このホワイトペーパーで説明されているように:https ://cmb.ornl.gov/members/z8g/csproject-report.pdf

3d fftを分解する方法は、次のようにすることです。

xy方向の2dfftグローバル転置z方向の1dfft

基本的に、私の問題は、このグローバル転置を行う方法がわからないことです(3D配列を転置していると思います)。誰かがこれに出くわしましたか?どうもありがとう。

4

2 に答える 2

10

nx*ny*nz要素を持つ 3D 立方体を考えてみてください。これらの要素の 3 次元 FFT は、数学的には 3 段階の 1 次元 FFT であり、各軸に 1 つずつあります。

  1. X 軸に沿って ny*nz 変換を行い、各変換は nx 要素を処理します
  2. Y 軸に沿った nx*nz 変換
  3. nx*ny は Z 軸に沿って変換します

より一般的には、N 次元 FFT (N>1) は、その軸に沿った多数の (N-1) 次元 FFT で構成されます。

信号が本物で、スペクトルの半分を返すことができる FFT がある場合、ステージ 1 のコストは約半分になります (実際の FFT の方が安価です)。残りのステージは複雑にする必要がありますが、必要なのは多くの変換。そのため、コストは約半分です。

1d FFT がストライドされた入力要素を読み取り、出力を連続したバッファーにパックできる場合、各段階で転置を行うことになります。

これが、kissfftが多次元 FFT を実行する方法です。

PS 私がより高い次元の心的イメージを得る必要があるとき、私は次のことを考えます: 数のマトリックスを含む紙 (2d)、番号付きの書類のフォルダー (3d)、番号付きのファイリング キャビネット (4d)、番号付きの部屋 (5d) )、番号の付いた建物 (6d) など...「ファイリング キャビネット」の寸法を視覚化できます

于 2013-01-19T21:09:25.847 に答える
2

この論文で言及されている「グローバル転置」は数学的な操作ではなく、分散メモリ マシン間のデータの再配置です。

ステップ 1 で 1 台のマシンで計算されたデータは、ステップ to のために他のすべてのマシンに転送する必要があります。行列の転置とは何の関係もありません。

于 2013-01-18T22:28:56.403 に答える