Клиентская сторона имеет только одну процедуру.
IN | port_name | Сетевой адрес (строка, используется только root) | |
IN | info | Информация, зависящая от реализации (дескриптор, используется только root) | |
IN | root | Ранг в comm для узла root (целое) | |
IN | comm | Интракоммуникатор, внутри которого выполняется коллективный вызов (дескриптор) | |
OUT | newcomm | Интеркоммуникатор с сервером в качестве удаленной группы (дескриптор) |
int MPI_Comm_connect(char port_name, MPI_Info info, int root,
MPI_Comm comm, MPI_Comm *newcomm)
MPI_COMM_CONNECT(PORT_NAME, INFO, ROOT, COMM, NEWCOMM, IERROR)
CHARACTER*(*) PORT_NAME
INTEGER INFO, ROOT, COMM, NEWCOMM, IERROR
MPI::Intercomm MPI::Intracomm::Connect(const char* port_name,
const MPI::Info& info, int root) const
Эта процедура устанавливает соединение с сервером, указанным port_name.
Она коллективна для вызывающего коммуникатора и возвращает интеркоммуникатор, в
котором удаленная группа
участвует в MPI_COMM_ACCEPT.
Если названный порт не существует (или был закрыт), MPI_COMM_CONNECT возвращает ошибку класса MPI_ERR_PORT.
Если порт существует, но не имеет незавершенных MPI_COMM_ACCEPT, соединение пытается в конечном итоге выждать таймаут, определяемый реализацией, или завершиться, если сервер вызвал MPI_COMM_ACCEPT. В случае наступления таймаута MPI_COMM_CONNECT возвращает ошибку класса MPI_ERR_PORT.
Совет разработчикам: Период таймаута может быть случайно длинным или коротким. Однако, высококачественная реализация пытается поместить попытки соединения в очередь, чтобы сервер мог обработать одновременные запросы от нескольких клиентов. Высококачественная реализация может также предлагать пользователю механизм, реализованный через аргументы info для MPI_OPEN_PORT, MPI_COMM_ACCEPT или MPI_COMM_CONNECT, для управления таймаутом и поведением очередей.[]
MPI не предоставляет гарантии или уверенности в обслуживании попыток соединения. То есть, попытки соединения не обязательно удовлетворяются в порядке их появления и конкуренция со стороны других попыток соединения может задержать удовлетворение определенного запроса на соединение.
Аргумент port_name является адресом сервера. Он может иметь то же значение, что и имя, возвращенное функцией MPI_OPEN_PORT на сервере. Здесь позволяется некоторая свобода: реализация может принимать эквивалентные формы port_name. В частности, если port_name определяется в форме (hostname:port), реализация может также принимать (ip_address:port).