2.1. Алгоритм разбиения программы на нити

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

Построение ценовой модели, отражающей свойства локальности

Разбиение программы на нити

Дополнительные оптимизации

О некоторых задачах анализа и трансформации программ

Рис. 1. Пример функции и ее DDG.

2.1.1. Граф зависимостей по данным

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

Представлением, обладающим всеми необходимыми нам свойствами, является иерархический граф зависимостей по данным, используемый в [9] (data dependence graph, DDG). Узлом такого графа может являться:

Простой оператор (сложение, умножение, сравнение, присваивание и т.д.)

Более сложный оператор (условный оператор, оператор цикла и т.д.)

Граф зависимостей по данным следующего уровня, инкапсули-рующий свойства соответствующего программного блока

Дуги графа DDG представляют собой зависимости по данным между узлами. Более формально, пусть u и v - узлы DDG, причем в последовательной программе u предшествует v. Дуга (u, v) входит в граф тогда и только тогда, когда между u и v есть зависимость по данным одного из трех типов:

"запись-чтение" (в узле v необходимы результаты вычислений узла u),

"чтение-запись" (в узле v записывается переменная, значение которой считывается в u),

"запись-запись" (оба узла записывают одну и ту же пере-менную).

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

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

Пример функции и ее графа зависимостей по данным приведен на Рис. 1. DDG состоит из трех узлов: двух простых узлов и оператора цикла, раскрывающегося в DDG второго уровня.

Граф зависимостей по данным строится для каждой функции программы. Алгоритм построения состоит из следующих этапов:

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

Выбор программных блоков, которые будут узлами текущего уровня иерархии DDG.

Нахождение зависимостей по данным между этими узлами с помощью алгоритма достигающих определений.

Если необходимо, продвинуться на следующий уровень иерархии и достроить граф.

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

2.1.2. Ценовая модель

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

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

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


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

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

Скачать
60039
6
8

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

Скачать
203142
15
1

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

Скачать
40761
0
0

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

Скачать
241465
35
0

... же важны при экономико-географическом анализе. По всем этим показателям существуют весьма ощутимые различия между тремя группами стран. Характеристики трансформаций социально-экономических систем в КНР и Венгрии 2.1   Трансформации социально-экономической системы КНР 2.1.1     Предыстория и цели трансформации Социально-экономические сдвиги в Китае 1918-1927 гг. Завершение Национальной ...

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


Наверх