3.4 Преимущества и недостатки динамического анализа

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

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

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

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

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

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

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

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

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

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

 


4. Практическая реализация

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

программу-инструментатор (реализована в рамках отдельной работы);

библиотеку, содержащую реализации функций анализатора.

Библиотека-анализатор была реализована на языке C++. Этот язык легко может быть использован совместно с языками Си и Фортран, которые широко используются для программирования вычислительных задач.

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

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

 

4.1 Инструментация

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

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

должны инструментироваться все доступы к данным с указанием ячейки и операции (чтение или запись),

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

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

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

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

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

Учитывая вышесказанное, был получен следующий интерфейс библиотеки анализатора.

DA_init() – инициализация библиотеки анализа, необходимо вызывать до вызова любой другой функции.

DA_exit() – завершение анализа и сохранение результатов

DA_SagePos(long sageNumber) – сообщает анализатору о начале оператора с идентификатором sageNumber

DA_LinePos(long lineNumber, char * filename) – сообщает анализатору о текущем номере строки и файле.

DA_WriteBegin(void * addr, long size), DA_WriteEnd() – пара функций, отмечающие начало и завершение оператора присваивания – запись в ячейку памяти

DA_Read(void * addr, long size) – чтение ячейки памяти

DA_LoopDo(), DA_LoopFor(), DA_LoopWhile(), DA_LoopDowhile() – начало соответствующего цикла.

DA_LoopIter() – начало очередной итерации цикла

DA_LoopEnd() – завершение цикла

RegArrId(long id, void * addr, long rank, long size[], long elemsize, const char * name) – регистрация нединамического массива в анализаторе.

RegArr(void * addr, long rank, long size[], long elemsize, const char * name) – регистрация динамического массива.

DA_UnregArrId(long id), DA_UnregArr(void * addr) – соответствующие функции отмены регистрации массивов.

 


Информация о работе «Основы распараллеливания программ, их динамический анализ»
Раздел: Информатика, программирование
Количество знаков с пробелами: 42667
Количество таблиц: 4
Количество изображений: 2

Похожие работы

Скачать
68009
0
3

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

Скачать
60039
6
8

... из-за динамической подзагрузки программы из файловой системы) и отлаживать его производительность по той же методике, которая была описана выше применительно к программе целиком. 5. Средство анализа эффективности MPI программ 5.1 Постановка задачи В системе DVM существуют развитые средства анализа эффективности выполнения параллельной DVM-программы. Эти средства являются более мощными, ...

Скачать
74118
11
4

... лишь контекстным анализом. Как было отмечено в [12], применение глубокого статического анализа программ может позволить существенно снизить количество ложных срабатываний и повысить точность обнаружения уязвимостей защиты. 4.3. Использование методов анализа потоков данных для решения задачи обнаружения уязвимостей В отделе компиляторных технологий по контракту с фирмой Nortel Networks ...

Скачать
82492
2
0

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

0 комментариев


Наверх