2D FFT中的3D FFT分解

时间:2013-01-18 20:59:31

标签: performance parallel-processing fft

基本上我使用FFT解决3D中的扩散方程,其中一种并行方法是在2D FFT中分解3D FFT。

如本文所述:https://cmb.ornl.gov/members/z8g/csproject-report.pdf

分解3d fft的方法是:

xy方向的2d fft 全球转置 z方向1d fft

基本上,我的问题是我不知道如何进行这种全局转置(因为我认为它是转换我认为的3d数组)。有没有人来过这个?非常感谢。

2 个答案:

答案 0 :(得分:10)

考虑具有nx*ny*nz元素的3d立方体。这些元素的3d FFT在数学上是1阶FFT的3个阶段,每个阶段一个:

  1. Ny * nz沿X轴变换,每个变换处理nx个元素
  2. nx * nz沿Y轴变换
  3. nx * ny沿Z轴变换
  4. 更一般地,N维FFT(N> 1)由沿该轴的许多(N-1)维FFT组成。

    如果信号是真实的并且你有一个可以返回半频谱的FFT,那么第1阶段的价格大约是一半(真正的FFT更便宜),剩下的阶段需要很复杂,但它们只需要有大约一半的变换。所以成本大约是一半。

    如果您的1d FFT可以读取跨步的输入元素并将输出打包到连续的缓冲区中,那么您最终会在每个阶段进行转置。

    这就是kissfft执行多维FFT的方式。

    P.S。当我需要获得更高维度的精神图片时,我想到: 带有数字矩阵(2d)的纸张,编号文件夹(3d),编号文件柜(4d),编号房间(5d),编号建筑物(6d)等等......所以我可以想象“文件柜”维度

答案 1 :(得分:2)

本文中提到的“全局转置”不是数学运算,而是distributed memory machines之间数据的重新排列。

步骤1中在一台机器上计算的数据必须转移到所有其他机器,反之亦然,以便步骤1。它与矩阵转置无关。