next up previous contents
Next: Завершение обмена Up: Неблокирующий обмен Previous: Коммуникационные объекты   Contents

Инициация обмена

Далее используются те же обозначения, что и для блокирующего обмена: префикс B, S, или R используются соответственно для буферизованного, синхронного режима или режима готовности. Дополнительный префикс I (immediate - непосредственный) указывает, что вызов неблокирующий.

Синтаксис функции MPI_ISEND представлен ниже.

MPI_ISEND(buf, count, datatype, dest, tag, comm, request)

IN buf начальный адрес буфера посылки (альтернатива)
IN count число элементов в буфере посылки (целое)
IN datatype тип каждого элемента в буфере посылки (дескриптор)
IN dest номер процесса-получателя (целое)
IN tag тэг сообщения (целое)
IN comm коммуникатор (дескриптор)
OUT request запрос обмена (дескриптор)

int MPI_Isend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) MPI_ISEND (BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR MPI::Request Comm::Isend(const void* buf, int count, const MPI::Datatype& datatype, int dest, int tag) const

Синтаксис функции MPI_IBSEND представлен ниже.

MPI_IBSEND(buf, count, datatype, dest, tag, comm, request)

IN buf начальный адрес буфера посылки (альтернатива)
IN count число элементов в буфере посылки (целое)
IN datatype тип каждого элемента в буфере посылки (дескриптор)
IN dest номер процесса-получателя (целое)
IN tag тэг сообщения (целое)
IN comm коммуникатор (дескриптор)
OUT request запрос обмена (дескриптор)

int MPI_Ibsend (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) MPI_IBSEND (BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR MPI::Request MPI::Comm::Ibsend(const void* buf, int count, const MPI::Datatype& datatype, int dest, int tag) const

Синтаксис функции MPI_ISSEND представлен ниже.

MPI_ISSEND (buf, count, datatype, dest, tag, comm, request)

IN buf начальный адрес буфера посылки (альтернатива)
IN count число элементов в буфере посылки (целое)
IN datatype тип каждого элемента в буфере посылки (дескриптор)
IN dest номер процесса-получателя (целое)
IN tag тэг сообщения (целое)
IN comm коммуникатор (дескриптор)
OUT request запрос обмена (дескриптор)

int MPI_Issend (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) MPI_ISSEND (BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR MPI::Request MPI::Comm::Issend(const void* buf, int count, const MPI::Datatype& datatype, int dest, int tag) const

Синтаксис функции MPI_IRSEND представлен ниже.

MPI_IRSEND(buf, count, datatype, dest, tag, comm, request)

IN buf начальный адрес буфера посылки (альтернатива)
IN count число элементов в буфере посылки (целое)
IN datatype тип каждого элемента в буфере посылки (дескриптор)
IN dest номер процесса-получателя (целое)
IN tag тэг сообщения (целое)
IN comm коммуникатор (дескриптор)
OUT request запрос обмена (дескриптор)

int MPI_Irsend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) MPI_IRSEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR MPI::Request MPI::Comm::Irsend(const void* buf, int count, const MPI::Datatype& datatype, int dest, int tag) const

Синтаксис функции MPI_IRECV представлен ниже.

MPI_IRECV(buf, count, datatype, source, tag, comm, request)

IN buf начальный адрес буфера посылки (альтернатива)
IN count число элементов в буфере посылки (целое)
IN source тип каждого элемента в буфере посылки (дескриптор)
IN dest номер процесса-получателя (целое)
IN tag тэг сообщения (целое)
IN comm коммуникатор (дескриптор)
OUT request запрос обмена (дескриптор)

int MPI_Irecv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request) MPI_IRECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR) <type> BUF(*) INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR MPI::Request MPI::Comm::Irecv(void* buf, int count, const MPI::Datatype& datatype, int source, int tag) const

Эти вызовы создают объект коммуникационного запроса и связывают его с дескриптором запроса (аргумент request). Запрос может быть использован позже, чтобы узнать статус обмена или чтобы ждать его завершения.

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

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

Совет пользователям: Чтобы предупредить проблему копирования аргументов и оптимизации регистров, выполняемую компиляторами языка ФОРТРАН, следует обратить внимание на советы в разделе 10.2.2 MPI-2.[]


next up previous contents
Next: Завершение обмена Up: Неблокирующий обмен Previous: Коммуникационные объекты   Contents
Alex Otwagin 2002-12-10