1

我有一个应用程序,其中根级别通过以下方式向所有级别发送消息:

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。

4

0 回答 0