Дипломная работа: Динамический контроль корректности OpenMP-программ
Аннотация
Важным этапом процесса создания любого программного продукта является его отладка. При чем данный этап по количеству затраченных на него средств зачастую сопоставим со всеми остальными стадиями разработки программного продукта. Особенно сильно возрастает трудоемкость отладки в случае, если программа была написана с использованием параллельных вычислений. Данная работа посвящена автоматическому нахождению наиболее распространенных ошибок, возникающих при использовании OpenMP конструкций в Fortran-программах. В ходе работы были разработаны и реализованы алгоритмы нахождения таких ошибок, а также проведено сравнение полученного инструмента с существующими аналогами.
Оглавление
1 Введение. 3
1.1 Технология OpenMP. 3
1.2 Ошибки, возникающие при использовании OpenMP. 4
1.3 Отладка параллельных программ. 8
1.4 Цель работы.. 9
2 Постановка задачи. 10
3 Обзор существующих отладчиков. 11
3.1 Сравнение отладчиков. 12
3.2 Выводы.. 13
4 Динамический контроль корректности. 14
4.1 Схема работы отладчика. 14
4.2 Построение дерева контекстов. 15
4.3 Обнаружение ошибок общей памяти. 18
4.3.1 Представление критических областей. 18
4.3.2 Описание алгоритма. 20
4.4 Расширенное дерево контекстов. 23
4.5 Обнаружение ошибок инициализации. 24
5 Практическая реализация. 27
5.1 Интерфейс отладчика. 27
5.2 Объединение алгоритмов. 28
5.3 Оптимизация отладчика. 30
5.4 Результаты тестирования. 31
Литература. 38
1 Введение
1.1 Технология OpenMP
Стандарт OpenMP[1] создавался для упрощения разработки параллельных программ для вычислительных систем с общей памятью, а так же для распараллеливания уже существующих последовательных программ. Стандартом определены специальные комментарии (команды препроцессору для C/C++) – директивы компилятору, непосредственно управляющие параллелизмом программы, вспомогательные функции, позволяющие создавать алгоритмы, ориентированные на параллельное выполнение, и переменные окружения, управляющие процессом выполнения параллельных областей.
Программа, использующая директивы OpenMP, состоит из последовательных и параллельных участков. В начале ее выполнения создается одна нить, которая существует на протяжении всей программы. Когда какая-либо нить доходит до параллельного участка, то порождаются дополнительные нити, выполняющие вместе с ней этот участок. Группой нитей называется множество нитей, созданных при входе в данную параллельную область, включая породившую их нить, называемую главной. Нить, достигшая конца параллельной области, дожидается всю группу. Когда все нити одной группы дойдут до конца параллельного участка, все нити кроме главной освобождаются, а главная нить продолжает выполнение программы. На рисунке 1 показан пример создания и освобождения нитей в параллельных областях в случае наличия вложенных параллельных участков.
--> ЧИТАТЬ ПОЛНОСТЬЮ <--