Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник лекций по предмету Методы Программирова...doc
Скачиваний:
42
Добавлен:
22.09.2019
Размер:
4.83 Mб
Скачать

Содержание

Введение 5

Лекция 1 7

Моделирование и анализ параллельных вычислений 7

Модель вычислений в виде графа "операции – операнды 8

Описание схемы выполнения параллельного алгоритма 9

Определение времени выполнения параллельного алгоритма 10

Правила разработки алгоритмов 11

Лекция 2 12

Программирование параллельных алгоритмов 12

Технология MPI 12

Введение в библиотеку MPICH 13

Структура параллельной программы с использованием MPI 14

Передача/прием сообщений между отдельными процессами 15

Лекция 3 18

Использование модульной структуры 19

Определение времени выполнения программ 19

Контроль выполнения программ 20

Передача данных от одного процесса всем процессам программы. 21

Пример использования широковещательной рассылки 22

Лекция 4 23

Передача данных от всех процессов одному процессу 23

Пример коллективного вызова (без обмена) 24

Аварийное завершение параллельной программы 25

Оценка коммуникационных затрат для кластерных систем 25

Режимы передачи данных MPI 26

Лекция 5 27

Организация неблокирующих обменов данными между процессами 28

Одновременное выполнение передачи и приема 30

Группа процессоров и коммутаторов 31

Показатели эффективности в параллельных алгоритмах 35

Модельная задача – вычисление частных сумм 36

Последовательный алгоритм суммирования 37

Лекция 6 37

Каскадная схема суммирования 38

Каскадная схема с асимптотически ненулевой эффективность 39

Построение частичных сумм 40

Оценка максимального параллелизма 41

Анализ масштабируемости параллельных вычислений 43

Верхняя граница времени выполнения параллельного алгоритма 44

Факторы, влияющие на производительность, и способы ее повышения 45

Лекция 7 46

Принципы разработка параллельных алгоритмов 46

Моделирование при проектировании параллельных алгоритмов 48

Этапы разработки параллельных алгоритмов 49

Умножение матриц при ленточной схеме разделения данных 57

Лекция 8 59

Параллельное решение систем линейных уравнений 59

Построение параллельного алгоритма 63

Масштабирование и распределение подзадач по процессорам. 63

Анализ эффективности 64

Лекция 9 66

Параллельные методы сортировки 66

Принципы распараллеливания 66

Масштабирование параллельных вычислений 67

Пузырьковая сортировка 69

Алгоритм чет-нечетной перестановки 69

Определение подзадач и выделение информационных зависимостей 70

Масштабирование и распределение подзадач по процессорам 71

Анализ эффективности 71

Лекция 10 73

Параллельные вычисления при решении задач на графах 73

Программная реализация параллельного алгоритма Флойда 75

Определение подзадач 76

Анализ эффективности 77

Построение минимального остова. Выделение подзадач 77

Анализ информационных связей 77

Лекция 11 78

PVM (Параллельные виртуальные машины) 79

Работа PVM 80

Структура идентификатора TD 81

Модель передачи сообщений 81

Настройка PVM 82

Пример простейшей программы 82

Лекция 12 83

Структура программы PVM 83

Выводы по PVM 84

Выводы по PVM: Классификация вычислительных систем 84

Алгоритмы предварительного распределения данных (графы) 85

Режимы параллельных вычислений с общей памятью 86

Основные обозначения псевдокода 87

Распределение данных в EREW 87

Лекция 13 88

Параллельное программирование с использованием общей памяти 88

Многопоточное программирование 88

Спецификация POSIX Threads 89

Пример программы с использованием POSIX Threads 89

Механизмы синхронизации потоков 89

Лекция 14 92

Среда Open MP 92

Основные компоненты 93

Модель выполнения программы 93

Модель памяти 95

Структура программы 95

Опции. Основные правила 96

Синхронизация 96

Лекция 15 97

Обзор средств параллельного и распределенного программирования 97

Литература 100

Введение

Применение параллельных вычислительных систем (ПВС) является стратегическим направлением развития вычислительной техники. Это обстоятельство вызвано не только принципиальным ограничением максимально возможного быстродействия обычных последовательных ЭВМ, но и практически постоянным наличием вычислительных задач, для решения которых возможностей существующих средств вычислительной техники всегда оказывается недостаточно.

Организация параллельности вычислений, когда в один и тот же момент выполняется одновременно несколько операций обработки данных, осуществляется, в основном, за счет введения избыточности функциональных устройств (многопроцессорности). В этом случае можно достичь ускорения процесса решения вычислительной задачи, если осуществить разделение применяемого алгоритма на информационно независимые части и организовать выполнение каждой части вычислений на разных процессорах. Подобный подход позволяет выполнять необходимые вычисления с меньшими затратами времени, и возможность получения максимально-возможного ускорения ограничивается только числом имеющихся процессоров и количеством "независимых" частей в выполняемых вычислениях.

Можно выделить следующий ряд общих проблем, возникающих при использовании параллельных вычислительных систем:

  1. Потери производительности для организации параллелизма - согласно гипотезе Минского, ускорение, достигаемое при использовании параллельной системы, пропорционально двоичному логарифму от числа процессоров (т.е. при 1000 процессорах возможное ускорение оказывается равным 10).

Комментируя данное высказывание, можно отметить, что, безусловно, подобная оценка ускорения справедлива при распараллеливании определенных алгоритмов. Вместе с тем существует большое количество задач, при параллельном решении которых достигается практически 100%-е использование всех имеющихся процессоров параллельной вычислительной системы.

  1. Существование последовательных вычислений - в соответствии с законом Амдаля ускорение процесса вычислений при использовании p процессоров ограничивается величиной:

S≤1/(f+(1-f)/p) ,

где f есть доля последовательных вычислений в применяемом алгоритме обработки данных (т.е., например, при наличии всего 10% последовательных команд в выполняемых вычислениях эффект использования параллелизма не может превышать 10-кратного ускорения обработки данных).

Данное замечание характеризует одну из самых серьезных проблем в области параллельного программирования (алгоритмов без определенной доли последовательных команд практически не существует). Однако часто доля последовательных действий характеризует не возможность параллельного решения задач, а последовательные свойства применяемых алгоритмов. Как результат, доля последовательных вычислений может быть существенно снижена при выборе более подходящих для распараллеливания алгоритмов.

  1. Зависимость эффективности параллелизма от учета характерных свойств параллельных систем - в отличие от единственности классической схемы фон Неймана последовательных ЭВМ, параллельные системы характеризуются существенным разнообразием архитектурных принципов построения, и максимальный эффект от параллелизма может быть получен только при полном использовании всех особенностей аппаратуры; как результат, перенос параллельных алгоритмов и программ между разными типами систем становится затруднительным ( если вообще возможен).

Для ответа на данное замечание следует отметить, что "однородность" последовательных ЭВМ также является кажущейся и эффективное использование однопроцессорных компьютеров тоже требует учета свойств аппаратуры. С другой стороны, при всем разнообразии архитектур параллельных систем, тем не менее, существуют и определенные "устоявшиеся" способы обеспечения параллелизма ( конвейерные вычисления, многопроцессорные системы и т.п.). Кроме того, инвариантность создаваемых параллельных программ может быть обеспечена и при использовании типовых программных средств поддержки параллельных вычислений (программных библиотек MPI, PVM и др.).

Существующее программное обеспечение ориентировано в основном на последовательные ЭВМ – данное замечание состоит в том, что для большого количества задач уже имеется подготовленное программное обеспечение и все эти программы ориентированы главным образом на последовательные ЭВМ; как результат, переработка такого количества программ для параллельных систем вряд ли окажется возможной.

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

Подводя итог всем перечисленным проблемам и замечаниям, можно заключить, что параллельные вычисления являются перспективной (и очень привлекательной) областью применения вычислительной техники и представляют собой сложную научно-техническую область деятельности. Тем самым, знание современных тенденций развития ЭВМ и аппаратных средств для достижения параллелизма, умение разрабатывать модели, методы и программы параллельного решения задач обработки данных следует отнести к числу важных квалификационных характеристик современного специалиста по прикладной математике, информатике и вычислительной технике.

Проблематика параллельных вычислений является чрезвычайно широкой областью теоретических исследований и практически выполняемых работ и обычно подразделяется на следующие направления деятельности:

  • разработка параллельных вычислительных систем.

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

  • формирование общих принципов разработки параллельных алгоритмов для решения сложных вычислительно трудоемких задач .

  • создание и развитие системного программного обеспечения для параллельных вычислительных систем.

  • создание и развитие параллельных алгоритмов для решения прикладных задач в разных областях практических.

Лекция 1

Моделирование и анализ параллельных вычислений.

При разработке параллельных алгоритмов решения сложных научно-технических задач принципиальным моментом является анализ эффективности использования параллелизма.

Эффективность оценивается в нескольких терминах, главным из которых является «ускорение»:

- Ускорение по отношению к конкретному последовательному алгоритму (оценка эффективности распараллеливания конкретного алгоритма).

- Оценка ускорения по отношению к конкретной задаче. Основывается на анализе моделей информационных зависимостей (оценка эффективности параллельного способа решения задачи).

Модель вычислений в виде графа "операции – операнды".

Данная модель может использоваться для описания существующих

информационных зависимостей в выбираемых алгоритмах решения задач.

Представим множество операций, выполняемых в исследуемом алгоритме решения вычислительной задачи, и существующие между операциями информационные зависимости в виде ациклического ориентированного графа G(V, U)

  • Граф не имеет контуров.

  • V- множество вершин (операции)

  • U - множество ребер (информационные зависимости)

  • Множество ориентированных дуг – зависимость операций от результатов предыдущих операций.

  • Предполагается, что выполнение каждой операции =1, а передача данных осуществляется мгновенно.

Примеры:

Рис. 1

S=(x2-x1)*(y2-y1)= x2 *y2 - x2 *y1 – x1 *y2 ­+ x1 *y1

Рис. 2

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

В рассматриваемой вычислительной модели алгоритма вершины без входных дуг могут использоваться для задания операций ввода, а вершины без выходных дуг – для операций вывода.

Описание схемы выполнения параллельного алгоритма (модель: «операции – операнды»).

Если между какими-то вершинами нет пути, то это означает, что соответствующие операции могут выполняться параллельно.

Пример: операции (*) могут выполняться параллельно.

Пусть имеется p процессов, тогда для параллельного выполнения вычислений необходимо задать множество (расписание):

Hp = {(i, pi, ti)} ,

в котором для каждой операции i Є V указывается номер используемого для выполнения операции процессора pi и время начала выполнения операции ti. Завершение операции происходит в момент ti+1.

Для того чтобы расписание было реализуемым, необходимо выполнение следующих требований при задании множества Hp:

  1. Для i, j Є V если ti=tj ⟹ pi≠pj , т.е. один и тот же процессор не должен назначаться разным операциям в один и тот же момент;

  2. Для i, j Є V если дуга (i, j) Є U ⟹ ti ≥ ti+1, т.е. к назначаемому моменту выполнения операции все необходимые данные уже должны быть вычислены.