c++ - MPI 警告 : Program exiting with outstanding receive requests

标签 c++ warnings mpi

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

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()

关于c++ - MPI 警告 : Program exiting with outstanding receive requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024999/

相关文章:

c - mpi c mpirun 注意到进程等级 0 在信号 11 上退出

java - checkstyle getSQLTypeName

git - 如果对已推送到远程的分支进行 rebase ,会发出警告吗?

c - 具有 MPI_Type_create_struct 段错误的 MPI Bcast

c - 使用 MPI 进行矩阵乘法

c - Void 函数抛出 "no return statement"警告

c++ - 当调用另一个模拟函数时更改模拟函数的返回值

c++ - 在 C++ header 中声明值

c++ - QFile 复制 - 静态与临时对象

c++ - 有效地将多个一维数组中的数据收集到单个一维数组中