当变量用作源时,MPI_RECV接收0值,但当源编号是硬编码时,接收到正确的值

时间:2010-08-30 20:33:41

标签: fortran mpi

我试图接收来自多个处理的变量作为DO循环的一部分。但是,如果我使用变量来表示处理器编号,则操作后变量的值为0。如果我直接输入处理器号,它工作正常。奇怪的是,完全相同的代码在程序的早期工作正常。对我的问题有任何想法吗?

  DO s = 1,numproc-1,1
        CALL MPI_RECV( numZERO, 1, MPI_INTEGER, s, 1, MPI_COMM_WORLD, status, ierr )
        WRITE(*,*)'s',s,'numZERO',numZERO
  END DO

给出:

  s   1   numZERO   0
  s   2   numZERO   0 ...

编码时:

  CALL MPI_RECV( numZERO, 1, MPI_INTEGER, 1, 1, MPI_COMM_WORLD, status, ierr )
  WRITE(*,*)'1 numZERO',numZERO
  CALL MPI_RECV( numZERO, 1, MPI_INTEGER, 2, 1, MPI_COMM_WORLD, status, ierr )
  WRITE(*,*)'2 numZERO',numZERO

我得到了

  1 numZERO   1
  2 numZERO   2 ...

s是一个整数。

1 个答案:

答案 0 :(得分:0)

“ierr”将毫无用处。 Fortran MPI实现默认情况下不返回任何内容。他们知道你不会去检查它,所以作家用一个错误炸弹而不是传递一些有用的东西。您可以请求MPI返回错误。

您可以查看“状态”,因为在非常罕见的情况下这很有用。

“S”应该是正确大小的整数(通常为整数* 4)。这就是我认为错误的全部。