Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Средства автоматизации распараллеливания программ (курсовая).pdf
Скачиваний:
39
Добавлен:
28.06.2014
Размер:
319.91 Кб
Скачать

Национальный исследовательский университет Московский энергетический институт

Курсовой проект

по дисциплине

Проектирование программного обеспечения автоматизированных систем

Средства автоматизации распараллеливания программ

выполнил студент группы А-13-08 Буренков Сергей

научный руководитель к.т.н., доц. Шамаева Ольга Юрьевна

преподаватель к.т.н., доц. Меньшикова Ксения Георгиевна

Москва, 2012 год

Оглавление

2

1.

Введение...................................................................................................................................................

2.

Проблемы автоматического распараллеливания..............................................................

5

3.

Средства автоматического распараллеливания.................................................................

7

BERT–77..............................................................................................................................................................

7

FORGExplorer....................................................................................................................................................

9

Kuck Accelerator Package.............................................................................................................................

9

ДВОР.....................................................................................................................................................................

9

4.

Отладка параллельных программ...........................................................................................

12

5.

Литература...........................................................................................................................................

13

 

 

Введение

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

Мечта о распараллеливающих компиляторах появилась в начале 70-х гг. прошлого века, практически сразу после появления первого параллельного суперкомпьютера ILLIAK-IV. Распараллеливающие компиляторыдолжны были решить задачу переноса (на уровне исходного кода) накопленныхбиблиотек прикладных программ с последовательных компьютеров на параллельные. Было совершено множество попыток написанияраспараллеливающих компиляторов. Профессор Владимир Александрович Вальковский представил обзор разрабатывавшихся в СССР распараллеливающих компиляторов. Обзор охватил 18 компиляторов, один из которых имеет объем 10 тыс. строк, остальные значительно меньшего объема. Для сравнения, современные распараллеливающие системы и компиляторы с функциями автоматического распараллеливания (Intel,

2

Microsoft, GCC) имеют объем порядка 100 тыс. или даже миллиона строк и при этом для эффективного переноса старых последовательных программ на новые параллельные компьютеры иногда программу приходится переделывать. [1]

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

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

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

1) Разработка высокоуровневых языков параллельного программирования (HPF, OpenMP-языки, DVM-языки, CoArray Fortran, UPC, Titanium, Chapel, X10, Fortress);

2) Создание систем автоматизированного распараллеливания

(CAPTools/Parawise, FORGE Magic/DM, BERT77 и др.), в которых программист активно вовлечен в процесс распараллеливания. [1]

Изначально высокие требования к эффективности выполнения параллельных программ и последовавшие затем изменения в архитектуре параллельных систем ЭВМ привели к тому, что в настоящее время нет ни одного параллельного общепризнанного высокоуровневого языка параллельного программирования для современных высокопроизводительных систем.

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

3

параллельного программирования вынуждало использовать в качестве выходного

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

Полученные на них программы сложны для восприятия и внесения в них

модификаций. Это приводит к необходимости повторять процесс

распараллеливания при модификации исходной последовательной программы. Все

это вызывает огромные трудности при внедрении таких систем.

Все больше специалистов стали предлагатьиспользовать для разработки

параллельных программ языки с неявным параллелизмом, при программировании

на которых не требуется знать архитектуру параллельной ЭВМ, иавтоматически

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

особенно привлекательно использовать Fortran и C/C++, поскольку их в основном и

используют программисты при решениизадач, наиболее остро требующих

распараллеливания.

Преобразование последовательной программы в параллельную можно

представить состоящим из двух основных этапов.

На

 

этапе проводится автоматизированное исследование и

преобразование программистом последовательной программы сцелью получить

 

первом

 

потенциальную программу (последовательную программу, которую можно

автоматически преобразовывать в эффективную параллельную программу) и задать

необходимые ей свойства (через диалог или в виде специальных аннотаций в тексте

программы). Например, в случае косвенной индексации элементов массива

статический анализатор может сообщить о возможной зависимости между витками

цикла, а программистможет указать, что зависимости нет.

На

 

этапе автоматически распараллеливающий компилятор

преобразуетвторпотенциальном параллельную программу в параллельную программу для заданной ЭВМ.

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

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

4

Проблемы автоматического

распараллеливания

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

Сохранениесинтаксической исемантической корректности программы

при применении преобразований

Преобразования программ в высокоуровневом внутреннем представлении приводят к актуальности проверок нового типа: проверок на сохранение преобразованиями синтаксической и семантической корректности. [2]

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

класса программ

Определение информационных зависимостей в программе основа распараллеливающихи оптимизирующих преобразований программ. Известные методы не всегда могут точно автоматически установить информационные зависимости в программе. Подавляющее большинство таких методов ориентировано на такназываемый линейный класс программ. Но даже для этого класса программ иногда в принципе невозможно автоматически точно установить зависимость. [3] Более сложные проблемы определения информационных зависимостей

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

1) на наличие зависимости влияют внешние переменные;

2) в случае нелинейной зависимости индексных выражений переменных от счетчиков циклов;

3) при наличии внешнихпеременных в индексных выражениях массивов; 4) наличие псевдонимов.

Проблемыавтоматизации распараллеливанияна вычислительные

Размещениесистемымассивовв распределенной памяти с оптимизацией затрат на межпроцессорные пересылки. Минимальные затраты напересылки реализуются при вычислениях на одном процессоре. Минимизировать следует суммарное время пересылок и вычислений. Следует отметить, что время пересылок зависит от коммуникационного устройства и размещения данных в параллельной памяти. Здесь же возникает задача оптимальных переразмещений данных при различных способах организациираспределенной памяти. [1]

распределенной памятью

5

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

Дляалгоритмрешенияоднойв и той же задачи на различных вычислительных архитектурах могут быть эффективны различные алгоритмы. Например, при перемножении матриц небольших размерностей (100-1000 элементов) для процессоров, у которых время выполнения умножения чисел дольше времени обращения к памяти (70-ые годы), эффективен алгоритмШтрассена. Для нынешних процессоров стандартный алгоритм перемножения матриц значительно эффективней. Таким образом, возникает проблема для одних и тех же задач разрабатывать различные алгоритмы дляразличных вычислительных архитектур, с различными способами организации памяти, с различными коммуникационными системами. [3]

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

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

6