Нижегородский государственный университет им. Н.И. Лобачевского Зимняя школа по параллельному программированию Практикум по технологиям параллельного программирования (на примере учебно-исследовательской задачи) Гергель В.П., проф., д.т.н., кафедра МО ЭВМ ВМК ННГУ
60
Embed
Гергель В.П., проф., д.т.н., кафедра МО ЭВМ ВМК ННГУ
Нижегородский государственный университет им. Н.И. Лобачевского Зимняя школа по параллельному программированию Практикум по технологиям параллельного программирования (на примере учебно-исследовательской задачи). Гергель В.П., проф., д.т.н., кафедра МО ЭВМ ВМК ННГУ. Учебная задача. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Нижегородский государственный университетим. Н.И. Лобачевского
Зимняя школа по параллельному программированию
Практикум по технологиям параллельного программирования
Практикум по технологиям параллельного программирования
Оценка подхода
• (+) Однозначность вычислений• (-) Использование дополнительной памяти• (-) Меньшая скорость сходимости
Возможность повышения эффективности расчетов
25-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Схема чередования обработки строк
граничные значения значения предшествующейитерации
Этап 1 Этап 2
значения после этапа 1текущей итерации
значения после этапа 2текущей итерации
26-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Оценка подхода
• (+/-) Однозначность вычислений, но не совпадение результатов последовательных расчетов
• (-) Меньшая скорость сходимости
Возможность повышения эффективности расчетов
27-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Волновые схемы параллельных вычислений…
• Выполнение только тех вычислительных действий, которые выполняет последовательный метод и, как результат, получение совпадающих результатов приводит к порождению волновой схемы расчетов (wavefront or hyperplane methods)
28-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Волновые схемы параллельных вычислений
граничные значения значения предшествующейитерации
Нарастание волны
значения текущей итерации узлы, в которых могут бытьпересчитаны значения
Пик волны Затухание волны
29-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Алгоритм 1.5
omp_lock_t dmax_lock;omp_init_lock(dmax_lock);do { dmax = 0; // максимальное изменение значений u for ( nx=1; nx<N+1; nx++ ) { dm[nx] = 0;#pragma omp parallel for shared(u,nx,dm) private(i,j,temp,d) for ( i=1; i<nx+1; i++ ) { j = nx + 1 – i; temp = u[i][j]; u[i][j] = 0.25*(u[i-1][j]+u[i+1][j]+ u[i][j-1]+u[i][j+1]–h*h*f[i][j]); d = fabs(temp-u[i][j]) if ( dm[i] < d ) dm[i] = d; } // конец параллельной области }#pragma omp parallel for shared(n,dm,dmax) private(i) for ( i=1; i<nx+1; i++ ) { omp_set_lock(dmax_lock); if ( dmax < dm[i] ) dmax = dm[i]; omp_unset_lock(dmax_lock); } // конец параллельной области} while ( dmax > eps );
30-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Алгоритм 1.5'
chunk = 200; // размер последовательного участка#pragma omp parallel for shared(n,dm,dmax) private(i,d) for ( i=1; i<nx+1; i+=chunk ) { d = 0; for ( j=i; j<i+chunk; j++ ) if ( d < dm[j] ) d = dm[j]; omp_set_lock(dmax_lock); if ( dmax < d ) dmax = d; omp_unset_lock(dmax_lock); } // конец параллельной области
31-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
!!! Последовательное выполнение операций передачи данных
42-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Параллельное выполнение операций передачи данных
// передача нижней граничной строки следующему процессору // и прием передаваемой строки от предыдущего процессора
if ( ProcNum % 2 == 1 ) { // процессор с нечетным номером if ( ProcNum != NP-1 )Send(u[M][*],N+2,NextProc); if ( ProcNum != 0 )Receive(u[0][*],N+2,PrevProc); }
else { // процессор с четным номером if ( ProcNum != 0 )Receive(u[0][*],N+2,PrevProc); if ( ProcNum != NP-1 )Send(u[M][*],N+2,NextProc); }
43-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Коллективные операции
// Алгоритм 8
// схема Гаусса-Якоби, ленточное разделение данных // действия, выполняемые на каждом процессоре do { // обмен граничных строк полос с соседними процессорами Sendrecv(u[M][*],N+2,NextProc,u[0][*],N+2,PrevProc); Sendrecv(u[1][*],N+2,PrevProc,u[M+1][*],N+2,NextProc); // <обработка полосы с оценкой погрешности dm> // вычисление общей для всех полос погрешности dmax Reduce(dm,dmax,MAX,0); Broadcast(dmax,0); } while ( dmax > eps ); // eps есть требуемая точность решения
44-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Практикум по технологиям параллельного программирования
Оценка подхода
• (-) Результаты расчетов отличаются от результатов последовательных вычислений
46-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Волновые вычисления при ленточной схеме разделения данных
Про
цесс
оры1
0
2
1 2 3 4 5 6 7 8
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9 10
4 5 6 7 8 9 10 11 3
47-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Блочная схема разделения данных…
// Алгоритм 6.9 // схема Гаусса-Зейделя, блочное разделение данных // действия, выполняемые на каждом процессоре do { // получение граничных узлов if ( ProcNum / NB != 0 ) { // строка решетки не нулевая // получение данных от верхнего процессора Receive(u[0][*],M+2,TopProc); // верхняя строка Receive(dmax,1,TopProc); // погрешность } if ( ProcNum % NB != 0 ) { // столбец решетки не нулевой // получение данных от левого процессора Receive(u[*][0],M+2,LeftProc); // левый столбец Receive(dm,1,LeftProc); // погрешность If ( dm > dmax ) dmax = dm; }
48-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Блочная схема разделения данных
// <обработка блока с оценкой погрешности dmax> // пересылка граничных узлов if ( ProcNum / NB != NB-1 ) { // строка решетки не последняя // пересылка данных нижнему процессору Send(u[M+1][*],M+2,DownProc); // нижняя строка Send(dmax,1,DownProc); // погрешность } if ( ProcNum % NB != NB-1 ) { // столбец решетки не последний // пересылка данных правому процессору Send(u[*][M+1],M+2,RightProc); // правый столбец Send(dmax,1, RightProc); // погрешность } // синхронизация и рассылка погрешности вычислений dmax Barrier(); Broadcast(dmax,NP-1); } while ( dmax > eps ); // eps есть требуемая точность решения
49-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Вычислительный конвейер (множественная волна)
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
блоки со значениямипредшествующей итерации
Нарастание волны
блоки со значениямитекущей итерации
блоки, в которых могут бытьпересчитаны значения
Пик волны Затухание волны
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
50-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Операции передачи данных
0 1 2
процессоры
Рассылка количества узловсетки
MPI_Bcast
Обеспечивающаяпроцедура MPI
Операция приема-передачи
Рассылка полос или блоковузлов сетки
MPI_Scatter
Обмен границ соседнихполос или блоков
MPI_Sendrecv
Сборка и рассылкапогрешности вычислений
MPI_Allreduce
Сборка полос или блоковузлов сетки
MPI_Gather
51-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Лабораторный практикум…
Практикум состоит из 2-х частей:• Практикум для разработки параллельных программ с
использованием технологии OpenMP для вычислительных систем с общей памятью,
• Практикум для разработки параллельных программ с использованием технологии MPI для вычислительных систем с распределенной памятью при использовании ленточной и блочной схемы распределения данных.
В качестве задания повышенной сложности может быть выполнена разработка параллельной программы с совместным использованием технологий MPI и OpenMP.
52-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Лабораторный практикум…
Выполнение заданий практикума рекомендуется проводить группами из 2 человек. Первоначально все обучаемые, выбравшие то или иное задание, выполняют разработку базового варианта работы. Далее после обсуждения результатов разработки каждая группа выбирает индивидуальный вариант постановки задания для продолжения работ.
53-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Лабораторный практикум…
Практическое занятие 1: Разработка параллельных программ с использованием OpenMP
Необходимый теоретический материал Разделы 2 и 3 лекционного материалаЗадание 1: Организация параллельных вычислений при
использовании ленточной схемы разделения данных Разделение вариантов может осуществляться по реализуемым
методам и схемам организации вычислений: - Метод: Метод Гаусса-Зейделя, метод Гаусса-Якоби, - Схема вычислений: прямая схема, чередование полос,
шахматная схема, диагональная волнаОбщее количество вариантов заданий – 5 (для метода Гаусса-Якоби
оправдано использование только прямой схемы вычислений).
54-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Лабораторный практикум…
Задание 2: Организация параллельных вычислений при использовании блочной схемы разделения данных
Разделение вариантов может осуществляться по реализуемым методам, схемам организации вычислений и способам формирования блоков:
- Метод: Метод Гаусса-Зейделя, метод Гаусса-Якоби,
- Способ формирования блоков: блоки фиксированного размера, блоки задаваемого размера.
Общее количество вариантов заданий – 6 (задания, предполагающие использование блоков задаваемого размера, отличаются более высокой трудоемкостью для выполнения).
55-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Лабораторный практикум…
Участники школы выполняют одно из представленных заданий по выбору. По завершении разработки программ участники выполняют несколько вычислительных экспериментов по оценке эффективности параллельных вычислений. По результатам работ проводится общая дискуссия.
56-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Лабораторный практикум…
Практическое занятие 2: Разработка параллельных программ с использованием MPI
Необходимый теоретический материал Разделы 2 и 4 лекционного материала. Задание 1: Организация параллельных вычислений при
использовании ленточной схемы разделения данных Разделение вариантов может осуществляться по реализуемым
методам, используемым режимам передачи данных, схемам организации вычислений:
- Метод: Метод Гаусса-Зейделя, метод Гаусса-Якоби, - Режим передачи данных: стандартный, асинхронный,
Практикум по технологиям параллельного программирования
Литература
1. Технологии параллельного программирования. / Материалы Зимней школы по параллельному программированию. – Н.Новгород: Нижегородский университет, Интел, 2004.
2. Гергель В.П., Стронгин Р.Г. Основы параллельных вычислений для многопроцессорных вычислительных систем. - Н.Новгород, ННГУ, 2001.
3. Информационные материалы по MPI (http://www.mpi-forum.org)
4. Информационные материалы по OpenMP (http://www.openmp.org)
59-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования
Контакты
Нижегородский государственный университетФакультет вычислительной математики и кибернетикиКафедра математического обеспечения ЭВМgergel@unn.ac.ruwww.unn.ac.ruwww.software.unn.ac.ruwww.software.unn.ac.ru/mo_evmwww.itlab.unn.ru
60-60ННГУ, Н.Новгород, Зимняя школа 2004
Практикум по технологиям параллельного программирования