我试图接收来自多个处理的变量作为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
是一个整数。
答案 0 :(得分:0)
“ierr”将毫无用处。 Fortran MPI实现默认情况下不返回任何内容。他们知道你不会去检查它,所以作家用一个错误炸弹而不是传递一些有用的东西。您可以请求MPI返回错误。
您可以查看“状态”,因为在非常罕见的情况下这很有用。
“S”应该是正确大小的整数(通常为整数* 4)。这就是我认为错误的全部。