MPI 警告:程序退出并显示未完成的接收请求

MPI Warning: Program exiting with outstanding receive requests

本文关键字:未完成 请求 显示 警告 程序 退出 MPI      更新时间:2023-10-16

我希望使用 MPI 在两个节点之间发送一个连续的内存数组。为此,我使用以下非阻塞发送/接收命令(MPI_Isend,MPI_Irecv)。执行 run 命令时,我看到两个警告语句,如下所示:

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); 
 }

看来你还没有打电话给MPI_Waitall()."即时"发送和接收例程仅开始通信。您必须阻止您的进程以确保通信已完成。MPI 中的阻塞是 MPI_Wait() 的变体;在您的情况下,您需要MPI_Waitall().