
Выступкин Параллельное программирование.pptx
- Количество слайдов: 25
Параллельное алгоритмы Доклад на семинаре по специальности Студент гр. 43601/2 Выступкин Владимир 14. 11. 2013
Введение – На протяжении многих лет тактовая частота компьютера ассоциировалось с его производительностью и ее рост автоматически означал снижение времени работы существующих программ q с 1994 по 1998 тактовая частота увеличилась на 300%. q с 2007 по 2011 всего на 33% q Последние 8 лет Intel и AMD фокусируют свои усилия на многоядерных процессорах Последовательные программы не могут работать на многоядерных компьютерах быстрее, чем на однопроцессорных ! 2
Введение в параллельные алгоритмы • Что это такое? Параллельный алгоритм - алгоритм, который может быть реализован по частям на множестве различных вычислительных устройств с последующим объединением полученных результатов и получением корректного результата . • Зачем нужно? – Для увеличения производительности за счет одновременной работы на различных вычислительных • Области применения – Инженерные приложения – Математическом моделирование физических процессов – Вычислительная химия 3
Историческая справка • Возникновение – Возникло в 1960 -х года после появления независимых аппаратных контроллеров • Развитие – Исследования и первоначальные прототипы привели к созданию операционных систем-первых программных систем, организованных как многопоточные параллельные программы. – Появление Ethernet привело к появлению распределенных систем. Появление модели клиент –сервер – Развитие сети Internet привело к рождению Java, Web- броузеров и множества новых приложений 4
Обзор параллельных алгоримов 1)Виды параллельных программ – Параллельные по данным – Параллельные по задачам 2) Парадигмы параллельного программирования – – – Итеративный параллелизм Рекурсивный параллелизм Производители и потребители Клиенты и серверы Взаимодействующие равные 3)Параллельные алгоритмы сортировок – Метод сдваивания – Обменная сортировка слиянием Бэтчера 5
Виды параллельных программ • Параллельные по данным Все процессы выполняют одни и те же действия, но с собственной частью данных Примеры : – Умножение матриц – Сортировка массива • Параллельные по задачам Различные процессы решают различные задачи Примеры : – Редактирование и проверка правописания в Mircosoft Word – Демон в OC Unix 6
Парадигмы параллельного программирования • Итеративный параллелизм – Используются циклы for и while. Каждый процесс вычисляет результаты для подмножества данных • Рекурсивный параллелизм – При наличии независимых рекурсивных вызовов • Производители и потребители – Процесс-производитель выполняет вычисления и выводит поток результатов – Процесс-потребитель вводит и анализирует поток значений • Клиенты и серверы – Процесс-клиент запрашивает сервис, затем ждет обработки – Проецесс-сервер многократно ожидает запрос, обрабатывает его, затем посылает ответ • Взаимодействующие равные – Рабочие процессы равны и их взаимодействие обеспечивается круговым конвеером 7
Параллельный оператор co • Оператор co (concurrent- параллельный) – Первая форма co оператор1; //… //оператор. N; oc – // - символ параллелизма ( ветвь) – Вторая форма сo[i = 0 to n-1]{ a[i] = 0; b[i] = 0 } – Оператор завершает свое выполнение после выполнения всех своих операторов 8
Декларация process • Декларация process – Первая форма process bar 1{ for[i =1 to n]{ write(i); } } – Вторая форма process bar 2[i = 0 to n]{ write(i); } – Выполнение происходит в фоновом режиме – n! Всевозможных результатов на экране 9
Итеративный параллелизм. Умножение матриц(1) Матрицы a[n][n], b[n][n], c[n][n] • Последовательный код for[i = 0 to n-1]{ for[j=0 to n-1]{ c[i][j]=0; for[k = 0 to n-1]{ c[i][j] = c[i][j]+a[i][k]*b[k][j] } } } • Параллельное вычисление строк co[i = 0 to n-1]{ for[j=0 to n-1]{ c[i][j]=0; for[k = 0 to n-1]{ c[i][j] = c[i][j]+a[i][k]*b[k][j] } } } 10
Итеративный параллелизм. Умножение матриц(2) • Вычисление в отдельном потоке всех промежуточных значений co[j = 0 to n-1, i=0 to n-1]{ c[i][j]=0; for[k = 0 to n-1]{ c[i][j] = c[i][j]+a[i][k]*b[k][j] } } • Вычисление с помощью декларации process[i = 0 to n-1, j =0 to n-1]{ c[i][j]=0; for[k = 0 to n-1]{ c[i][j] = c[i][j]+a[i][k]*b[k][j] } } 11
Итеративный параллелизм. Умножение матриц(3) • Размерность задачи, превышающая количество процессов(p- процессов) process worker[w =1 to p]{ int first = (w -1) * n /p; int last = first + n / p -1; for[j = first to last]{ for[j=0 to n-1]{ c[i][j]=0; for[k = 0 to n-1]{ c[i][j] = c[i][j]+a[i][k]*b[k][j]; } } } 12
Рекурсивный параллелизм: адаптивная квадратура • Разделяй и властвуй double quad(double left, right, fleft, fright, lrarea){ double mid =(left + right) / 2; double fmid = f(mid); double larea = (fleft + fmid) * (mid - left) / 2; double rarea = (fmid + fright) * (right - mid) / 2; if(abs(larea + rarea) - lrarea)> EPSILON){ larea = quad(left, mid, fleft, fmid, larea); rarea = quad(mid, right, fmid, fright, rarea); } return (larea+rarea); Интеграл f(x) от a до b : area = quad(a, b, f(a), f(b), ( f(a) +f(b) ) * ( b-a ) / 2); Задание параллельного выполнения рекурсивных вызовов : co larea = quad(left, mid, fleft, fmid, larea); //rarea = quad(mid, right, fmid, fright, rarea); oc 13
Производители и потребители: Каналы ОС Unix • Конвеер- производители и потребители объединены в последовательность, в которой каждый из них принимает выходные данные предшественника и производите входные данные для последующего процесса – Входные данные - канал stdin – Выходные данные - канал stdout – Канал – буфер (Очередь типо FIFO) – Между производителем и 1) sed – потоковый текстовый редактор потребителем сушествует однонаправленны поток информации 2) tbl – процессор таблиц sed –f Script $* | tbl | eqn | groff Macros - 3) eqn – процессор уравнений 4) groff – программа, создающая данные в формате Post. Script из исходных файлов в формате troff Исходные файлы sed tbl eqn groff Post. Script 14
Клиенты и серверы: Файловые системы Отве т Запр Клиент1 ос Сервер рос ап З Клиент. N вет т О Сервер обеспечивает 2 операции: – Чтение – Запись Если файл разделяемый, то запись может вестись только 1 процессом, А читаться он может одновременно Несколькими(Задача о читателях И писателях) 15
Взаимодействующие равные: Распределенное умножение матриц • Взаимодействие управляющий рабочий # a[n] – i-тая строка матрицы a # b[n][n] – матрица b Рабочий 0 # c[n] – i-тая строка матрицы с Результ ат Данны е ые Данн process worker[ i = 0 to n-1]{ Рабочий. N-1 ат double a[n]; ульт Рез double b[n]; double c[n]; receive начальные значения вектора a и матрицы b; for[j = 0 to n -1]{ c[j] = 0; for[ k = 0 to n-1]{ c[j] = c[j] + a[k] * b[k, j]; } } send вектор-результат управляющему процессу; } Управляющий 16
Взаимодействующие равные: Распределенное умножение матриц(2) Схема управляющего процесса process coordinator{ double a[n, n]; double b[n, n]; double c[n, n]; инициализировать a и b; for[i = 0 to n-1]{ send строку I матрицы a процессу worker[i]; send всю матрицу b процессу worker[i]; } for[i = 0 to n-1]{ receive строку i матрицы c от процесса worker[i]; } вывести результат, который теперь в матрице c; } 17
Взаимодействующие равные: Распределенное умножение матриц(3) • Круговой конвеер process worker[i=0 to n-1]{ Рабочий 0 double a[n]; double b[n]; double c[n]; double sum = 0; int next. Col = i; receive строку i матрицы a и столбец i матрицы b; for[k =0 to n-1] sum = sum + a[k]*b[k]; c[next. Col] = sum; for[j =1 to n-1]{ send мой столбец матрицы b следующему процессу; receive новый столбец матрицы b от предыдущего; sum = 0; for[k = 0 to n-1] sum = sum + a[k]*b[k]; if(next. Col ==0) next. Col = n-1; else next. Col = next. Col – 1; c[next. Col] = sum; } send вектор результат управляющему процессу; } … Рабочий. N-1 Управляющий 18
Параллельные алгоримы сортировки: Введение • 19
Параллельные алгоримы сортировки: Метод сдваивания(1) • 20
Параллельные алгоримы сортировки: Метод сдваивания(2) • 21
Параллельные алгоримы сортировки: Обменная сортировка Бэтчера(1) • 22
Параллельные алгоримы сортировки: Обменная сортировка Бэтчера(2) • 23
Заключение • Выводы – Время последовательных программ подходит к концу – Распараллеливание алгоритмов погомает повысить скорость работы – Существует пять основных парадигм параллельного программирования – Многие задачи параллельны по своей природе 24
Cписок литературных источников • Грегори Р. Эндрюс, Основы многопоточного Программирования и распределенного Программирования. Издательский дом “Вильямс” • М. В. Якобовский Параллельные алгоритмы сортировки больших объемов данных • Введение в параллельные алгоритмы http: //www. intuit. ru/studies/courses/1022/296/info -2008 25