Студопедия Главная Случайная страница Обратная связь

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

Функции сбора блоков данных от всех процессов группы





Семейство функций сбора блоков данных от всех процессов группы состоит из четырех подпрограмм: MPI_Gather, MPI_Allgather, MPI_Gatherv, MPI_Allgatherv. Каждая из указанных подпрограмм расширяет функциональные возможности предыдущих.

Функция MPI_Gather производит сборку блоков данных, посылаемых всеми процессами группы, в один массив процесса с номером root. Длина блоков предполагается одинаковой. Объединение происходит в порядке увеличения номеров процессов-отправителей. То есть данные, посланные процессом i из своего буфера sendbuf, помещаются в i-ю порцию буфера recvbuf процесса root. Длина массива, в который собираются данные, должна быть достаточной для их размещения.

С:

int MPI_Gather(void* sendbuf, int sendcount, MPI_Datatype sendtype,

void* recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm)

FORTRAN:

MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,

RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)

<type> SENDBUF(*), RECVBUF(*)

INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

IN sendbuf - адрес начала размещения посылаемых данных;
IN sendcount - число посылаемых элементов;
IN sendtype - тип посылаемых элементов;
OUT recvbuf - адрес начала буфера приема (используется только в процессе-получателе root);
IN recvcount - число элементов, получаемых от каждого процесса (используется только в процессе-получателе root);
IN recvtype - тип получаемых элементов;
IN root - номер процесса-получателя;
IN comm - коммуникатор.

Тип посылаемых элементов sendtype должен совпадать с типом recvtype получаемых элементов, а число sendcount должно равняться числу recvcount. То есть, recvcount в вызове из процесса root - это число собираемых от каждого процесса элементов, а не общее количество собранных элементов.

Пример программы с использованием функции MPI_Gather.

MPI_Comm comm;int array[100];int root, *rbuf;...MPI_Comm_size(comm, &gsize);rbuf = (int *) malloc(gsize * 100 * sizeof(int));MPI_Gather(array, 100, MPI_INT, rbuf, 100, MPI_INT, root, comm);

Функция MPI_Allgather выполняется так же, как MPI_Gather, но получателями являются все процессы группы. Данные, посланные процессом i из своего буфера sendbuf, помещаются в i-ю порцию буфера recvbuf каждого процесса. После завершения операции содержимое буферов приема recvbuf у всех процессов одинаково.

C:

int MPI_Allgather(void* sendbuf, int sendcount, MPI_Datatype sendtype,

void* recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)

FORTRAN:

MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,

RECVCOUNT, RECVTYPE, COMM, IERROR)

<type> SENDBUF(*), RECVBUF(*)

INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR

IN sendbuf - адрес начала буфера посылки;
IN sendcount - число посылаемых элементов;
IN sendtype - тип посылаемых элементов;
OUT recvbuf - адрес начала буфера приема;
IN recvcount - число элементов, получаемых от каждого процесса;
IN recvtype - тип получаемых элементов;
IN comm - коммуникатор.

 

Функция MPI_Gatherv позволяет собирать блоки с разным числом элементов от каждого процесса, так как количество элементов, принимаемых от каждого процесса, задается индивидуально с помощью массива recvcounts. Эта функция обеспечивает также большую гибкость при размещении данных в процессе-получателе, благодаря введению в качестве параметра массива смещений displs.

C:

int MPI_Gatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype,

void* rbuf, int *recvcounts, int *displs, MPI_Datatype recvtype,
int root, MPI_Comm comm)

FORTRAN:

MPI_GATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RBUF,

RECVCOUNTS, DISPLS, RECVTYPE, ROOT, COMM, IERROR)

<type> SENDBUF(*), RBUF(*)

INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*),

RECVTYPE, ROOT, COMM, IERROR

IN sendbuf - адрес начала буфера передачи;
IN sendcount - число посылаемых элементов;
IN sendtype - тип посылаемых элементов;
OUT rbuf - адрес начала буфера приема;
IN recvcounts - целочисленный массив (размер равен числу процессов в группе), i-й элемент которого определяет число элементов, которое должно быть получено от процесса i;
IN displs - целочисленный массив (размер равен числу процессов в группе), i-ое значение определяет смещение i-го блока данных относительно начала rbuf;
IN recvtype - тип получаемых элементов;
IN root - номер процесса-получателя;
IN comm - коммуникатор.

Сообщения помещаются в буфер приема процесса root в соответствии с номерами посылающих процессов, а именно, данные, посланные процессом i, размещаются в

 

адресном пространстве процесса root, начиная с адреса rbuf + displs[i].

Функция MPI_Allgatherv является аналогом функции MPI_Gatherv, но сборка выполняется всеми процессами группы. Поэтому в списке параметров отсутствует параметр root.

C:

int MPI_Allgatherv(void* sendbuf, int sendcount, MPI_Datatype sendtype,

void* rbuf, int *recvcounts, int *displs,
MPI_Datatype recvtype, MPI_Comm comm)

FORTRAN:

MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RBUF, RECVCOUNTS,

DISPLS, RECVTYPE, COMM, IERROR)

<type> SENDBUF(*), RBUF(*)

INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*),

RECVTYPE, COMM, IERROR

IN sendbuf - адрес начала буфера передачи;
IN sendcount - число посылаемых элементов;
IN sendtype - тип посылаемых элементов;
OUT rbuf - адрес начала буфера приема;
IN recvcounts - целочисленный массив (размер равен числу процессов в группе), содержащий число элементов, которое должно быть получено от каждого процесса;
IN displs - целочисленный массив (размер равен числу процессов в группе), i-ое значение определяет смещение относительно начала rbuf i-го блока данных;
IN recvtype - тип получаемых элементов;
IN comm - коммуникатор.

 

 

Рис 1. Графическая интерпретация операции Bcast.

Пример использования функции MPI_Bcast.

... IF (MYID.EQ. 0) THEN PRINT *, 'ВВЕДИТЕ ПАРАМЕТР N: ' READ *, N END IF CALL MPI_BCAST(N, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, IERR)

 







Дата добавления: 2015-09-15; просмотров: 392. Нарушение авторских прав; Мы поможем в написании вашей работы!




Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

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

Случайной величины Плотностью распределения вероятностей непрерывной случайной величины Х называют функцию f(x) – первую производную от функции распределения F(x): Понятие плотность распределения вероятностей случайной величины Х для дискретной величины неприменима...

Анализ микросреды предприятия Анализ микросреды направлен на анализ состояния тех со­ставляющих внешней среды, с которыми предприятие нахо­дится в непосредственном взаимодействии...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Гносеологический оптимизм, скептицизм, агностицизм.разновидности агностицизма Позицию Агностицизм защищает и критический реализм. Один из главных представителей этого направления...

Studopedia.info - Студопедия - 2014-2025 год . (0.013 сек.) русская версия | украинская версия