Научная статья на тему 'Обоснование линейно-упорядоченного представления графовых моделей программ'

Обоснование линейно-упорядоченного представления графовых моделей программ Текст научной статьи по специальности «Математика»

CC BY
271
47
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ОРИЕНТИРОВАННЫЕ ГРАФЫ / ГРАФОВЫЕ МОДЕЛИ ПРОГРАММ / УПРАВЛЯЮЩИЙ ГРАФ ПРОГРАММЫ / ВЕТВИ И ВЕТВИ-СВЯЗЕЙ

Аннотация научной статьи по математике, автор научной работы — Огородов Сергей Витальевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SUBSTANTIATION OF LINEARLY-ORDERED REPRESENTATION OF GRAPH PROGRAM MODELS

The linearly-ordered representation of graph program models is offered in the form of an array of branches and branches-connections, in the basis of which a new double-position FK-numeration of peaks of oriented graphs is assumed. The given representation of graph models of programs allows to completely reveal all structural characteristics of operating graphs of programs and on their basis to realize effective optimization algorithms of an objective program codes at their translation from programming languages of a high level.

Текст научной работы на тему «Обоснование линейно-упорядоченного представления графовых моделей программ»

УДК 681.3.06

ОБОСНОВАНИЕ ЛИНЕЙНО-УПОРЯДОЧЕННОГО ПРЕДСТАВЛЕНИЯ ГРАФОВЫХ МОДЕЛЕЙ ПРОГРАММ

С.В. Огородов

Институт «Кибернетический центр» ТПУ E-mail: serg@ad.cctpu.edu.ru

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

Графовые модели программ (ГМП), которые по своей сути являются ориентированными графами (орграфами), отображают структуры программ для ЭВМ. В ГМП в качестве вершин выступают операторы, процедуры и модули программ, а дугами являются передачи управления между ними. В соответствии с этим, основу ГМП составляет управляющий орграф (граф) программы И(¥,Щ [1]. Здесь V- множество исполняемых вершин ГМП, Ж - множество управляющих связей (дуг) между вершинами множества V

Управляющий граф И характеризуется следующими свойствами:

• имеется одна вершина, в которую не входит ни одна управляющая дуга, назовем ее входом в ГМП (у0);

• каждая вершина графа И (у1,у2,...,у„) имеет один вход, на который может поступать несколько передач управления (управляющих связей) с других вершин, и один или два выхода (для логических операторов);

• имеется множество дуг Жк, назовем их выходами из ГМП, которые не имеют в качестве своих преемников ни одной вершины из множества V.

Второе свойство управляющего графа Иявляет-ся основой для упрощения алгоритмов анализа его структуры. При этом, если в реальных программах есть операторы, которые имеют несколько управляющих выходов, например т, то их в ГМП можно представить в виде цепочки (т-1) вершин, каждая из которых имеет по два управляющих выхода. Для логических вершин ГМП примем, что первый выход из вершины соответствует ответу «да» на условие, проверяемое в операторе, а второй - ответу «нет». В соответствии с этим, обозначим множества управляющих дуг для первого и второго выходов всех вершин графа И через Ж1(И) и Ж2(И).

Для анализа структуры орграфов используются два стандартных метода: обход вершин графа в глубину и обход графа в ширину. В результате выполнения первого из них строится дерево простых путей в графе, а также выявляются множества древесных, прямых и обратных дуг [2]. Дерево простых путей при этом не является однозначным, состав вершин, входящих в «древесные» пути зависит от

стратегии обхода графа [3]. При этом класс обратных дуг образует в орграфе множество циклов, выявление которых является одной из основных задач анализа структуры управляющих графов программ [4]. Второй метод позволяет построить дерево кратчайших путей в графе [5]. Информация, получаемая в результате выполнения данных обходов вершин управляющих графов программ, практически никак не может быть использована для решения задач оптимизации объектного кода программ при трансляции исходных программ с любого языка программирования, представленных в виде ГМП, в программы на языке ассемблера конкретной ЭВМ.

В связи с этим, предлагается реализовать представление управляющего графа Ив линейно-упорядоченном виде, в результате построения которого выявляются все циклы в ГМП и определяются уровни их вложенности, выявляются все линейные и параллельные участки ГМП, с учетом которых задачи оптимизации объектного кода могут решаться гораздо эффективнее [6]. Приведем ряд определений, раскрывающих понятия, используемые при описании линейно-упорядоченного представления ГМП, а также докажем три леммы.

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

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

• дуга (или обе дуги), выходящие из конечной вершины ветви, принадлежат множеству Жк выходных дуг из ГМП;

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

• последняя из рассматриваемых дуг дает вхождение в порождающую ветвь после ответвления;

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

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

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

Определение 4. Ж-нумерацией вершин орграфа Н назовем такую двухпозиционную идентификацию вершин орграфа, при которой каждой из вершин поставлена в соответствие пара £,к;|, где £ -номер ветви, которой принадлежит вершина V,, а к - есть ранг вершины V ,, равный длине простого пути из начальной вершины у0 в вершину V, полученного при обходе графа Н в глубину.

Определение 5. Циклом управляющего графа Нна-зывается последовательность вершин в

которой вершина vHn имеет наибольший ранг и инцидентна дуге, ведущей в V,-. Дугу назовем дугой, образующей цикл.

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

Введем понятия явных и неявных ветвей-связей.

Определение 7. Ветвь-связь называется неявной, если она соединяет вершины порождающей и порожденной ветвей, имеющие ранги, отличные друг от друга на единицу.

Пусть кн^,), - ранги начальной и конечной вершин V ветви-связи, VI принадлежит порождающей ветви. Тогда условие к,(^)-кн^;)=1 будет соответствовать обозначенному выше определению.

Определение 8. Ветвь-связь называется явной, когда ко(^)-кн^;)^1, здесь VI и V, принадлежат либо одной ветви, если дуга (V, V,) образует цикл или дает передачу управления вперед, либо различным ветвям вне зависимости от их порождаемости, а также тогда, когда начальная вершина V (ветви-связи принадлежит порожденной ветви, ее конечная вершина V, - порождающей ветви и kо(v;)-kн(v;)=1.

Обозначим множества ветвей, явных и неявных ветвей-связей графа Ячерез Ф(Н), $(Н и М(Н) соответственно. Граф Нв этом случае можно представить в виде объединения соответствующих множеств. Обозначим множество порождающих ветвей через Ф'(Н), множество порожденных ветвей - через Ф"(Н). Между Ф'(Н) и Ф"(Н) существует следующее соотношение: Ф'(Н)ПФ"(Н)^0. Это означает, что порождающая ветвь графа Н может быть порождена другой ветвью этого графа, одна и та же

ветвь может принадлежать как множеству Ф'(Н), так и Ф"(Н). Лишь относительно первой ветви графа Яможно сказать определенно, что ф1е Ф'(Н).

Количество ветвей в множествах Ф'(Н) и Ф"(Н) определяется в общем случае степенью сложности управляющего графа. Только в случае, когда множество дуг вторых выходов из вершин графа Н является пустым (Ж2(Н)=0) или Ж>(Н)еЖк, то можно сказать, что \Ф'(Н)\=1 и \Ф"(Н)\=0. Эти равенства справедливы также тогда, когда выполняется условие: Vw2(v)eW2(H)3(wl(v)eWk), /=0,1,2,...Д-1, где N - количество исполняемых вершин графа Н, w1(v;) и w2(v;) - дуги, соответствующие первому и второму управляющим выходам из вершины V. Из Определения 7 неявных ветвей-связей следует, что их количество в управляющем графе Я всегда равно количеству порожденных ветвей в данном графе. Значительно больший интерес представляет вопрос о количестве ветвей и явных ветвей-связей в графе Н.

Лемма 1. Количество ветвей и ветвей-связей в управляющем графе Нравно \Ш2(Н)\-\Ш2(Н)лЖ1(Н)е Щ+1.

Доказательство. Предположим, что Ж2(Н)=0. Тогда \Ж,(Н)\=\Ж,(Н)\-\Ж>(Н)лЖ1(Н)еЖк\=0. Количество ветвей в этом случае будет равно единице. Этой единственной ветвью является ветвь, начинающаяся с начальной вершины V,,. Если \ Ж>(Н)\>0, тИ)лЖ1(Н)еЖк\>0 и тН)\=тН)лЖ1(Н)еЖк\, то в этом случае количество ветвей также равно единице и эта ветвь начинается с V,. Если же \ W2(H)\> 0, \Ш2(Н)лШ1(Н)еШ> и \Ж2(Н)\>\Ж2(Н)л^(Н)еЖк\, то в графе Н при его обходе в глубину выявляются точки ветвления и/или передачи управления на уже пройденные вершины. При этом первоначальная ветвь, которой соответствует единица в доказываемом выражении, также есть ветвь, начинающаяся с V,. Каждая точка ветвления, по определению которой ^ и ведут в еще не пройденные вершины, образуют одну ветвь или явную ветвь-связь. Каждая вершина, не являющаяся точкой ветвления и имеющая управляющие дуги ^ и w2, одна из которых ведет в еще не пройденную вершину и продолжает текущую ветвь, а другая - передает управление в уже пройденную вершину, образует в соответствии с Определением 8, одну явную ветвь-связь. Следовательно, сумма вершин, имеющих w2, определяет общее количество ветвей и ветвей-связей. Вершины, у которых существуют w2 и w1eWk, способствуют уменьшению общего количества ветвей и явных ветвей-связей, т. к. в этом случае вершина, являющаяся концом управляющей дуги w2, становится текущей вершиной формируемой ветви и w2 не образует новую ветвь или ветвь-связь. Таким образом, \Ж2(Н)\-\Ж2(Н)лЖ1(Н)е Жк\+1 есть общее количество ветвей и явных ветвей-связей в управляющем графе Н.

Определение 9. Линейно-упорядоченным представлением управляющего графа Н называется его представление в виде совокупности ветвей-связей и ветвей максимальной длины.

Линейно-упорядоченное представление управляющего графа Нхарактеризуется тем, что ранг к в FK-нумерации каждой вершины графа Н соответствует длине максимального простого пути из начальной вершины V в вершину V,. При этом, передача управления из некоторой вершины VI в вершину V,, для которых выполняется соотношение к<<к,, всегда является передачей управления на цикл.

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

Доказательство. В соответствии с леммой 1 количество ветвей и явных ветвей-связей в управляющем графе Н определяется мощностью \Щ(Н)\. Так как приведение графа Н к линейно-упорядоченному виду не связано с изменением его управляющей структуры и, соответственно, не изменяет | Ж,(Н)|, то суммарное количество ветвей и явных ветвей-связей в графе Н при таком преобразовании не изменяется.

Для построения линейно-упорядоченного представления управляющего графа Н необходимо прежде всего выполнить обход вершин данного графа в глубину. Использование стандартного обхода, предназначенного для построения дерева простых путей в орграфах общего вида [2], является нерациональным для управляющего графа Н(¥,V), вершины которого имеют полустепень исхода Поэтому автором разработан более эффективный алгоритм построения дерева простых путей графа Н с одновременным выявлением циклических управляющих дуг в нем [3]. Эффективность предложенного алгоритма прохождения вершин орграфа, основанного на методе поиска в глубину, определяется следующим:

• при обходе графа запоминаются не дуги, а вершины;

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

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

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

каждой ветви: ЕНЦЦЛККК, ТЛР Л,-Л}-В этом векторе: Ц — порядковый номер ветви; Ц — длина ветви, выраженная в количестве вершин, принадлежащих данной ветви; Ар — адрес начала ветви в оперативной памяти ПЭВМ; К", Кк - ранги начальной и конечной вершин ветви; К° - ранг вершины, в которую входит ветвь Ц; Т— тип ее окончания; Ц -количество разветвлений в ветви; N - количество

прародительных ветвей для данной ветви (если N¡=0, то прародительных ветвей для данной ветви нет); Л Л,..., - номера прародительных ветвей.

Для каждой ветви-связи формируется вектор-характеристика из шести позиций: Е^ЦрО^К^КТ. Здесь: Ц — порядковый номер ветви-связи; 0 - признак вектора-характеристики ветви-связи (обозначает «длину» ветви-связи: она равна нулю, так как не содержит вершин графа Н); V/ - порядковый номер вершины, из которой выходит ветвь-связь; Кк - ранг данной вершины (начальный ранг ветви-связи); К° - ранг вершины, в которую входит ветвь-связь (конечный ранг ветви-связи); Тр — тип окончания ветви-связи.

Значение Тр в векторах-характеристиках соответствует условиям окончания ветвей при обходе графа Н в глубину, которые были введены в Определении 2. В соответствии с этим, возможны четыре условия окончания ветвей, некоторые из которых влияют на возможность удлинения ветвей графа, построенных после его обхода в глубину, для формирования его линейно-упорядоченного представления. На рис. 1 приведены фрагменты управляющего графа Н, отображающие все случаи, при которых возможно удлинение ветвей, построенных при данном обходе графа Н. Рис. 1, а, б, показывают возможности удлинения ветвей I и III, соответственно, в случае, когда ветвь или ветвь-связь входит в ветвь, порожденную ранее (четвертое условие окончания ветви). Ветвь-связь III и на рис. 1, в, и ветвь I на рис 1, г, а также ветвь II на рис. 1, д, соответствуют третьему условию окончания ветвей. Ветвь-связь III с рис. 1, в, дает удлинение ветви I за счет части ветви II. Ветвь I с рис. 1, г, удлиняется за счет части ветви II, присоединяемой к окончанию ветви I. Цифры рядом с вершинами на рис. 1 обозначают ранги вершин до удлинения ветвей.

Лемма 3. Необходимым условием удлинения ветвей управляющего графа Н является наличие в нем ветвей или ветвей-связей, у которых Щ>К°и Т==3, или Т=4.

Доказательство. Если Т=1, то конечная управляющая дуга ветви Ц, выходящая из вершины V/, принадлежит множеству Жк. Так как прямое отображение данной вершины является пустым, то есть Цук)=0, то удлинение ветви в этом случае невозможно. Если Т==2, то конечная управляющая дуга Щ является дугой, замыкающей цикл. Для такой дуги по определению цикла Щ>Щ, то есть строгое выполнение отношения Ц>К° в данном случае является необходимым условием существования цикла, а не условием удлинения.

Доказательство необходимости условия К[>К-■ при Т=3, или Т=4 для удлинения ветвей проведем способом от противного. Пусть Т =3 или Т=4 и К<К°. Докажем невозможность удлинения ветвей в этом случае. Так как конечная вершина ветви Ц имеет при этом ранг меньший, чем вершина V/, принадлежащая ветви в которую произошло вхождение ветви Ц, то это значит, что ветвь длиннее Ц, и присоединение к Ц части ветви уменьшит ранги вершин, принадлежащих этой части ветви следовательно, такая перестройка не

0 12 3 4

д)

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

будет удовлетворять определению линейно-упорядоченного представления графа Н и Щ<К° не является условием, способствующим удлинению. Значит, необходимым условием для удлинения ветвей при Т=3 или Т==4 является противоположное условие Кк>К° и, тем самым, лемма 3 доказана.

Рис. 2. Фрагменты управляющего графа Н, представленные на рис. 1, после удлинения ветвей

На рис. 2 представлены те же фрагменты управляющего графа Н, что и на рис. 1, но после соответствующего удлинения ветвей. Удлинение в случае рис. 1, а, назовем удлинением в начале ветви, так как здесь происходит «перенос» начала ветви вправо (начальной вершиной ветви IV становится вершина 0 с рангом Кн=7), которая до удлинения имела ранг 3 и принадлежала ветви II. Данное удлинение изображено на рис. 2, а. Удлинения в случаях, приведенных на рис. 1, в, д, назовем удлинением в середине ветви, так как здесь происходит удлинение одной ветви за счет другой ветви или ее части в середине удлиняемой ветви (рис. 2, в, д). Удлинения в случаях, показанных на рис. 1, б, г, назовем удлинением в конце ветви, так как здесь выполняется присоединение части некоторой ветви к окончанию удлиняемой ветви (рис. 2, б, г). Цифры рядом с вершинами на рис. 2 обозначают ранги вершин после удлинения ветвей. Кружками представлены вершины, по которым можно установить изоморфизм фрагментов графа Н, представленных на рис. 1 и 2.

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

стров и распределения оперативной памяти ЭВМ, а также для выполнения некоторых других оптимизирующих действий при генерировании объектно-

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

СПИСОК ЛИТЕРАТУРЫ

1. Погребной В.К. Об одном способе представления алгоритмов в виде графовых моделей // Управляющие системы и машины. - 1983. -№ 1. - С. 63-69.

2. Евстигнеев В.А. Применение теории графов в программировании / Под ред. А.П. Ершова. - М.: Наука, 1985. - 352 с.

3. Огородов С.В., Трегубова Е.В. О структурном анализе графовых моделей алгоритмов // Методы и программы решения оптимизационных задач на графах и сетях. Ч. 1: Алгоритмы, программы, применения: Тез. докл. II Всесоюз. совещ. - Новосибирск, ВЦ СО АН СССР, 1982. - C. 156-158.

4. Касьянов В.Н. Анализ структур программ // Кибернетика. -1980. - № 1. - C. 48-61.

5. Майника Э. Алгоритмы оптимизации на сетях и графах. - М.: Мир, 1981. - 323 с.

6. Огородов С.В. Задача автоматизации распределения регистров на графовых моделях алгоритмов // Методы и программы решения оптимизационных задач на графах и сетях. Ч. 1: Алгоритмы, программы, применения: Тез. докл. III Всесоюз. совещ. - Новосибирск: ВЦ СО АН СССР, 1984. - С. 169-171.

Поступила 14.04.2008 г.

Ключевые слова:

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

УДК 681.142.2

ЯЗЫК ОПИСАНИЯ ГЕНЕРАТОРОВ КОМБИНАТОРНЫХ МНОЖЕСТВ

А.В. Титков, В.В. Кручинин

Томский государственный университет систем управления и радиоэлектроники E-mail: avt@tcde.ru

Предложен универсальный инструмент для построения и исследования генераторов комбинаторных множеств, основанный на функциональном языке, позволяющем описывать схемы рекурсивных композиций деревьев И/ИЛИ. Предложен вариант реализации такого инструмента, как расширение системной библиотеки STL для языка программирования С++.

Введение

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

Различают 4 класса алгоритмов комбинаторной генерации [2]:

1) последовательная генерация множества всех комбинаторных объектов данного класса (listing);

2) нумерация всех комбинаторных объектов данного класса (ranking);

3) генерация комбинаторных объектов в соответствии с процессом нумерации (unranking);

4) случайная генерация реализации комбинаторного объекта (random selection).

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

Методов построения алгоритмов генерации и нумерации существует большое множество, и все они зависят от конкретного рассматриваемого комбинаторного объекта. Сравнительно недавно появился универсальный метод построения алгоритмов генерации и нумерации комбинаторных объектов, основанный на представлении комбинаторного множества в виде дерева И/ИЛИ [3].

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

Основные этапы и объекты метода

Метод построения алгоритмов генерации и нумерации комбинаторных объектов, основанный на

i Надоели баннеры? Вы всегда можете отключить рекламу.