试图使FFTW3 MPI工作,获得零

时间:2017-01-02 10:18:36

标签: c mpi fftw mpich

我正在尝试从http://www.fftw.org/doc/2d-MPI-example.html#g_t2d-MPI-example开始制作2D MPI FFTW示例。

示例代码不完整所以我必须编写一些额外的行来进行编译和测试(下面是代码)。

出于某种原因,据我所知,输出(就地FFT)只是零。 变换后的输出只是0 0(全零)。

我是否以错误的方式使用MPI FFTW?示例代码很简单。

// compile with: mpicc simple_mpi_example.c  -Wl,-rpath=/usr/local/lib -lfftw3_mpi -lfftw3 -o simple_mpi_example */

#include <fftw3-mpi.h>
int main(int argc, char **argv){
  const ptrdiff_t N0 = 1000, N1 = 1000;
  fftw_plan plan;
  fftw_complex *data; //local data of course

  ptrdiff_t alloc_local, local_n0, local_0_start, i, j;

  MPI_Init(&argc, &argv);
  fftw_mpi_init();

  /* get local data size and allocate */
  alloc_local = fftw_mpi_local_size_2d(N0, N1, MPI_COMM_WORLD,
                       &local_n0, &local_0_start);
  data = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * alloc_local);

    MPI_Barrier(MPI_COMM_WORLD);
    printf("%i %i\n", local_0_start, local_n0);
    MPI_Barrier(MPI_COMM_WORLD);
    /* create plan for forward DFT */
    plan = fftw_mpi_plan_dft_2d(N0, N1, data, data, MPI_COMM_WORLD,
                  FFTW_FORWARD, FFTW_ESTIMATE);

    /* initialize data to some function my_function(x,y) */
    for (i = 0; i < local_n0; ++i) for (j = 0; j < N1; ++j){
      data[i*N1 + j][0]=local_0_start + i; 
      data[i*N1 + j][1]=i;
    }
    MPI_Barrier(MPI_COMM_WORLD);  
    printf("%f %f\n", data[10*N1 + 10][0], data[10*N1 + 10][1]);
    MPI_Barrier(MPI_COMM_WORLD);

    /* compute transforms, in-place, as many times as desired */
    fftw_execute(plan);

    printf("%f %f\n", data[10*N1 + 10][0], data[10*N1 + 10][1]);

    fftw_destroy_plan(plan);
    fftw_free(data);
    MPI_Finalize();
    printf("finalize\n");
    return 0;
}

0 个答案:

没有答案