Здавалка
Главная | Обратная связь

Принцип дії VLIW - компілятора



Інтерес, що знову спалахнув останнім часом, до VLIW, як до архітектури, яку можна використовувати для реалізації обчислень загального призначення, дав істотний поштовх розвитку техніки компіляції для VLIW. VLIW -компілятор упаковує групи незалежних операцій в дуже довгі слова інструкцій у такий спосіб, щоб забезпечити ефективне їх виконання функціональними модулями за один машинний такт. Компілятор спочатку виявляє усі залежності між даними, а потім визначає, як їх розв'язати. Найчастіше це робиться шляхом переупорядковування усієї програми, різні її блоки переміщаються з одного місця в інше. Цей підхід відрізняється від вживаного в суперскалярному процесорі, який для визначення залежностей використовує спеціальне апаратне рішення прямо під час виконання програми (оптимізуючі компілятори, безумовно, покращують роботу суперскалярного процесора, але не роблять його "прив'язаним" до них). Більшість суперскалярних процесорів можуть виявити залежності і планувати паралельне виконання тільки усередині базових програмних блоків. Деякі переупорядковувані системи поклали початок розширенню області сканування, не обмежуючи її базовими блоками. Для забезпечення більшого паралелізму VLIW - комп’ютери повинні спостерігати за операціями з різних базових блоків, щоб помістити ці операції в одну і ту ж довгу інструкцію, їх "область огляду" має бути ширше, ніж у суперскалярних процесорів.

Це забезпечується шляхом прокладення "маршруту" по усій програмі (трасування). Трасування - найбільш оптимальний для деякого набору початкових даних маршрут за програмою (для забезпечення правильного результату гарантується неперетин цих даних), тобто маршрут, який "проходить" по ділянках, придатних для паралельного виконання (ці ділянки формуються, крім усього іншого, і шляхом перенесення коду з інших місць програми), після чого залишається упакувати ці ділянки в довгі інструкції і передати на виконання. Планувальник обчислень здійснює оптимізацію на рівні усієї програми, а не її окремих базових блоків. Для VLIW, так само, як і для RISC, розгалуження в програмі є "ворогом", що перешкоджає ефективному її виконанню, : типовий програмний код (той, що не використовується в наукових розрахунках) містить близько шести розгалужень на інструкцію. Тоді як RISC для прогнозування розгалужень використовує апаратне рішення, VLIW залишає це за компілятором. Компілятор використовує інформацію, зібрану ним шляхом профілювання програми, хоча у майбутніх VLIW -процесорів передбачається невелике апаратне розширення, що забезпечує збір для компілятора статистичної інформації безпосередньо під час виконання програми. Компілятор прогнозує найбільш відповідний маршрут і планує його проходження, розглядаючи його як один великий базовий блок, а потім повторює цей процес для усіх інших програмних гілок, що виникли після цього, і так до самого кінця програми. Він також уміє робити при аналізі коду і інші "розумні кроки", такі, як розгортання програмного циклу і IF - перетворення, в процесі якого тимчасово видаляються усі логічні переходи з секції, що піддається трасуванню.

Там, де RISC може тільки проглянути код вперед на предмет розгалужень, VLIW -компілятор переміщає його з одного місця в інше до виявленого розгалуження (згідно з трасуванням), але передбачає при необхідності можливість відкату (Retire) назад, до попереднього програмного стану. Відповідне апаратне забезпечення, додане до VLIW -процесора, може зробити певну підтримку компілятору. Наприклад, операції, що мають по декілька розгалужень, можуть входити в одну довгу інструкцію і, отже, виконуватися за один машинний такт. Тому виконання умовних операцій, які залежать від попередніх результатів, може бути реалізоване програмним способом, а не апаратним. Ціна, яку доводиться платити за збільшення швидкодії VLIW -процесора, набагато менше вартості компіляції. Саме тому основні витрати прходять на компілятори.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.