回 帖 发 新 帖 刷新版面

主题:奇怪的问题,困扰多日

所作的问题是三维问题,沿着一个方向分区程序能运行,多个方向分区通信时有问题:程序部分代码如下:
 call MPI_Type_vector(mysizey,mysizex,asizex,MPI_Integer1,TT,ierr)                   
 call MPI_Type_Hvector(mysizez,1,asizex*asizey*1,TT,TTT,ierr)                
 call MPI_Type_Commit(TTT,ierr)
 call MPI_Type_free(TT,ierr)  
  call MPI_Barrier(MPI_Comm_world,ierr)  
        do i=0, npx-1       
       do j=0,npy-1
         do k=0,npz-1       
        n=k*npx*npy+j*npx+i
      if(n>0)then         
        if(myid==n)then
         call MPI_send(c(1,1,1),mysizex*mysizey*mysizez           &
    &                    ,MPI_Integer1,0,11,MPI_Comm_world,ierr)
        endif  
       if(myid==0)then
         Irow=locatex(i)
         Jrow=locatey(j)
         Krow=locatez(k)
    call MPI_Recv(b(irow,jrow,Krow),1,TTT,n,11,MPI_Comm_world,status,ierr)                   
       endif
    call MPI_Barrier(MPI_Comm_world,ierr)                    
       endif
       enddo
       enddo
    enddo      
    call MPI_Type_free(TTT,ierr)  
    
程序中断,问题如下:
    job aborted:
rank: node: exit code[: error message]
0: 20081016-0757: 1: Fatal error in MPI_Recv: Message truncated, error stack:
MPI_Recv(186).......................: MPI_Recv(buf=00F301BD, count=1, dtype=USER<hvector>, src=5, tag=11, MPI_COMM_WORLD, status=007B0C30) failed
MPIDI_CH3U_Request_unpack_uebuf(590): Message truncated; 320 bytes received but buffer size is 200
1: 20081016-0757: 1
2: 20081016-0757: 1
3: 20081016-0757: 1
4: 20081016-0757: 1
5: 20081016-0757: 1

可是我的 mysizex*mysizey*mysizez 就是200了,怎么会报这样的问题呢?

回复列表 (共9个回复)

沙发

消息太长....

板凳

能不能说明白点了,怎么消息太长了,我的数组不大了mysizex*mysizey*mysizez=200!

3 楼

接收到的消息有320字节,但你只给了200字节的空间。。。

4 楼

是,程序错误提示是这样的,但是mysizex*mysizey*mysizez=200,进程发送出去的消息的长度就是200了!不知道怎么说提示收到320个!

5 楼

它需要一个数据头啊:)

6 楼

能不能进一步解释下,啥是数据头了,多谢了!

7 楼

MPI是消息机制实现多线程/进程 并行的。
消息本身也需要一个标识,因为如果没有这标识,你怎么知道当前你收到的这消息是发给你的?它至少需要以下元素:
发送方
接收方
操作符(命令)
操作数(数据)

8 楼

我觉得消息太长的可行性不大,MPI会自动忽略太长的消息。
我觉得可能还是在构造 MPI_Type的时候有问题,建议楼主先单独测试x方向发送,y方向发送和z方向发送

9 楼


你好,我也遇到同类的问题:不知道怎么解决?
job aborted:
rank: node: exit code[: error message]
0: wangwenchang: 13
1: wangwenchang: 13: Fatal error in MPI_Recv: Message truncated, error stack:
MPI_Recv(179).......................: MPI_Recv(buf=0x0012FB50, count=3, MPI_REAL, src=0, tag=1, MPI_COMM_WORLD, status=0x004641A8) failed
MPIDI_CH3U_Request_unpack_uebuf(558): Message truncated; 40 bytes received but buffer size is 12

我遇到这个问题是在这样的情况:
我是用双核机进行调试的,在调试过程中,如果我用二个进程,并且在调用一个其它的SBUROUTINE之后,再调用包括这个发送接收语句的SUROUTINE就出现这种情况,如果我采用三个进程,就没有问题。而且,如果我单独调用包括这个发送接收语句的子程序也没有问题,而且我查了下,发送和接收的个数是一样的/


我来回复

您尚未登录,请登录后再回复。点此登录或注册