Прежде чем клиент и сервер соединятся друг с другом, они являются независимыми приложениями MPI. Ошибка в одном из них не влияет на другое. Однако, после установки соединения посредством MPI_COMM_CONNECT и MPI_COMM_ACCEPT, ошибка в одном может повлиять на другое. Поэтому желательно, чтобы клиент и сервер могли рассоединяться так, чтобы ошибка в одном из них не влияла на другое. Также было бы желательно рассоединение родителя и потомка, чтобы ошибка в потомке не влияла на родителя и наоборот.
INOUT | comm | Коммуникатор (строка) |
int MPI_Comm_disconnect(MPI_Comm *comm)
MPI_COMM_DISCONNECT(COMM, IERROR)
INTEGER COMM, IERROR
void MPI::Comm::Disconnect()
Эта функция ожидает полного завершения всех незаконченных соединений для comm, освобождает коммуникационный объект, и устанавливает дескриптор в MPI_COMM_NULL. Это коллективная операция. Она не может быть выполнена для коммуникатора MPI_COMM_WORLD или MPI_COMM_SELF.
MPI_COMM_DISCONNECT может быть вызвана только после завершения всех соединений, чтобы буферизованные данные могли быть доставлены по назначению. Это требование такое же, как и в MPI_FINALIZE.
MPI_COMM_DISCONNECT имеет такое же действие, как и MPI_COMM_FREE, за исключением того, что она ждет, чтобы завершились незаконченные соединения, и позволяет гарантировать поведение отсоединенных процессов.
Совет пользователям: Чтобы рассоединить два процесса, пользователь может вызвать одну из функций MPI_COMM_DISCONNECT, MPI_WIN_FREE и MPI_FILE_CLOSE, чтобы удалить все пути связи между двумя процессами. Отметьте, что может понадобиться отсоединить несколько коммуникаторов (или освободить несколько окон файлов), прежде чем два процесса станут полностью независимы.[]
Объяснение: Было бы замечательно использовать взамен MPI_COMM_FREE, но эта функция точно не ожидает завершения незаконченных соединений.[]