2011-05-10 61 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在這裏會是更好的選擇。它肯定會簡單得多,因爲它既是一個「發送」又是「接收」的方法。