2011-05-10 64 views
2

我想要做一些MPI,这里是一个简单的程序,使用MPI_Send,MPI_Recv(yes,blocking)。等级0将消息发送到所有其他进程,其他进程接收它。但是,我的MPI_Send永远不会返回。我在这里错过了什么吗?谢谢!简单的MPI程序

#include<stdio.h> 
#include<string.h> 
#include<unistd.h> 
#include"mpi.h" 

int main(int argc, char **argv) 
{ 

int rank, size, i; 
MPI_Status status; 
char message[20]; 
MPI_Init(&argc, &argv); 
MPI_Comm_size(MPI_COMM_WORLD, &size); 
MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
strcpy(message, "Hello, world"); 
if (rank==0){ 
    for(i=1;i<size;i++){ 

     printf("I am sending %s\n", message); 
     MPI_Send(message, 23, MPI_BYTE, 0, 7, MPI_COMM_WORLD); 
     printf("Sending node=%d, message=%s\n", rank, message); 
} 
} 
else{ 
        MPI_Recv(message, 23, MPI_BYTE, MPI_ANY_SOURCE, 7, MPI_COMM_WORLD,&status); 
        printf("Receiving node=%d, message=%s\n", rank, message); 
} 
MPI_Finalize(); 
return 0; 
} 

回答

11

您将消息发送到自己:

MPI_Send(message, 23, MPI_BYTE, 0, 7, MPI_COMM_WORLD); 

我相信这应该是

MPI_Send(message, 23, MPI_BYTE, i, 7, MPI_COMM_WORLD); 
4

由于@cnicutar指出,进程0将消息发送到自身。然而,在我看来,MPI_Bcast在这里会是更好的选择。它肯定会简单得多,因为它既是一个“发送”又是“接收”的方法。