next up previous contents
Next: Процедуры клиента Up: Установка соединения Previous: Имена, адреса, порты и   Contents

Процедуры сервера

Самому по себе серверу доступны две процедуры. Во-первых, он может вызвать MPI_OPEN_PORT для установки порта, по которому к нему можно получить доступ. Во-вторых, он должен вызывать MPI_COMM_ACCEPT для приема соединения с клиентом.





MPI_OPEN_PORT (info, port_name)



IN info Информация, специфичная для реализации об установке адреса (дескриптор)  
OUT port_name Новый установленный порт (строка)  





int MPI_Open_port(MPI_Info info, char *port_name)

MPI_OPEN_PORT (INFO, PORT_NAME, IERROR)
CHARACTER* ( * ) PORT_NAME
INTEGER INFO, IERROR

void MPI::Open_port(const MPI::Info& info, char* port_name)

Эта функция устанавливает сетевой адрес, кодируя его в строку port_name, по которому сервер в состоянии принимать соединения от клиентов. port_name поддерживается системой, возможно используя информацию аргумента info.

MPI копирует имя порта, поддерживаемое системой, в port_name. Аргумент port_name определяет вновь открываемый порт и может использоваться клиентом для контакта с сервером. С помощью MPI_MAX_PORT_NAME (MPI::MAX_PORT_NAME в С++) определяется максимальный размер строки, которая может поддерживаться системой.

Совет пользователям: Система копирует имя порта в port_name. Приложение должно иметь буфер соответствующего размера для хранения этого значения.[]

Имя порта - это сетевой адрес. Он является уникальным для коммуникационного пространства, к которому он относится (определяется реализацией) и может использоваться любым клиентом коммуникационного пространства. В частности, если это Internet-адрес (host:port), он должен быть уникальным в Internet. Если это низкоуровневый адрес коммутатора в IBM SP, он будет уникальным для этого SP.

Совет разработчикам: Эти примеры не предназначены для ограничения реализации.
port_name, в частности, может содержать имя пользователя или имя пакетной задачи, пока оно является уникальным в некотором четко определенном пространстве коммуникации. Чем больше пространство коммуникации, тем более полезной будет функциональность клиент/сервер в MPI.[]

Точная форма адреса определяется реализацией. В частности, Internet-адрес может быть именем машины, или IP-адресом, или любым значением, которое реализация может декодировать в IP-адрес. Имя порта может использоваться повторно после его освобождения через MPI_CLOSE_PORT и освобождения системой.

Совет разработчикам: Поскольку пользователь может набрать port_name ``вручную'', полезно выбирать форму, которая легко читается и не имеет вложенных пробелов.[]

Можно использовать info, чтобы сообщить реализации, как устанавливать адрес. Это может быть и обычно бывает MPI_INFO_NULL, чтобы получить значение по умолчанию для реализации. Зарезервированных ключей не существует.





MPI_CLOSE_PORT (port_name)



IN port_name Порт (строка)  





int MPI_Close_port (char *port_name)

MPI_CLOSE_PORT(PORT_NAME, IERROR)
CHARACTER*(*) PORT_NAME
INTEGER IERROR

void MPI::Close_port(const char* port_name)
Эта функция освобождает сетевой адрес, представленный port_name.





MPI_COMM_ACCEPT (port_name, info, root, comm, newcomm)



IN port_name Имя порта (строка, используется только root)  
IN info Информация, зависящая от реализации (дескриптор, используется только root)  
IN root Ранг в comm для узла root (целое)  
IN comm Интракоммуникатор, внутри которого выполняется коллективный вызов (дескриптор)  
OUT newcomm Интеркоммуникатор с клиентом в качестве удаленной группы (дескриптор)  





int MPI_Comm_accept(char *port_name, MPI_Info info, int root,
MPI_Comm comm, MPI_Comm *newcomm)

MPI_COMM_ACCEPT (PORT_NAME, INFO, ROOT, COMM, NEWCOMM, IERROR)
CHARACTER*(*) PORT_NAME
INTEGER INFO, ROOT, COMM, NEWCOMM, IERROR

MPI::Intercomm MPI::Intracomm::Accept(const char* port_name,
const MPI::Info& info, int root) const

MPI_COMM_ACCEPT устанавливает соединение с клиентом. Это коллективная операция посредством вызывающего коммуникатора. Она возвращает интеркоммуникатор, позволяющий установить
связь с клиентом.

port_name должно быть установлено через вызов MPI_OPEN_PORT.

Аргумент info является строкой, определяемой реализацией, позволяющей точный контроль над вызовом MPI_COMM_ACCEPT.

Отметьте, что MPI_COMM_ACCEPT является блокирующим вызовом. Пользователь может реализовать неблокирующий доступ, помещая MPI_COMM_ACCEPT в отдельный поток.


next up previous contents
Next: Процедуры клиента Up: Установка соединения Previous: Имена, адреса, порты и   Contents
Alex Otwagin 2002-12-10