Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Сборка распределенных данных




int MPI_Gather(void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int dest, MPI_Comm comm)

int MPI_Allgather(void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int dest, MPI_Comm comm)

int MPI_Allgatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype, void* recvbuf, int *recvcounts, int *displs, MPI_Datatype recvtype, MPI_Comm comm)

Сборка данных со всех процессов в буфере rbuf процесса dest. Каждый процесс, включая dest, посылает содержимое своего буфера sbuf процессу dest. Собирающий процесс сохраняет данные в буфере rbuf, располагая их в порядке возрастания номеров процессов. Параметр rbuf имеет значение только на собирающем процессе и на остальных игнорируется, значения параметров count, datatype и dest должны быть одинаковыми у всех процессов.

Для функции allgather и allgatherv все процессы собирают один вектор. Пусть у нас имеется вектор размером 8, который разделён между тремя процессами на 3 части размерами 3, 3 и 2 соответственно. Тогда массивы длин частей для векторного варианта функции примут следующий вид: recvcounts [3] = {3, 3, 2}, displs [3] = {0, 3, 6}.

· sbuf - адрес начала буфера посылки

· scount - число элементов в посылаемом сообщении; этот параметр должен быть равен размеру буфера, деленному на число процессов.

· stype - тип элементов отсылаемого сообщения

· выходной параметр rbuf - адрес начала буфера сборки данных

· rcount - число элементов в принимаемом сообщении (этот параметр должен быть равным scount)

· rtype - тип элементов принимаемого сообщения

· dest - номер процесса, на котором происходит сборка данных

· recvcounts массив, указывающий количество принимаемых элементов от процессов

· displs целочисленный массив смещений пакетов данных друг относительно друга

· comm - идентификатор группы

Пример вызова:

… #define N 10 #define PROCS 5 … int buf[N],buf1[N/PROCS],size; … MPI_Gather(buf1,N/PROCS,MPI_INT, buf,N/PROCS,MPI_INT,0,MPI_COMM_WORLD); …

 

Синхронизация процессов

int MPI_Barrier(MPI_Comm comm)

Блокирует работу процессов, вызвавших данную процедуру, до тех пор, пока все оставшиеся процессы группы comm также не выполнят эту процедуру.

· comm - идентификатор группы

Пример вызова:

… MPI_Barrier(MPI_COMM_WORLD); …

 

Поэлементные операции

int MPI_Reduce (void *sbuf, void *rbuf, int count, MPI_Datatype stype; MPI_Op op, int dest, MPI_Comm comm)

int MPI_Allreduce (void *sbuf, void *rbuf, int count, MPI_Datatype stype; MPI_Op op, MPI_Comm comm)

Эта функция должна вызываться одновременно всеми процессами приложения. Все процессы подают на вход функции массивы buf одинаковой размерности count. Над этими массивами поэлементно выполняется операция op. Массив - результат помещается в процесс dest. Для операция allreduce массив размещается во всех процессах.

· sbuf - адрес начала буфера посылки

· rbuf - адрес начала буфера приема

· count - число элементов в посылаемом/принимаемом сообщении

· stype - тип элементов отсылаемого сообщения

· op - операция, выполняемая над элементами буфера

· dest - номер процесса, на котором происходит сборка данных

· comm - идентификатор группы

Виды поэлементных операций:

  • MPI_MAX Выбор максимального элемента
  • MPI_MIN Выбор минимального элемента
  • MPI_SUM Суммирование
  • MPI_PROD Вычисление произведения

Пример вызова:

… #define N 10 int v[N],u[N]; … MPI_Reduce(v,u,N,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD); …

Литература

1. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб:. БХВ-Петербург, 2002, – 608с. (2-е издание 2004)

2. Шпаковский Г.И., Серикова Н.В. Программирование для многопроцессорных систем в стандарте MPI: Пособие. – Мн.: БГУ, 2002. -323 с.

3. А.С.Антонов. Параллельное программирование с использованием технологии MPI: Учебное пособие. – М.: Изд-во МГУ, 2004.-71 с.





Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 357 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

80% успеха - это появиться в нужном месте в нужное время. © Вуди Аллен
==> читать все изречения...

2294 - | 2147 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.