Предупреждение MPI: программа завершается с невыполненными запросами на получение

#c #warnings #mpi

#c #предупреждения #mpi

Вопрос:

Я хочу отправить непрерывный массив памяти между двумя узлами, используя 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, amp;send_request);        
   MPI_Irecv(northofnorthedge3, Rows, MPI_DOUBLE, my_rank 1, MPI_ANY_TAG, MPI_COMM_WORLD,   
   amp;recv_request); 
 }
  

Ответ №1:

Похоже, вы не вызывали MPI_Waitall() . Процедуры «немедленной» отправки и получения только начинают обмен данными. Вы должны заблокировать свой процесс, чтобы убедиться, что обмен данными завершен. Блокировка в MPI связана с вариантом MPI_Wait() ; в вашем случае вам нужно MPI_Waitall() .