【发布时间】:2011-04-05 23:09:16
【问题描述】:
我正在尝试从作为 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 是一个整数。
【问题讨论】:
-
你确定 s 是整数而不是隐含的实数吗?
-
你检查过
ierr的值吗?错误代码列表见链接:mcs.anl.gov/research/projects/mpi/www/www3/MPI_Recv.html -
你能把代码贴在某个地方吗(可能是pastebin.com)?这显然不应该发生,而且您发布的代码没有任何问题,所以问题一定出在其他地方......无论如何,正如 brady 建议的那样,我也会检查
ierr。