Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_ekzamen_Chernysheva.docx
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
649 Кб
Скачать
☆
  1. Функции обмена с блокировкой: mpi_Send(), mpi_Recv(), mpi_Ssent(),mpi_Bsend(), mpi_Rsend(), mpi_Buffer_attach(), mpi_Buffer_detach().

Функции передачи с блокировкой

int MPI_Send (void* buf, int count, MPI_Datatype type, int des, int msgtag, MPI_Comm comm)

void *buf - адрес переменной или массива, откуда будет передаваться информация

int count - количество элементов в передаваемом сообщении

MPI_Datatype type - тип элементов передаваемого сообщения в терминологии MPI

int des - идентификации процесса получателя

int msgtag - идентификатор сообщения, должен совпадать у переедающего и принимающего процессов

MPI_Comm comm - идентификатор коммуникатора группы, которой принадлежат переедающие и принимающие процессы

Функция MPI_Send - передача точка-точка

При обращении к функции данные будут либо переданы, либо помещены в буфер, если процесс-получатель не готов к обмену и закончит работу успешно. Блокировка означает, что на момент реального обмена будут переданы те данные, которые были на момент обращения к функции. То есть выполняется на данные. Это обеспечивается тем, что в буфер помещаются значения. Функция возвращает 0 в случае успешного завершения, иначе код ошибки. Так как после выполнения функции нельзя быть уверенным, что сообщение было передано ввели следующие 3 функции с теми же параметрами:

- int MPI_Ssend(...) - синхронная передача, завершение работы функции возможно только после того, как сообщение полностью передано. Если процесс-получатель не готов приему, возможно бесконечное ожидание.

- int MPI_Bsend(...) - программист сам создает буфер, куда помещается передаваемое сообщение. Для этого необходимы функции:

int MPI_Buffer_attach(void* buffer, int size); - выделение буферного пространства в памяти.

int MPI_Buffer_detach(void* buffer, int* size); - освобождение буферного пространства в памяти.

- int MPI_Rsend(...) - передача по готовности. Функция сразу передает сообщение, если процесс-получатель не готов к приему, функция завершается с ошибкой. Все функции возвращают 0 или код ошибки.

Функция приема сообщения

int MPI_Recv(void *buf, int count, MPI_Datatype type, int source, int msgtag, MPI_Comm comm,

MPI_Status *status);

void *buf - адрес переменной или массива, куда будет записана полученная информация

int count - количество элементов в принятом сообщении. Можно указывать значение больше, чем будет получено, будет записано столько, сколько элементов пришло.

MPI_Datatype type - тип элементов в принятом сообщении в терминологии MPI

int source - идентификатор процесса-отправителя. Можно указывать константу

MPI_ANY_SOURCE, то есть будет получено сообщение от любого процесса, годового к обмену.

int msgtag - идентификатор сообщения, должен совпадать у переедающего и принимающего

MPI_Comm comm - идентификатор коммуникатора группы, которому принадлежат переедающие и принимающие процессы.

MPI_Status *status - указатель на структуру MPI_Status, куда будут записаны атрибуты принятого сообщения, возвращаемое значение.

Функция возвращает 0, иначе код ошибки.

При обращении к функции процесс будет стоять и ждать, пока не получит сообщение. То есть после завершения работы функции можно быть уверенным, что сообщение полностью получено.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]