Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемНаталия Осьминина
1 кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции параллельное программирование
2 кафедра ЮНЕСКО по НИТ 2 Введение Все пересылки между процессами можно реализовать посредством функций MPI_Send и MPI_Recv. Каждый программист может написать такую процедуру с использованием операций Send/Recv, однако гораздо удобнее воспользоваться коллективной операцией. Главное отличие коллективных операций от операций типа точка-точка состоит в том, что в них всегда участвуют все процессы, связанные с некоторым коммуникатором. Несоблюдение этого правила приводит либо к аварийному завершению задачи, либо к еще более неприятному зависанию задачи.
3 кафедра ЮНЕСКО по НИТ 3 Набор коллективных операций включает: Синхронизация всех процессов с помощью барьеров (MPI_Barrier) Коллективные коммуникационные операции Глобальные вычислительные операции
4 кафедра ЮНЕСКО по НИТ 4 Свойства Все коммуникационные подпрограммы, за исключением MPI_Bcast, представлены в двух вариантах: - простой вариант, когда все части передаваемого сообщения имеют одинаковую длину и занимают смежные области в адресном пространстве процессов; - "векторный" вариант предоставляет более широкие возможности по организации коллективных коммуникаций, снимая ограничения, присущие простому варианту как в части длин блоков, так и в части размещения данных в адресном пространстве процессов. Векторные варианты отличаются дополнительным символом "v" в конце имени функции.
5 кафедра ЮНЕСКО по НИТ 5 Свойства (2) Отличительные особенности коллективных операций: - коллективные коммуникации не взаимодействуют с коммуникациями типа точка-точка; - коллективные коммуникации выполняются в режиме с блокировкой. Возврат из подпрограммы в каждом процессе происходит тогда, когда его участие в коллективной операции завершилось, однако это не означает, что другие процессы завершили операцию; -количество получаемых данных должно быть равно количеству посланных данных. Типы элементов посылаемых и получаемых сообщений должны совпадать. Сообщения не имеют идентификаторов.
6 кафедра ЮНЕСКО по НИТ 6 Синхронизация процессов MPI_Barrier comm коммуникатор области связи int MPI_Barrier (MPI_Comm comm) Входные параметры: Синхронизация с помощью барьеров используется, например, для завершения всеми процессами некоторого этапа решения задачи, результаты которого будут использоваться на следующем этапе. Использование барьера гарантирует, что ни один из процессов не приступит раньше времени к выполнению следующего этапа, пока результат работы предыдущего не будет окончательно сформирован.
7 кафедра ЮНЕСКО по НИТ 7 Широковещательная рассылка данных MPI_Bcast buf адрес начала расположения пересылаемых данных count число пересылаемых данных datatype тип пересылаемых данных root номер процесса-отправителя comm коммуникатор области связи int MPI_Bcast (void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) Выходные параметры: buf адрес начала расположения принимаемого сообщения Входные параметры
8 кафедра ЮНЕСКО по НИТ 8 Широковещательная рассылка данных MPI_Bcast int MPI_Bcast (void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) до MPI_Bcast после MPI_Bcast red redredredred при root=1
9 кафедра ЮНЕСКО по НИТ 9 Функция сбора блоков данных от всех процессоров MPI_Gather Входные параметры: Выходные параметры: recvbuf адрес начала буфера приема sendbuf адрес начала расположения пересылаемых данных sendcount число пересылаемых элементов sendtype тип пересылаемых элементов recvcount число элементов, получаемых от каждого процессора recvtype тип получаемых элементов root номер процесса-отправителя comm коммуникатор области связи int MPI_Gather( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)
10 кафедра ЮНЕСКО по НИТ 10 Функция сбора блоков данных от всех процессоров MPI_Gather до MPI_Gather после MPI_Gather при root=1 int MPI_Gather(sendbuf,sendcount,sendtype,recvbuf, recvcount,recvtype,root,comm) BCDA BCDA ABCD
11 кафедра ЮНЕСКО по НИТ 11 Функция сбора блоков данных от всех процессоров MPI_Gatherv Сообщения помещаются в буфер приема процесса root в соответствии с номерами посылающих процессов, а именно, данные, посланные процессом i, размещаются в адресном пространстве процесса root, начиная с адреса rbuf + displs[i].
12 кафедра ЮНЕСКО по НИТ 12 Функция сбора блоков данных от всех процессоров MPI_Gatherv Входные параметры: recvcount целочисленный массив (размер равен числу процессов в группе), i-й элемент которого определяет число элементов, которое должно быть получено от процесса i displs целочисленный массив (размер равен числу процессов в группе), i-ое значение определяет смещение i-го блока данных относительно начала rbuf int MPI_Gatherv( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcount, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm)
13 кафедра ЮНЕСКО по НИТ 13 Функция сбора блоков данных от всех процессоров MPI_Allgather до MPI_Gather после MPI_Gather int MPI_Allgather( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) BCDA CDA ABCDABCDABCDABCD B
14 кафедра ЮНЕСКО по НИТ 14 Функция сбора блоков данных от всех процессоров MPI_Allgatherv int MPI_Allgatherv( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int *recvcount, int *displs, MPI_Datatype recvtype, MPI_Comm comm)
15 кафедра ЮНЕСКО по НИТ 15 Функция распределения блоков данных по всем процессорам MPI_Scatter Входные параметры: Выходные параметры: recvbuf адрес начала буфера приема int MPI_Scatter( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) sendbuf адрес начала размещения распределяемых данных sendcount число элементов, посылаемых каждому процессору sendtype тип пересылаемых элементов recvcount число получаемых элементов recvtype тип получаемых элементов root номер процесса-отправителя comm коммуникатор области связи
16 кафедра ЮНЕСКО по НИТ 16 int MPI_Scatter(sendbuf,sendcount,sendtype,recvbuf, recvcount,recvtype,root,comm) Функция распределения блоков данных по всем процессорам MPI_Scatter до MPI_Scatter после MPI_Scatter при root=1 BCDA ABCD ABCD
17 кафедра ЮНЕСКО по НИТ 17 Функция распределения блоков данных по всем процессорам MPI_Alltoall Входные параметры: Выходные параметры: recvbuf адрес начала буфера приема int MPI_Alltoall( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm) sendbuf адрес начала размещения распределяемых данных sendcount число элементов, посылаемых каждому процессору sendtype тип пересылаемых элементов recvcount число получаемых элементов recvtype тип получаемых элементов comm коммуникатор области связи
18 кафедра ЮНЕСКО по НИТ 18 Функция распределения блоков данных по всем процессорам MPI_Alltoallv int MPI_Alltoallv( void *sendbuf, int *sendcount, int *sdispls, MPI_Datatype sendtype, void *recvbuf, int *recvcount, int *rdispls, MPI_Datatype recvtype, MPI_Comm comm)
19 кафедра ЮНЕСКО по НИТ 19 Коллективные коммуникационные операции MPI_Bcast (рассылка информации от одного процесса всем остальным членам некоторой области связи) MPI_Gather, MPI_Allgather (сборка распределенного по процессам массива в один массив с сохранением его в адресном пространстве выделенного процесса или всех процессов) MPI_Scatter (разбиение массива и рассылка его фрагментов всем процессам области связи) MPI_Alltoall (совмещенная операция Scatter/Gather (All- to-All), каждый процесс делит данные из своего буфера передачи и разбрасывает фрагменты всем остальным процессам, одновременно собирая фрагменты, посланные другими процессами в свой буфер приема)
20 кафедра ЮНЕСКО по НИТ 20 Задание 1. Объявляем массив на 1000 элементов типа double на всех процессах Инициализирнуем его на 0-м процессе t1 = MPI_Wtime Цикл на 100 итераций: - Рассылаем данный массив с 0-го процесса всем остальным(1.. size-1) при помощи операций MPI_Send, MPI_Recv. - При первой итерации после приёма выводим на каждом процессе первые 5 элементов t2 = MPI_Wtime Выводим (t2-t1) Инициализируем массив на 0-м процессе по-другому t1 = MPI_Wtime Цикл на 100 итераций: - Рассылаем данный массив с 0-го процесса всем остальным(1.. size-1) при помощи операции MPI_Bcast - При первой итерации после приёма выводим на каждом процессе первые 5 элементов t2 = MPI_Wtime Выводим (t2-t1)
21 кафедра ЮНЕСКО по НИТ 21 Задание 2. Объявляем и инициализируем массив send на 1000 элементов типа double на всех процессах На 0-м объявляем массив recv на 1000*size элементов t1 = MPI_Wtime Цикл на 100 итераций: - на 0-м: присваиваем recv[i] = send[i] (i=0..99) - Пересылаем массив send с процессов 1..size-1 0-му (MPI_Send) - на 0-м: принимаем с i-го процесса данные в массив recv в положение recv[100*i] (MPI_Recv) - При первой итерации после приёма выводим на 0-м процессе первые 5 элементов от каждого процесса t2 = MPI_Wtime Выводим (t2-t1) Инициализируем массив send на всех процессах по-другому t1 = MPI_Wtime Цикл на 100 итераций: - Пересылаем массив send с процессов 1..size-1 0-му при помощи операции MPI_Gather - При первой итерации после приёма выводим на 0-м первые 5 элементов t2 = MPI_Wtime Выводим (t2-t1)
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.