ВУЗ:
Составители:
Рубрика:
- 31 -
две: декартова N-мерная решетка (с цикличностью и без) и ориентирован-
ный граф. Существуют функции для создания и тестирования нумераций
(
MPI_Cart_xxx
,
MPI_Graph_xxx, MPI_Topo_test
) и для преобразования номеров
из одной системы в другую. Этот механизм чисто логический и не связан с
аппаратной топологией; при его применении автоматизируется пересчет ад-
ресов ветвей (например, при вычислении матриц иногда выгодно использо-
вать картезианскую систему координат, где координаты вычислительной
ветви совпадают с координатами вычисляемой ею подматрицы).
int
MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag,
MPI_Comm comm, MPI_Status *status);
•
buf
- адрес начала буфера приема сообщения (возвращаемое значение)
•
count
- максимальное число элементов в принимаемом сообщении
•
datatype
- тип элементов принимаемого сообщения
•
source
- номер процесса-отправителя
•
msgtag
- идентификатор принимаемого сообщения
•
comm
- идентификатор группы
•
status
- параметры принятого сообщения (возвращаемое значение)
Функция
MPI_Recv
осуществляет прием сообщения с идентификатором
msgtag
от процесса
source
с блокировкой (блокировка гарантирует, что после
возврата из подпрограммы все элементы сообщения приняты и расположены
в буфере
buf
). Число элементов в принимаемом сообщении не должно пре-
восходить значения
count
(если число принятых элементов меньше
count
, то
гарантируется, что в буфере
buf
изменятся только элементы, соответствую-
щие элементам принятого сообщения). Если процесс посылает два сообще-
ния другому процессу и оба эти сообщения соответствуют одному и тому же
вызову
MPI_Recv
, первым будет принято то сообщение, которое было от-
правлено раньше.
Т.о. с помощью пары функций
MPI_Send/MPI_Recv
осуществляется надеж-
ная (но не слишком эффективная) передача данных между процессами. Од-
нако в некоторых случаях (например, когда принимающая сторона ожидает
приема сообщений, но априори не знает длины и типа их) удобно использо-
вать блокирующую функцию
MPI_Probe
, позволяющую определить характе-
ристики сообщения до того, как оно будет помещено в приемный пользова-
тельский буфер (гарантируется, что следующая вызванная функция
MPI_Recv
прочитает именно протестированное
MPI_Probe
сообщение):
int
MPI_Probe( int source, int msgtag, MPI_Comm comm, MPI_Status *status);
•
source
- номер процесса-отправителя (или
MPI_ANY_SOURCE)
•
msgtag
- идентификатор ожидаемого сообщения (или
MPI_ANY_TAG
)
•
comm
- идентификатор группы
- 31 -
две: декартова N-мерная решетка (с цикличностью и без) и ориентирован-
ный граф. Существуют функции для создания и тестирования нумераций
(MPI_Cart_xxx, MPI_Graph_xxx, MPI_Topo_test) и для преобразования номеров
из одной системы в другую. Этот механизм чисто логический и не связан с
аппаратной топологией; при его применении автоматизируется пересчет ад-
ресов ветвей (например, при вычислении матриц иногда выгодно использо-
вать картезианскую систему координат, где координаты вычислительной
ветви совпадают с координатами вычисляемой ею подматрицы).
int
MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int msgtag,
MPI_Comm comm, MPI_Status *status);
• buf - адрес начала буфера приема сообщения (возвращаемое значение)
• count - максимальное число элементов в принимаемом сообщении
• datatype - тип элементов принимаемого сообщения
• source - номер процесса-отправителя
• msgtag - идентификатор принимаемого сообщения
• comm - идентификатор группы
• status - параметры принятого сообщения (возвращаемое значение)
Функция MPI_Recv осуществляет прием сообщения с идентификатором
msgtag от процесса source с блокировкой (блокировка гарантирует, что после
возврата из подпрограммы все элементы сообщения приняты и расположены
в буфере buf). Число элементов в принимаемом сообщении не должно пре-
восходить значения count (если число принятых элементов меньше count, то
гарантируется, что в буфере buf изменятся только элементы, соответствую-
щие элементам принятого сообщения). Если процесс посылает два сообще-
ния другому процессу и оба эти сообщения соответствуют одному и тому же
вызову MPI_Recv, первым будет принято то сообщение, которое было от-
правлено раньше.
Т.о. с помощью пары функций MPI_Send/MPI_Recv осуществляется надеж-
ная (но не слишком эффективная) передача данных между процессами. Од-
нако в некоторых случаях (например, когда принимающая сторона ожидает
приема сообщений, но априори не знает длины и типа их) удобно использо-
вать блокирующую функцию MPI_Probe, позволяющую определить характе-
ристики сообщения до того, как оно будет помещено в приемный пользова-
тельский буфер (гарантируется, что следующая вызванная функция MPI_Recv
прочитает именно протестированное MPI_Probe сообщение):
int
MPI_Probe( int source, int msgtag, MPI_Comm comm, MPI_Status *status);
• source - номер процесса-отправителя (или MPI_ANY_SOURCE)
• msgtag - идентификатор ожидаемого сообщения (или MPI_ANY_TAG)
• comm - идентификатор группы
Страницы
- « первая
- ‹ предыдущая
- …
- 29
- 30
- 31
- 32
- 33
- …
- следующая ›
- последняя »
