我有一个应用程序,其中根级别通过以下方式向所有级别发送消息:
tag = 22
if( myrankid == 0 )then
do i = 1, nproc
if(I==1)then
do j = 1, nvert
xyz((j-1)*3+1) = data((j-1)*3+1,1)
xyz((j-1)*3+2) = data((j-1)*3+2,1)
xyz((j-1)*3+3) = data((j-1)*3+3,1)
enddo
else
call mpi_send(data, glb_nvert(i)*3, mpi_real, i-1, tag, comm, ierr)
endif
enddo
else
call mpi_recv(data, glb_nvert(i)*3, mpi_real, 0, tag,comm, stat,ierr)
endif
我的问题是,只有在运行超过 3000 等级时,这对才会挂在某个 mpi 等级(在我的特定应用程序上它是 2009 等级)
现在,我确实检查了大小和数组是否一致,我发现唯一有趣的是comm
. comm 是我从另一个 MPI 通信器复制的通信器。
当我像除根外的所有等级一样打印 comm 时print*, comm
,除根外,打印相同的整数。
例如
根打印:
-1006632941
而剩下的 2999 列打印:
-1006632951
这真的是导致问题的原因吗?
我尝试过使用 intel mpi 和 cray mpi。