Научная статья на тему 'Выявление циклов в телах последовательных линейных программ'

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

CC BY
135
31
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЛИНЕЙНЫЕ ПРОГРАММЫ / МЕТОД / МАТРИЦА / ЦИКЛИЧЕСКИЙ УЧАСТОК

Аннотация научной статьи по математике, автор научной работы — Борзов Дмитрий Борисович, Гнездилова Юлия Петровна, Колмыков Денис Валерьевич, Воробьева Ольга Валерьевна

Представлен метод выявления циклических участков внутри линейных программ

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

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

ВЫЯВЛЕНИЕ ЦИКЛОВ В ТЕЛАХ ПОСЛЕДОВАТЕЛЬНЫХ ЛИНЕЙНЫХ ПРОГРАММ Д.Б. Борзов, Ю.П. Гнездилова, Д.В. Колмыков, О.В. Воробьева

Аннотация. Представлен метод выявления циклических

у

частков внутри линейных программ.

Ключевые слова: линейные программы, метод, матрица, циклический участок.

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

средств для распараллеливания нецелесообразно. В этом случае необходимо применение аппаратных средств.

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

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

Рассмотрим участок программы (рисунок 1а), содержащий цикл с постусловием. Ему соответствуют

a:=b+c;

for i:=1 to a do begin

d:=a+b;

e:=d+c;

end;

b:=a+e.

1. a:=b+c;

2. i:=1;

3. d:=a+b;

4. e:=d+c;

5. i=i+1;

6. Если i>a,

то переход к п.7, иначе к п.З;

7. b:=a+e.

команды процессора, приведенные на рисунке 1 б, граф выполнения команд на рисунке 1в и соответствующая ему матрица следования (рисунок 1г).

№ оператора 1 2 З 4 5 6 7

1 о о о о о о о

2 1 о о о о о о

З о 1 о о о 1 о

4 о о 1 о о о о

5 о о о 1 о о о

6 о о о о 1 о о

7 о о о о о 1 о

а)

б)

в)

г)

Рисунок 1 - Участок программы для цикла с постусловием: а - фрагмент программы; б - команды процессора; в ■ граф выполнения команд; г - матрица следования

Рассмотрим другой участок программы (рисунок 2а), содержащий цикл с предусловием. Ему соответствуют команды процессора, приведенные на рисунке 2б, граф выполнения команд на рисунке 2в и соответствующая ему матрица следования (рисунок 2г).

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

a:=b+c; 1. a:=b+c; ©

while i < a do begin 2. Если i>a; то переход к (2)\

d:=a+b; п.6, иначе к п.З;

e:=d+c; 3. d:=a+b; /©

end; 4. e:=d+c; m

b:=a+e. 5. i=i+l; V

6. b:=a+e. ml

Ъ

а) б) в)

цикл с постусловием. В цикле с постусловием начальной является операция присвоения значения счётчику, предпоследней - инкремент счётчика, последней - проверка условия завершения цикла. Тело цикла располагается между первым и предпоследним оператором. В цикле с предусловием стартовой является операция проверки условия функционирования цикла, последней

- инкремент счётчика. Тело цикла помещается между первым и последним оператором. Исходя из приведённых соображений можно построить алгоритм поиска цикла с использованием матрицы следования (М8 -матрица следования, N - число операторов):

№ оператора 1 2 З 4 5 6

1 о о о о о о

2 1 о о о 1 о

З о 1 о о о о

4 о о 1 о о о

5 о о о 1 о о

6 о 1 о о о о

г)

Рисунок 2 - Участок программы для цикла с предусловием: а- фрагмент программы; б -команды процессора; в ■ граф выполнения команд; г - матрица следования

1. 1=1;

2. £=1+1;

3. ЕСЛИ MS(I,К)=1; П.4, ИНАЧЕ П.5;

4. ЕСЛИ М£(К+1,К)=1 ТО НАЙДЕН ЦИКЛ С ПОСТУСЛОВИЕМ, ТЕЛО ЦИКЛА СОСТАВЛЯЮТ ОПЕРАТОРЫ (I, 1+1, ..., К-2), ИНАЧЕ НАЙДЕН ЦИКЛ С ПРЕДУСЛОВИЕМ, ТЕЛО ЦИКЛА СОСТАВЛЯЮТ ОПЕРАТОРЫ (1+7, 1+2,., К-1).

5. К = К +1;

6. ЕСЛИ К>Ы, ТО П.7, ИНАЧЕ П.3;

7. I = I +1;

8. ЕСЛИ I =М, ТО КОНЕЦ, ИНАЧЕ П.2;

В матрице следования на рисунке 1 г выше главной диагонали находится единица (МБ(3,6)=1), следовательно фрагмент на рисунке 1а содержит цикл. При этом из шестого оператора можно попасть в следующий (МБ(7,6)=1), следовательно данный цикл с постусловием и его тело составляют операторы 3 и 4 на рисунке 1 б.

В матрице следования на рисунке 2г выше главной диагонали также находится единица (М£(2,5)=1), сле-

довательно фрагмент на рисунке 2а содержит цикл. При этом из пятого оператора нельзя попасть в следующий (MS(6,5)=Q), следовательно, данный цикл с предусловием и его тело составляют операторы З и 4 на рисунке 2б.

Одна из задач, возникающих при распараллеливании циклических участков программы - определение уровня вложенности циклов. Рассмотрим данную задачу на примере фрагмента программы с трёмя циклами, приведённого на рисунке За, с соответствующими командами процессора (рисунок Зб), соответствующим графом выполнения команд (рисунок Зс) и матрицей следования (таблица 1).

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

1З8

содержащий вложенных циклов, MS - матрица следования, N - число операторов).

В матрице следования (таблица 1) выше главной диагонали находятся три единицы (MS(3,13)=1,

MS(4,11)=1, MS(б,9)=1), следовательно фрагмент на рис. 3а содержит 3 цикла. По ходу работы алгоритма в

№ оператора 1 2 3 4 5 6 7 8 9 10 11 12 13 14

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

2 1 0 0 0 0 0 0 0 0 0 0 0 0 0

3 0 1 0 0 0 0 0 0 0 0 0 0 1 0

4 0 0 1 0 0 0 0 0 0 0 1 0 0 0

5 0 0 0 1 0 0 0 0 0 0 0 0 0 0

6 0 0 0 0 1 0 0 0 1 0 0 0 0 0

7 0 0 0 0 0 1 0 0 0 0 0 0 0 0

8 0 0 0 0 0 0 1 0 0 0 0 0 0 0

9 0 0 0 0 0 0 0 1 0 0 0 0 0 0

10 0 0 0 0 0 0 0 0 1 0 0 0 0 0

11 0 0 0 0 0 0 0 0 0 1 0 0 0 0

12 0 0 0 0 0 0 0 0 0 0 1 0 0 0

13 0 0 0 0 0 0 0 0 0 0 0 1 0 0

14 0 0 0 0 0 0 0 0 0 0 0 0 1 0

a:=b+c; 1.a:=b+c;

for i:=1 to a do begin 2. i:=1; for k:=1 to a do begin 3. k:=1; c:=d+e; 4. c:=d+e:

for p:=1 to a do begin 5. p:=1 d:=a+b; e:=d+c; end; end; b:=a+e.

6. d:=a+b;

7. е^+с;

8. р:=р+1;

9. Если р>а, то переход к п.10, иначе к п.6;

10. к:=к+1;

11. Если к>а, то переход к п.12, иначе к п.4;

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

12. 1:=1+1;

13. Если 1>а то переход к п.14, иначе к п.3;

14. Ь:=а+е.

а) б) с)

Рисунок 3 - Участок программы с тремя циклами: а

- фрагмент программы; б - команды процессора; в -граф выполнения команд

1. LEVEL=0; SIDE=N+1;

2. I=1;

3. K=I+1;

4. ЕСЛИ MS(I,K)=1, ТО LEVEL=LEVEL+1; K=M; П.5, ИНАЧЕ П.7;

5. ЕСЛИ LEVEL=1, ТО SIDE=K;

6. ЕСЛИ MS^+IK)^ ТО НАЙДЕН ЦИКЛ С ПОСТУСЛОВИЕМ, ТЕЛО ЦИКЛА СОСТАВЛЯЮТ ОПЕРАТОРЫ (I, I+1, ..., K-2), ИНАЧЕ НАЙДЕН ЦИКЛ С ПРЕДУСЛОВИЕМ, ТЕЛО ЦИКЛА СОСТАВЛЯЮТ ОПЕРАТОРЫ (I+1, I+2,..., K-1). УРОВЕНЬ ВЛОЖЕННОСТИ ДАННОГО ЦИКЛА РАВЕН LEVEL.

7. K = K+1;

8. ЕСЛИ K>N, ТО П.9, ИНАЧЕ П.4;

9. I = I +1;

10. ЕСЛИ I=SIDE, ТО LEVEL=0; SIDE=N+1;

11. ЕСЛИ I=N, ТО КОНЕЦ, ИНАЧЕ П.3;

процессе перебора элементов, лежащих выше главной диагонали, первой будет найдена единица MS(3,13)=1. Так как MS(14,13)=1, то соответствующий цикл будет

определён как цикл с постусловием с телом цикла из операций 3 - 11. Счётчик вложенности LEVEL будет инкрементирован и примет значение 1, найденному циклу будет присвоен уровень вложенности 1, то есть он будет внешним по отношению ко всем циклам, начинающимся до 14 оператора. Значение SIDE станет равным 14. Следующей будет найдена единица MS(4,11)=1. Так как MS(12,11)=1, то соответствующий цикл будет определён как цикл с постусловием с телом цикла из операций 4 - 9. Значение счётчика вложенности LEVEL примет значение 2, найденному циклу будет присвоен уровень вложенности 2. Последняя обрабатываемая единица MS(6,9)=1. MS(10,9)=1, следовательно данный цикл будет определён как цикл с постусловием с телом цикла из операций 6 и 7. Счётчик вложенности LEVEL примет значение 3, найденному циклу будет присвоен уровень вложенности 3. При 1=14 счётчик вложенности LEVEL будет сброшен, следующий найденный цикл снова будет внешним.

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

Список использованных источников

1 Борзов, Д.Б. Метод выявления параллелизма внутри линейных участков последовательных программ и его аппаратная реализация / Д.Б. Борзов, С.А. Дюбрюкс, В.С. Титов // Известия вузов. Приборостроение. - Санкт-Петербург, - 2008, - №2, С. 34-38.

2 Дюбрюкс, С.А. Методика переназначения переменных при выявлении параллельных участков внутри последовательных программ/ С.А. Дюбрюкс, Д.Б. Борзов, В.С. Титов. -Сборник материалов VIII Международной конференции «Оптико-электронные приборы и устройства в системах распознавания образов, обработки изображений и символьной информации». - Курск, 2008.- С. 140-142.

3 Трахтенгерц, Э.А. Введение в теорию анализа и распараллеливания программ ЭВМ в процессе трансляции / Э.А. Трахтенгерц. - М.: Наука, 1981. - C. 184-187.

Информация об авторах

Борзов Дмитрий Борисович, кандидат технических наук, доцент кафедры информационных и электротехнических систем и технологий ФГБОУ ВПО «Курская ГСХА».

Г нездилова Юлия Петровна, кандидат технических наук, доцент кафедры информационных и электротехнических систем и технологий ФГБОУ ВПО «Курская ГСХА».

Колмыков Денис Валерьевич, кандидат технических наук, доцент кафедры информационных и электротехнических систем и технологий ФГБОУ ВПО «Курская ГСХА».

Воробьева Ольга Валерьевна, кандидат технических наук, доцент кафедры информационных систем и информационного права Курского института социального образования (филиал) РГСУ.

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