Скачать презентацию Динамический анализ программ на языке Фортран Выполнил студент Скачать презентацию Динамический анализ программ на языке Фортран Выполнил студент

3902f3697f66f5704d3abfb0be00007f.ppt

  • Количество слайдов: 15

Динамический анализ программ на языке Фортран Выполнил: студент 527 группы Остапенко Георгий Юрьевич Научный Динамический анализ программ на языке Фортран Выполнил: студент 527 группы Остапенко Георгий Юрьевич Научный руководитель: Крюков Виктор Алексеевич 1

Автоматизированное распараллеливание Фортран-программ Система автоматизированного распараллеливания Фортран-программ состоит из пяти модулей: 1. Диалоговая оболочка Автоматизированное распараллеливание Фортран-программ Система автоматизированного распараллеливания Фортран-программ состоит из пяти модулей: 1. Диалоговая оболочка 2. Анализатор 3. Эксперт 4. Генератор 5. База данных program DISTR 1 parameter( AN 1=8, BN 1 = 4 ) integer A 1(AN 1) integer B 1(BN 1) integer i, isum … end Последовательная программа Пользователь program DISTR 1 parameter( AN 1=8, BN 1 = 4 ) integer A 1(AN 1) integer B 1(BN 1) integer i, isum ccdvm$ distribute A 1(BLOCK) ccdvm$ distribute B 1(BLOCK) ccdvm$ dynamic B 1 … end Параллельная программа Анализатор Диалоговая оболочка База данных Эксперт Генератор 2

Динамический анализ в системе САПФОР Области применения динамического анализа в системе САПФОР: 1. анализ Динамический анализ в системе САПФОР Области применения динамического анализа в системе САПФОР: 1. анализ вызовов процедур и функций; 2. анализ программ на языках Си и Си++; 3. надежда на то, что динамический анализ будет выполняться быстрее статического; 4. использование динамического анализатора в качестве контроля работы статического анализатора. 3

Задачи анализатора n n n Выявление существующих зависимостей по данным. Приведение исходной программы во Задачи анализатора n n n Выявление существующих зависимостей по данным. Приведение исходной программы во внутреннее представление системы САПФОР. Помещение полученных результатов в базу данных системы. 4

Зависимости по данным между операторами программы Между операторами программы существует зависимость по данным, если Зависимости по данным между операторами программы Между операторами программы существует зависимость по данным, если эти операторы обращаются к одной переменной, и хотя бы один из них совершает запись в эту переменную. Типы зависимостей: 1. 2. 3. прямая зависимость: S 1: S 2: обратная зависимость: S 1: S 2: зависимость по записи: S 1: S 2: A(i) = … … = A(i) = … A(i) = … 5

Динамический анализ с использованием дерева контекстов Дерево контекстов CT(p) программы p – дерево с Динамический анализ с использованием дерева контекстов Дерево контекстов CT(p) программы p – дерево с тремя типами вершин: процедуры, циклы, операторы доступа к памяти. Две вершины в дереве CT(p) соединены ребром, если соответствующие операторы вложены друг в друга, или если один из них вызывает другой. Корнем дерева контекстов CT(p) является программная единица PROGRAM. Контекстом называется путь в дереве контекстов CT(p) от корня дерева до какой-либо вершины. Цепочкой векторов итерации IVC(a) доступа к памяти a называется список векторов итераций, соответствующих контексту C(a) на момент доступа a. Если контекст не содержит ни одного цикла, то вектор итераций будет пустым вектором. Виртуальной точкой доступа a к памяти называется пара VP(a) = (C(a), IVC(a)), где C(a) – контекст доступа a, IVC(a) – цепочка векторов итераций, соответствующая доступу a к памяти. 6

Алгоритм нахождения прямых зависимостей Для каждой переменной и каждого элемента массива хранятся все точки Алгоритм нахождения прямых зависимостей Для каждой переменной и каждого элемента массива хранятся все точки её чтения и записи. При очередном доступе на чтение выполняется следующий анализ: 1. определяем адрес переменной, к которой происходит доступ на чтение ar; 2. для каждой предшествующей записи в эту переменную aw определяем виртуальную точу доступа VP(aw); 3. находим контекст CL – длиннейший общий подпуть контекстов C(ar) и C(aw); 4. находим контекст Cm – длиннейший контекст, являющийся подконтекстом контекста CL таким, что соответствующие цепочки IVC(ar) и IVC(aw) содержат одинаковые значения на отрезке, соответствующем контексту Cm; 7

5. пусть r и w – векторы, образованные отрезками цепочек IVC(ar) и IVC(aw), не 5. пусть r и w – векторы, образованные отрезками цепочек IVC(ar) и IVC(aw), не вошедшими в контекст Cm; вычислим расстояние зависимости как d = r – w и положим d=[] иначе; 6. пусть f 1 – самый «глубокий» цикл в контексте СL, добавим зависимость между итерациями цикла f 1 с расстоянием d; 7. пусть st 1 и st 2 – вершины, соответствующие первому и второму доступу к памяти и непосредственно следующие за CL; добавить зависимость между операторами st 1 и st 2 с расстоянием d. Аналогичные алгоритмы можно использовать для нахождения обратных зависимостей и зависимостей по записям. Работа этого алгоритма может быть значительно ускорена, если регистрировать только зависимость между двумя ближайшими доступами к памяти. 8

Требования по приведению программы к внутреннему представлению (результат работы анализатора) Основная информация о программе, Требования по приведению программы к внутреннему представлению (результат работы анализатора) Основная информация о программе, которая необходима для работы эксперту, и должна быть помещена в базу данных анализатором, следующая: 1. информация о файлах программы (имя файла); 2. информация о программных единицах программы (имя программной единицы, имя файла, номер строки, корень дерева циклов программной единицы); 3. информация о переменных (имя переменной, идентификатор программной единицы, в которой она объявлена, тип переменной, число измерений массивов); 4. описание размеров массивов (идентификатор массива, номер размерности массива, нижняя и верхняя границы измерения); 9

5. информация о выражениях (символьное представление выражения); 6. информация о циклах (номер строки начала 5. информация о выражениях (символьное представление выражения); 6. информация о циклах (номер строки начала цикла, оценка времени выполнения цикла без учёта вложенных циклов, идентификатор управляющей переменной цикла, начальное и конечное значения переменной цикла, шаг изменения переменной цикла, идентификатор объемлющего цикла, признак тесной вложенности в объемлющий цикл); 7. информация об операторах и структуре программы (номер строки, в которой расположен оператор, идентификатор объемлющего цикла, следующие операторы и вероятности перехода на них); 8. информация об обращениях к переменным (идентификатор оператора, в котором произошло обращение, идентификатор переменной, тип обращения, значения индексов при обращении к элементам массивов); 9. информация о вызовах подпрограмм (идентификатор оператора, в котором произошёл вызов, идентификатор подпрограммы, информация о фактических параметрах); 10. информация о зависимостях (идентификатор цикла, в котором обнаружена зависимость, тип зависимости, переменная, по которой обнаружена зависимость). 10

Практическая реализация Блок регистрации и хранения информации о переменных и массивах Блок регистрации и Практическая реализация Блок регистрации и хранения информации о переменных и массивах Блок регистрации и хранения информации о программных единицах Интерфейс с инструментатором Блок построения и хранения дерева контекстов Входные данные Блок регистрации и хранения информации о циклах программы Ядро анализатора Результат анализа Блок регистрации и хранения информации о доступах к памяти Блок регистрации и хранения информации о зависимостях в программе Интерфейс с базой данных Блок регистрации и хранения информации о файлах программы Архитектура динамического анализатора 11

Общая схема работы динамического анализатора Исходный текст программы База данных системы распараллеливания САПФОР Инструментатор Общая схема работы динамического анализатора Исходный текст программы База данных системы распараллеливания САПФОР Инструментатор Текст программы с вызовами функций динамического анализатора Статическая библиотека функций динамического анализатора Результаты анализа Стандартный компилятор FORTRAN Исполняемая программа Входные данные 12

Результаты тестирования Размеры матрицы 10 х10 Количест Полное время анализа Необходим Объём во ый Результаты тестирования Размеры матрицы 10 х10 Количест Полное время анализа Необходим Объём во ый объём результир Время анализир оперативн ующей БД непосредств занесения ой памяти уемых енного результатов итераций анализа в БД 3 1, 5 с 1 с 100 х100 3 (20 итераций внешнего цикла) 550 Мб 48 Кб 279 с 445 с 112 с 40 Кб 512 Мб 467 с все 40 Кб 0, 5 с 188 с 10 Х 10 8 Мб 333 с Метод Якоби 13

Размеры матрицы 10 х10 Количест Полное время анализа Необходи Объём во мый объём результир Размеры матрицы 10 х10 Количест Полное время анализа Необходи Объём во мый объём результир Время анализир оперативн ующей БД непосредств занесения ой памяти уемых енного результато итераций анализа в в БД 3 1, 8 с 1 с 100 х100 3 (20 итераций внешнего цикла) 530 Мб 50 Кб 564 с 1452 с 355 с 40 Кб 650 Мб 872 с все 40 Кб 0, 8 с 308 с 10 Х 10 10 Мб 1097 с Метод последовательной верхней релаксации 14

Заключение В рамках дипломной работы был реализован динамический анализатор программ, написанных на языках Фортран. Заключение В рамках дипломной работы был реализован динамический анализатор программ, написанных на языках Фортран. Программный продукт представляет собой статическую библиотеку функций динамического анализа, написанную на языке Си++. Объём написанного программного кода превышает шесть тысяч строк. Динамический анализатор показал свою неприменимость для полноо анализа реальных программ из-за своей ресурсоёмкости. Даже тестовый пример метода Якоби для матриц размером 100 х100 не может быть проанализирован полностью. В связи с этим были предприняты шаги в направлении уменьшения накладных расходов на динамический анализ. Была реализована возможность анализа лишь угловых итераций циклов, что даёт возможность анализировать и задачи с большими объёмами данных. Динамический анализатор был отлажен и протестирован на тестовых вычислительных программах. 15