Какая польза от статуса MPI_Isend, полученного с помощью MPI_Wait?

Случай: 1. Какой смысл использовать статус, полученный с помощью MPI_Wait()

if(rank==0)
MPI_Isend(&buffer0, count, MPI_INT, 1, 0, MPI_COMM_WORLD, &request0);
if(rank==1)
MPI_Recv(&buffer1, count, MPI_INT, 0, 0, MPI_COMM_WORLD);

if(rank==0)
MPI_Wait(&request0, &status);
// Can i use status here to do something?
MPI_Finalize();

Корпус:2. Использование статуса понятно здесь (просто добавлено для сравнения)

if(rank==0)
MPI_Ssend(&buffer0, count, MPI_INT, 1, 0, MPI_COMM_WORLD);
if(rank==1)
MPI_Irecv(&buffer1, count, MPI_INT, 0, 0, MPI_COMM_WORLD, &request1);

if(rank==1)
MPI_Wait(&request1, &status);
printf("The source is %d", status.MPI_SOURCE);
MPI_Finalize();

1 ответ

Решение

В общем-то MPI_Status используется для получения следующих свойств полученных сообщений.

  1. звание отправителя, (status.MPI_SOURCE) особенно актуально, когда MPI_ANY_SOURCE использовался.
  2. тег сообщения, (status.MPI_TAG) особенно актуально, когда MPI_ANY_TAG использовался
  3. количество отправленных элементов, которое может отличаться от принятого буфера приема, используя MPI_Get_count,

Для отправки сообщений вы можете использовать статус для проверки MPI_Test_cancelled, Кроме того, для функций, которые возвращают несколько статусов, таких как MPI_Waitall, в случае ошибок, вы можете использовать status[i].MPI_ERROR, Основная функция ожидания вернется MPI_ERR_IN_STATUS в этом случае.

Если вам не нужно ничего из этого, вы можете пройти MPI_STATUS_IGNORE вместо MPI_Status*,

Другие вопросы по тегам