ВУЗ:
Составители:
Рубрика:
- 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
- …
- следующая ›
- последняя »