Matrix MPI SEND是如何工作的?

Matrix MPI SEND是如何工作的?,matrix,parallel-processing,mpi,Matrix,Parallel Processing,Mpi,我目前正在FORTRAN 90上编写MPI代码,对MPI SEND的实现有一些疑问。我有一个矩阵a,它有8列。8列分为4个处理器0、1、2和3。在使用MPI_散点分布列之后,我需要将列从一个处理器发送到相邻的处理器。因此,我计划使用MPI_Ssend,以确保该列首先由处理器接收,然后发送到另一个相邻的处理器。我不知道这个问题,但是有人能告诉我算法的实现是否正确吗 (ID是处理器秩,只考虑其他变量)。我想知道是否使用点对点通信?我首先使用简单的MPIX发送给主处理器,因为如果我为每个处理器使用MP

我目前正在FORTRAN 90上编写MPI代码,对MPI SEND的实现有一些疑问。我有一个矩阵a,它有8列。8列分为4个处理器0、1、2和3。在使用MPI_散点分布列之后,我需要将列从一个处理器发送到相邻的处理器。因此,我计划使用MPI_Ssend,以确保该列首先由处理器接收,然后发送到另一个相邻的处理器。我不知道这个问题,但是有人能告诉我算法的实现是否正确吗


(ID是处理器秩,只考虑其他变量)。我想知道是否使用点对点通信?我首先使用简单的MPIX发送给主处理器,因为如果我为每个处理器使用MPIYSSENT,它们中的任何一个都不会在接收之前发送数据。将其内容转移到下一个进程。如果接收和发送链形成一个闭环,那么它只不过是秩0所保存的数据的广播。改为使用。嗨,所以我对算法做了一些更改,现在它使用简单的MPI_Send和MPI_Recv将列数据从一个处理器转移到另一个处理器。调用MPI_Send(b1,dim2*col,MPI_Integer,flag,0,MPI_COMM_WORLD,ierr)调用MPI_Recv(b1,dim2*col,MPI_Integer,flag3,0,MPI_COMM_WORLD,ierr)我尝试使用标志变量,发现错误在这两行之间。错误由'error:forrtl:error(69):进程中断(SIGINT)“.你知道这个错误是什么意思吗?程序会编译,但当我试图运行可执行文件时,它会在一个处理器上运行,但在两个处理器上会挂起,然后当我终止该操作时,它会给出上面的错误。如果你能展示如何计算
flag
flag3
,这会很有帮助。在MPI中,谁不能与谁交谈。确保对于任何
MPI\u Send
都有一个匹配的
MPI\u Recv
,反之亦然。如果您可以访问TotalView调试器(商用,但通常在许多HPC站点可用),您可以使用它获取程序通信图的可视快照,并查看某些列组是否正在向不希望发送/不愿意发送的列组发送/接收消息。
 if(id .eq. 0) then
                call MPI_Send(b1,dim2*col,MPI_Integer,1,0,MPI_COMM_WORLD,ierr)
                call MPI_Recv(b1,dim2*col,MPI_Integer,num_procs-1,0,MPI_COMM_WORLD,ierr)
           else
               call MPI_Recv(b1,dim2*col,MPI_Integer,flag3,0,MPI_COMM_WORLD,ierr)
               call MPI_Ssend(b1,dim2*col,MPI_Integer,flag,0,MPI_COMM_WORLD,ierr)
           endif