2012-03-14 60 views
0

在這個例子中發現here,爲什麼是第二個消息Count參數不一致的,MPI_Bsend/MPI_Recieve

if (rank == src) { 
    /* These message sizes are chosen to expose any alignment problems */ 
    MPI_Bsend(msg1, 7, MPI_CHAR, dest, tag, comm); 
    MPI_Bsend(msg2, 2, MPI_DOUBLE, dest, tag, comm); 
    MPI_Bsend(msg3, 17, MPI_CHAR, dest, tag, comm); 
} 

if (rank == dest) { 
    MPI_Recv(rmsg1, 7, MPI_CHAR, src, tag, comm, MPI_STATUS_IGNORE); 
    MPI_Recv(rmsg2, 10, MPI_DOUBLE, src, tag, comm, MPI_STATUS_IGNORE); 
    MPI_Recv(rmsg3, 17, MPI_CHAR, src, tag, comm, MPI_STATUS_IGNORE); 
    if (strcmp(rmsg1, msg1) != 0) { 
     errs++; 
     fprintf(stderr, "message 1 (%s) should be %s\n", rmsg1, msg1);fflush(stderr); 
    } 

在計數不一致的,爲什麼是計數的發送和接收兩個不一致的?

回答

2

count參數Recv只是接收數據量的上限。如果我們在編譯時不知道有效負載的大小,這很方便。在第二個Recv完成後,rmsg2將包含兩個雙打,然後是一些未初始化的數據。

+0

我不懷疑你的回答是正確的,我意識到討論通常在Stack-overflow上被壓垮了,但是爲什麼鏈接中的例子會包含這樣的內容? – rudolph9 2012-03-15 02:27:25