Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


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




Семейство функций распределения блоков данных по всем процессам группы состоит из двух подпрограмм: MPI_Scatter и MPI_Scaterv.

Функция MPI_Scatter разбивает сообщение из буфера посылки процесса root на равные части размером sendcount и посылает i-ю часть в буфер приема процесса с номером i (в том числе и самому себе). Процесс root использует оба буфера (посылки и приема), поэтому в вызываемой им подпрограмме все параметры являются существенными. Остальные процессы группы с коммуникатором comm являются только получателями, поэтому для них параметры, специфицирующие буфер посылки, не существенны.

C:

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

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

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

Тип посылаемых элементов sendtype должен совпадать с типом recvtype получаемых элементов, а число посылаемых элементов sendcount должно равняться числу принимаемых recvcount. Следует обратить внимание, что значение sendcount в вызове из процесса root - это число посылаемых каждому процессу элементов, а не общее их количество. Операция Scatter является обратной по отношению к Gather. На рис. 4.5 представлена графическая интерпретация операции Scatter.

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

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

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

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

C:

int MPI_Scatterv(void* sendbuf, int *sendcounts, int *displs,

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

 

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

На рис. 4.6 представлена графическая интерпретация операции Scatterv.

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

 





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


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


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

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

Победа - это еще не все, все - это постоянное желание побеждать. © Винс Ломбарди
==> читать все изречения...

2280 - | 2114 -


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

Ген: 0.009 с.