精度损失:使用1D FFTW和MPI调用的并行2D FFT

精度损失:使用1D FFTW和MPI调用的并行2D FFT,mpi,fftw,Mpi,Fftw,我正在尝试通过1D FFTW调用和mpi通信,使用FFTW中已经实现的调用和我自己版本的2D FFT来匹配执行2D FFT的结果。 因此,我遵循了以下理论: 1 - FFT in y dimension 2 - transpose the matrix 3 - MPI_Alltoall communication 4- FFT in x dimension 5- transpose back 6 - MPI_Alltoall communication 我试过使用少量的处理器(8-12),

我正在尝试通过1D FFTW调用和mpi通信,使用FFTW中已经实现的调用和我自己版本的2D FFT来匹配执行2D FFT的结果。 因此,我遵循了以下理论:

1 - FFT in y dimension
2 - transpose the matrix
3 - MPI_Alltoall communication
4-  FFT in x dimension
5-  transpose back
6 - MPI_Alltoall communication
我试过使用少量的处理器(8-12),它似乎工作得很好。在2D FFTW调用和我自己的结果之间使用RMS执行了正确性。然而,随着我增加核的数量和矩阵的大小,我似乎失去了精度,即RMS失败,因为错误大于预期(我将错误设置为1.0e-10):

  • 给定一个512x512的矩阵,并考虑公差的RMS为1.0e-6: “错误:位置10预期im部分为10936907150.600960,得到10936907150.600958

  • 给定2048x2048的矩阵,并考虑1.0e-6的公差均方根: “错误:位置10预期实际零件-4294967296.000107和got-4294967295.99999


如果我使用的都是双精度类型,为什么会失去精度?

您应该检查公差的相对误差。你是2.509104e-12%,我认为这是正确的…浮点运算是非关联的。由于表达式的计算顺序不同,可能会出现微小差异。此外,您似乎已经设置了绝对误差阈值,而不是相对误差阈值。什么是合理的相对误差作为公差考虑?