2011-05-17 43 views
0

我希望使用MPI在两个节点之间发送连续内存阵列。为此,我使用以下非阻塞发送/接收命令(MPI_Isend,MPI_Irecv)。当执行run命令,我看到两个警告声明如下:MPI警告:程序以未完成的接收请求退出

Warning: Program exiting with outstanding receive requests 

基本上,我希望看到,从“NorthEdge1”数组数据传递到“NorthofNorthEdge3”。我怎么能解决这个问题?我还可以尝试检查此通信吗?

这是从源代码的摘录:

#define Rows 48 
... 

double *northedge1 = new double[Rows]; 
double *northofnorthedge3 = new double[Rows]; 
... 
... 

int main (int argc, char *argv[]) 
{ 
    .... 
    .... 

    MPI_Request send_request, recv_request; 
... 
... 
{ 
    MPI_Isend(northedge1, Rows, MPI_DOUBLE, my_rank+1, 0, MPI_COMM_WORLD, &send_request);   
    MPI_Irecv(northofnorthedge3, Rows, MPI_DOUBLE, my_rank+1, MPI_ANY_TAG, MPI_COMM_WORLD, 
    &recv_request); 
} 

回答

3

看起来你已经不叫MPI_Waitall()。 “立即”发送和接收例程只有开始的通信。你必须阻止你的过程,以确保沟通完成。在MPI中阻塞的变体是MPI_Wait();在你的情况下,你需要MPI_Waitall()