Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СИСТЕМНЕ ПРОГРАМУВАННЯ ТА ОС.doc
Скачиваний:
9
Добавлен:
28.10.2018
Размер:
503.3 Кб
Скачать
  1. Поняття оптимізації проміжного коду. Оптимізаційні операції.

Оптимізація проміжного коду - виділення загальних подвираженія та обчислення константних подвираженія.  Фаза оптимізації призначена для зменшення надлишковості програми за витратами часу та пам'яті. У залежності від критеріїв проектування транслятора дана фаза обробки програми може виключатися з циклу обробки програми.

Для побудови проміжного коду реальної обчислювальної системи окрім особливостей безпосереднього алгоритму слід врахувати і функціональні можливості системи , тобто виділену ОП, систему аналізу, наявність регістрів та наявність операцій. В реальних компіляторах для побудови остаточного коду враховуються всі особливості обчислювальної системи, а також відбуваються оптимізаційні перетворення на рівні елементарних команд. В загальному випадку оптимізаційні перетворення стусуються будь-якої частини алгоритму, але найбільш прості та показові є оптимізації лінійних ділянок. Блоком або лінійною ділянкою в проміжному коді називається частина алгоритма яка складається з послідовності операцій присвоєння. Нехай множина це деяка множина зміних, - множина операцій, при чому множини і - скінченні і не перетинаються. Операція здійснюється над однією або декількома змінними. Оператором присвоєння називається вираз , де -операція, А1,В1,…,Br – змінні, r – кількість зміних що беруть участь в операціях. Такий вираз означає що операція присвоює значення зміній А і посилається на змінні В1,…,Br. Процес спрощення лінійної ділянки при якому отримуються еквівалентні блоки називаються оптимізацією. Два блоки називаються еквівалентними якщо їх значення рівні на всьому періоді оцінювання відповідних паралельних кроків. З точки зору термінології оптимальним вважається найкращий за деякою ознакою зв'язок задачі. Щодо оптимізації обчислювального процесу даний термін незовсім коректний і передбачає знаходження нової послідовності дій, яка приводить до ідентичного результату за менший час, з меншими затратами, меншою кількістю операторів, та використання меншої кількості додаткових зміних. Для будь-якого блоку існує безліч інших еквівалентних блоків, серед яких є хоча б один блок з мінімальною кількістю операторів. Для отримання мінімального блоку можна застосувати наступні перетворення:

  1. Перетворення вилучення безкорисних операцій присвоєння (Т1). Якщо змінна А неактивна після оператора , то

    1. якщо і>0 то оператор можна вилучити з множини Р.

    2. якщо і=0 то оператор можна вилучити з множини І.

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

  1. Вилучення надлишкових обчислень (Т2). Часто в програмах виникають ситуації коли ідентичні обчислення виконуються повторно. Такі обчислення називаються надлишковими.

  2. Перетворення переіменування (Т3). Оскільки блок є відносно незалежним для якого фіксованим є вхідна і вихідна множина то назви внутрішніх змінних не впливають на значення блоку.

  3. Перетворення перестановки (Т4).

Перетворення Т1-Т4 дозволяють зменшити кількість операцій проміжного коду з метою позбавлення безкорисних та повторних дій. В програмах де проводиться багато математичних обчислень оптимізацію коду можна отримати і за рахунок застосування алгебраїчних законів. Як правило використовуються наступні алгебраїчні перетворення:

  1. Закон комутативності. Операцією називають комутативною, якщо аb=ba.

  2. Операція називається асоціативною якщо (ab) c=a(bc).

  3. Операція 1 називається дистрибутивною відносно операції 2 якщо a1(b2c)=a1b2a1c

  4. Операція іденпотентною якщо, а=а.