Далее используются те же обозначения, что и для блокирующего обмена: префикс 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.[]