Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

malyshkin_ve_korneev_vd_-_parallelnoe_programmirovanie_multikompyuterov

.pdf
Скачиваний:
63
Добавлен:
28.03.2016
Размер:
3.12 Mб
Скачать

 

i +1

 

i +1

вывi

i +1

 

ai

i

взi

i

i

bi

1

1

 

1

 

 

 

 

 

 

 

 

z

 

x

 

 

qu

 

Рис. 7.32

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

Реализация системы автоматизации проектирования ДС (САПР) в виде ССПП открывает следующие пути улучшения качества проектируемых ДС, Прежде всего в ССПП допускаются различные преобразования (V,W)-

плана, в частности, выделение и соединение подопераций структурированной операции, чему в ДС соответствует модификация ее структуры. Такие модификации делаются по директивам пользователя либо автоматически в

348

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

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

349

вычисления fa, из которых при раскрытии a выбирается с

использованием «подсказок» пользователя лучший.

350

XIII. ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ В СИСТЕМАХ MPI и OpenMP.

Вычислительные системы с распределенной и общей памятью являются доминирующими на рынке суперкомпьютеров. Самым распространенными системами параллельного программирования, ориентированными на эти вычислительные системы, являются MPI (Message Passing Interface) [20] и OpenMP [21]. На данный момент это наиболее развитые системы параллельного программирования.

В главе приведены примеры параллельного программирования на системах обоих типов. Рассматриваются примеры параллельного программирования алгоритмов решения следующих задач: умножения матрицы на матрицу, решение систем линейных уравнений методом Гаусса и итерационными методами. Причем для сравнения алгоритм каждой задачи запрограммирован как в MPI так и в OpenMP. На этих примерах видна разница в программировании на распределенных системах и системах с общей памятью.

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

8.1. Введение 8.1.1. Модели параллельного программирования

Модели параллельного программирования рассматриваются

сразных точек зрения:

1)С точки зрения доступа к разделяемым данным и синхронизации процессов. В настоящее время в области научно-

351

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

2)С точки зрения построения ветвей параллельного алгоритма.

MPMD - модель вычислений (Multiple program - Multiple Data). Параллельная программа представляет собой совокупность автономных процессов, функционирующих под управлением своих собственных программ и взаимодействующих посредством стандартного набора библиотечных процедур для передачи и приема сообщений.

SPMD - модель вычислений (Single program - Multiple Data). Все процессы исполняют в общем случае различные ветви одной и той же программы. Такой подход обусловлен тем обстоятельством, что задача может быть достаточно естественным образом разбита на подзадачи, решаемые по одному алгоритму. Кратко, суть этого способа заключается в следующем. Исходные данные задачи распределяются по процессам (ветвям параллельного алгоритма), а алгоритм является одним и тем же во всех процессах, но действия этого алгоритма распределяются в соответствии с имеющимися в этих процессах данными. Распределение действий алгоритма заключается, например, в присвоении разных значений переменным одних и тех же циклов в разных ветвях, либо в исполнении в разных ветвях разного количества итераций одних и тех же циклов и т.п. Другими словами, процесс в каждой ветви следует различными путями выполнения на той же самой программе. На практике чаще всего встречается именно эта модель программирования.

3)С точки зрения размеров (по объему и времени) обрабатываемых параллельных блоков.

Это методы крупнозернистого, среднезернистого и мелкозернистого распараллеливания.

8.1.2.Модель передачи сообщений [22,23]. В модели передачи сообщений каждый процесс имеет собственное

352

локальное адресное пространство. Обработка общих данных и синхронизация осуществляется посредством передачи сообщений.

В рамках данной модели параллельного программирования реализуются две подмодели с точки зрения построения ветвей параллельной программы. MPMD- модель вычислений и SPMD-модель вычислений.

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

Самой распространенной системой параллельного программирования, поддерживающим данную модель, является система MPI.

8.1.3.Модель с общей памятью [23]. В модели с общей памятью процессы разделяют общее адресное пространство. Так как нет ограничений на использование общих данных, то программист должен явно специфицировать общие данные и упорядочивать доступ к ним с помощью средств синхронизации.

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

В рамках данной модели параллельного программирования реализуются, как и в предыдущем случае, две подмодели с точки зрения построения ветвей параллельной программы: MPMD-модель вычислений и

353

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

Обобщение и стандартизация моделей с общей памятью привели к созданию стандарта системы параллельного программирования OpenMP.

Рассмотренные выше модели МПС и МОП, помимо поддержки на языковом уровне, поддерживаются архитектурами таких самых современных суперкомпьютеров как: ASCI RED (более 9000 Pentium PRO/200 объединены в единую систему, имеет быстродействие около 3,2 Tflops), и ASCI WAIT (8192 - , имеет быстродействие 12,2 Tflops), Cray T3D, Cray T3E, IBM SP2 и многими другими.

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

В рамках данной модели параллельного программирования реализуются две подмодели с точки зрения построения ветвей параллельной программы. MPMD- модель вычислений и SPMD-модель вычислений.

Эта модель реализуется методом крупнозернистого распараллеливания.

354

Модель освобождает программиста от рутинной и трудоемкой работы по распределению глобальных массивов на локальные массивы процессов, по управлению передачей сообщений и синхронизации доступа к общим данным. Однако применение этой модели является еще предметом исследований. Результаты исследований показывают, что эффективность некоторых параллельных алгоритмов в модели МПД сравнима с эффективностью реализации в моделях МПС и МОП.

8.1.5. В чем особенность и сложность параллельного программирования. Чтобы представить себе трудности параллельного программирования нужно ответить на вопрос: в чем одно из важных отличий в написании последовательной и параллельной программ? Если это параллельная программа для систем с передачей сообщений, то прежде чем создавать такую параллельную программу, необходимо знать общую архитектуру параллельной машины и топологию межпроцессорных связей, которая существенно используется при программировании. Это связано с тем, что невозможно создание средства автоматического распараллеливания, которое позволяло бы превращать последовательную программу в параллельную, и обеспечивало бы ее высокую производительность. Поэтому в параллельной программе приходится в явном виде задавать операторы создания топологий коммуникационной сети и операторы обменов данными между процессорами, что приводит к снижению уровня программирования. Кроме того, пользователю нужно обеспечивать правильность взаимодействий множества параллельно выполняющихся независимо друг от друга процессов, что затрудняет отладку программы. При написании же последовательной программы знать архитектуру процессора, на котором будет исполняться

355

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

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

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

8.1.6. Почему выбраны MPI, OpenMP и HPF ? На данный момент это наиболее развитые системы параллельного программирования. Как и всякие системы, они постоянно развиваются и расширяются. MPI является сейчас самой развитой системой параллельного программирования с передачей

356

сообщений. Наиболее важным свойством MPI является то, что он позволяет создавать переносимые параллельные программы, достаточно эффективные и надежные.

Переносимость обеспечивается:

1)такими механизмами, как: определение виртуального компьютера (программно реализуемого) и возможностью задания произвольного количества таких виртуальных компьютеров в системе независимо от количества физических компьютеров.

2)заданием виртуальных топологий (программно

реализуемых).

Отображение

виртуальных

коммуникационных топологий на

физическую

осуществляется

системой

MPI.

Виртуальные

топологии обеспечивают оптимальное

приближение

архитектуры системы к структурам задач при хорошей переносимости задач.

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

4)способностью параллельных программ выполняться на гетерогенных системах, то есть на системах, состоящих из процессоров с различной архитектурой. MPI обеспечивает вычислительную модель, которая скрывает много архитектурных различий в работе процессоров. MPI автоматически делает любое необходимое преобразование данных и использует правильный протокол связи, посылается ли код

357

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]