MPI, найдите ошибку в 5 строках

OlegXXL

Есть такой кусок кода (надеюсь смысл переменных ясен из контекста):
if (rank!=0) MPI_Irsend(A, N, MPI_DOUBLE, rank-1, 0, MPI_COMM_WORLD, &r[0]);
if (rank!=0) MPI_Irecv (B, N, MPI_DOUBLE, rank-1, 0, MPI_COMM_WORLD, &r[1]);
if (rank!=size-1) MPI_Irsend(C, N, MPI_DOUBLE, rank+1, 1, MPI_COMM_WORLD, &r[2]);
if (rank!=size-1) MPI_Irecv (D, N, MPI_DOUBLE, rank+1, 1, MPI_COMM_WORLD, &r[3]);
MPI_Waitall(4, r, 0);
MPI Зависает на Wait'е навсегда. В чем дело?
Виснет на запросе r[1], то есть на приеме. Похоже на то что он вначале отправляет в никуда, а потом ему просто нечего принимать.

alexkravchuk

А идентификаторы сообщений специально разные?
Пусть у тебя есть два процесса. Тогда процесс с rank=1 посылает в процесс с rank=0 сообщение с id=0, сразу после этого ждёт сообщение от процесса с rank=0 с id=0.
Далее, процесс 0 посылает сообщение с id=1 в процесс 1, и ждёт от него сообщение с таким же id.
Короче, один процесс получает сообщение, но с другим идентификатором, чем нужно.

OlegXXL

Спасибо, все работает.
Надо же так ступить.........
Оставить комментарий
Имя или ник:
Комментарий: