Как извлечь тег из сообщения MPI_Irecv? - PullRequest
0 голосов
/ 04 октября 2018

Я знаю, что могу получить тег сообщения MPI_Recv, используя status.MPI_TAG примерно так:

MPI_Recv(&buffer, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, globalComm, &status);
printf("The tag I received is %d\n",status.MPI_TAG);

Теперь, как мне получить тег сообщения MPI_Irecv?

int buffer[2];
MPI_Request request;
MPI_Irecv(&buffer[0], 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, globalComm, &request);

Я попытался использовать request.MPI_TAG, но это не сработало, и вместо этого я получил сообщение об ошибке.

1 Ответ

0 голосов
/ 04 октября 2018

тег доступен только после получения сообщения, поэтому он может быть недоступен при возврате MPI_Irecv().

Полная последовательность:

MPI_Irecv(&buffer[0], 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, globalComm, &request);
// whatever you have to do
MPI_Wait(&request, &status);
// now the tag is in status.MPI_TAG

Обратите внимание, что есть и другиеПодпрограммы, которые можно использовать для проверки получения сообщения (простыми примерами являются MPI_Test() и MPI_Probe())

...