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