带有 MPI 的子阵列上的 FFTW

计算科学 C++ 傅立叶分析 mpi fftw
2021-12-16 06:50:59

使用 FFTW 的接口,我可以通过修改参数(例如,使用guru将变换仅应用于多维数组的一部分。不幸的是,似乎没有具有相同参数的 MPI 接口(参见,例如,)。有谁知道我如何使用 MPI 将 FFTW 的一种转换仅应用于多维数组(子数组)的一部分?fftw_iodimfftw_plan_guru_r2r(...)fftw_mpi_plan_r2r(...)

1个回答

guru接口的重点是在不将数据复制到连续数组中的情况下进行复杂的 FFT。如果数据无论如何都需要通过 MPI 进行通信,那么这个优势并不是很重要。在 MPI 设置中,利用类似大师的界面将是复杂且无效的。

换句话说,如果您的数据不是预期的 MPIFFTW 2D/3D/ND 格式,那么复制这种格式的数据并应用现有的(非 guru 接口)功能与通信成本相比并不可怕。

至于部分维度 FFT,原因基本相同,要么在本地维度中应用本地(甚至大师)FFTW,然后复制到一个或多个 FFTWMPI 兼容布局中,然后执行 MPIFFT 并复制回布局。

我从未使用过它,但 FTWMPI 有一个XM_plan_many_dft可能有助于多 MPI 案例,带有签名

     plan XM_plan_many_dft(int rnk, const ptrdiff_t *n, ptrdiff_t howmany,       
      ptrdiff_t block, ptrdiff_t tblock, C *in, C *out,    
      MPI_Comm comm, int sign, unsigned flags);

http://www.fftw.org/fftw3_doc/Advanced-distributed_002dtranspose-interface.html