Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OPI_konspekt.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
5.78 Mб
Скачать

6.4. Елементи топології програми

6.4.1. Блок (лінійна ділянка)

Питання оптимізації звичайно зв'язані з топологією програми, тобто зі способом її побудови. Для того, щоб локалізувати процеси оптимізації і не пов'язувати їх з конкретною вхідною мовою, вони проводяться усередині окремих ділянок програми, називаних блоками і сильно зв'язаними областями.

Блок (лінійна ділянка) - виконувана один по одному послідовність операторів, що має єдину крапку входу - перший оператор з міткою, на який може бути передане керування, і єдину крапку виходу - останній оператор.

Блок моделює частина програми проміжною мовою, яка містить оператори присвоювання.

Формально модель лінійної ділянки може бути представлена в такий спосіб:

блок B - це трійка виду (P,I,U), де

(1) P - список операторів S1,S2,...Sn (n>=0),

(2) I - множина вхідних змінних,

(3) U - множина вихідних змінних.

При цьому оператором називається ланцюжок (у загальному випадку) виду

A <- Q B1...Br,

де A, B1,..., Br - змінні, а Q - операція.

Тут оператор привласнює значення змінній А та посилається на B1,...,Br.

Якщо оператор Sj посилається на А, то або А є вхідною змінною, або здійснене присвоювання їй значення деяким оператором до Sj, (тобто деяким оператором Si, (і<j) . Таким чином, усередині блоку всі змінні, на які є посилання, до цього моменту визначені або внутрішнім чином як змінні, котрим привласнені значення, або зовнішнім як вхідні змінні. Аналогічно кожна вихідна змінна або є вхідною змінною, або їй привласнене значення деяким оператором.

Оператор S у програмі називається входом у лінійну ділянку, якщо він або є першим оператором у програмі, або позначений ідентифікатором, що з'являється в операторі переходу, або безпосередньо йде за умовним оператором.

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

6.4.2. Сильно зв'язана область

Для кожного блоку B=(P,I,U) можна знайти орієнтований ациклічний граф , що представляє цей блок. При цьому кожен лист графа (кінцева вершина) відповідає одній вхідний змінній у I, а кожна його внутрішня вершина - оператору з P. Граф відбиває порядок виконання операторів програми і дає більш наочне представлення, ніж лінійна послідовність операторів.

Якщо вершини і та j графа відповідають ділянкам і та j програми, то дуга йде з і в j, якщо

1) останній оператор ділянки і не є ні оператором переходу, ні оператором зупинки, а ділянка j йде в програмі за ділянкою і чи

2) останній оператор ділянки і є оператором переходу на мітку L, що позначений перший оператор ділянки j.

Сильно зв'язаною областю орієнтованого графа називається така множина його вершин, що для будь-яких двох вершин x і y (x != y) існує шлях з x у y.

Будемо розглядати сильно зв'язані області Ri, що володіють наступними властивостями:

1) Ri є сильно зв'язаною областю, що складається з множини блоків, кожний з яких передує сам собі і йде сам за собою усередині цієї множини;

2) Ri != Rj;

3) для кожного і<j чи перетинання Ri і Rj порожньо, чи Ri є підобластю Rj (включена в неї).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]