【发布时间】:2021-03-15 06:07:09
【问题描述】:
我有一个 PETSc 矩阵,并希望在该矩阵的每一行上应用 1d-FFT,最好同时保持矩阵分布在多个节点上的可能性。根据文档和示例(例如这里:https://www.mcs.anl.gov/petsc/petsc-current/src/mat/tests/ex143.c.html),我必须创建一个 FFT 对象(“FFT 矩阵”)并使用该对象创建/初始化用于 FFT 本身的向量:
MatCreateFFT(PETSC_COMM_WORLD,DIM,dim,MATFFTW,&A);//Create FFT object
MatCreateVecsFFTW(A,&x,&y,&z); //Initialize Vectors
MatMult(A,x,y); //Apply FFT
尽管如此,据我所知,这只会对向量执行 1d-FFT,而不是对矩阵中的每一行执行 1d-FFT。当然,我可以遍历矩阵中的行并将它们复制到向量中(然后检索结果),但这会大大减慢过程。或者,如果我想执行上述过程,我是否必须在不使用 PETSc 的接口的情况下使用 FFTW(如上述相同示例中所述)?
【问题讨论】: