- •7.091501 – Комп’ютерні системи та мережі
- •7.091503 – Спеціалізовані комп’ютерні системи
- •7.091501 – Комп’ютерні системи та мережі
- •7.091503 – Спеціалізовані комп’ютерні системи
- •2. Надійність і відмовостійкість
- •3. Масштабованість
- •4. Сумісність і мобільність програмного забезпечення
- •5. Класифікація комп'ютерів по галузям застосування Персональні комп'ютери та робочі станції
- •Сервери
- •Мейнфрейми
- •Кластерні архітектури
- •Контрольні запитання
- •Тести tpc
- •2. Тест tpc-a
- •3. Тест tpc-b
- •4. Тест tpc-c
- •5. Майбутні тести tpc
- •2. Архітектура системи команд. Класифікація процесорів (cisc і risc)
- •3. Методи адресації та типи даних Методи адресації
- •4. Типи команд
- •5. Команди керування потоком команд
- •6. Типи й розміри операндів
- •2. Найпростіша організація конвеєра й оцінка його продуктивності
- •3. Структурні конфлікти й способи їхньої мінімізації
- •4. Конфлікти за даними, зупинка конвеєра й реалізація механізму обходів
- •5. Класифікація конфліктів за даними
- •6. Конфлікти за даними, що призводять до призупинки конвеєра
- •7. Методика планування компілятора для усунення конфліктів за даними
- •Контрольні запитання
- •2. Зниження втрат на виконання команд умовного переходу
- •Метод вичікування
- •Метод повернення
- •Затримані переходи
- •3. Статичне прогнозування умовних переходів: використання технології компіляторів
- •2. Обробка багатотактних операцій і механізми обходів у довгих конвеєрах
- •3. Конфлікти й прискорені пересилання в довгих конвеєрах
- •4. Підтримка точних переривань
- •Контрольні запитання
- •2. Паралелізм рівня команд: залежності й конфлікти за даними
- •Залежності
- •3. Паралелізм рівня циклу: концепції та методи
- •4. Основи планування завантаження конвеєра й розгортання циклів
- •Контрольні запитання
- •2. Динамічна оптимізація із централізованою схемою виявлення конфліктів
- •2. Подальше зменшення зупинок по керуванню: буфера цільових адрес переходів
- •Контрольні запитання
- •Процесор з архітектурою 80x86 і Pentium.
- •Особливості процесорів з архітектурою spark компанії Sun Microsystems.
- •Процесори pa-risc компанії Newlett-Packard
- •2.Особливості процесорів з архітектурою sparc компанії Sun Microsystems
- •Процесори pa-risc компанії Hewlett-Packard
- •Контрольні запитання
- •Процесор mc88110 компанії Motorola.
- •Особливості архітектури mips компанії mips Technology.
- •Особливості архітектури Alpha компанії dec.
- •Особливості архітектури power компанії ibm і power pc компанії Motorola, Apple і ibm.
- •2.Особливості архітектури mips компанії mips Technology
- •3.Особливості архітектури Alpha компанії dec
- •4.Особливості архітектури power компанії ibm і PowerPc компаній Motorola, Apple і ibm
- •Архітектура power
- •Еволюція архітектури power у напрямку архітектури PowerPc
- •Процесор PowerPc 603
- •Контрольні запитання
- •Термінологія в області паралельної обробки .
- •Питання створення програмного забезпечення.
- •Ахітектура паралельної обробки.
- •2.Питання створення програмного забезпечення.
- •1) Язикові розширення.
- •2) Розширення компіляторів.
- •3) Додавання нового язикового рівня.
- •4) Нова мова.
- •3.Архітектура паралельної обробки.
- •4.Елементи теорії конкурентних процесів. Події та процеси
- •Особливості мов конкурентного програмування
- •Моделі конкурентних процесів
- •Взаємодія процесів, синхронізація й передача даних
- •2. Внутрішня архітектура трансп’ютера
- •3. Послідовна обробка
- •Регістри трансп’ютера
- •4. Інструкції
- •Безпосередні функції
- •Непрямі функції
- •Ефективність кодування
- •5. Підтримка паралелізму
- •6. Зв'язок
- •Лінії зв'язку
- •7. Таймер
- •8. Альтернативне виконання
- •9. Інструкції із плаваючою крапкою
- •Контрольні запитання
- •2. Найпростіші процеси-примітиви
- •3. Послідовні процеси-композиції
- •4. Паралельні процеси
- •5. Канали зв'язку
- •6. Конструктор альтернативного процесу
- •7. Описи
- •8. Масиви
- •9. Оголошення процесів
- •10. Цикли і масиви процесів
- •Контрольні запитання
- •2. Структури програмування
- •Прості паралельні процеси
- •Синхронізація за допомогою керуючих сигналів
- •3. Мовні засоби для програмування в реальному масштабі часу
- •4. Використання мови оккам для рішення завдань системного програмування
- •Контрольні запитання
- •Рекомендована література
7. Методика планування компілятора для усунення конфліктів за даними
Багато типів припинень конвеєра можуть відбуватися досить часто. Наприклад, для оператора А = B + С компілятор швидше за все згенерує наступну послідовність команд (рис.8):
LW R1,В |
IF |
ID |
EX |
MEMWB
|
LW R2,С |
|
IF |
ID |
EXMEMWB
|
ADD R3,R1,R2 |
|
|
IF |
IDstallEXMEMWB
|
SW A,R3 |
|
|
|
IF stallIDEXMEMWB |
Рис. 8. Конвеєрне виконання оператора А = В + С
Очевидно, виконання команди ADD повинне бути припинене доти, доки не стане доступним надходячий з пам'яті операнд C. Додаткової затримки виконання команди SW не відбудеться у випадку застосування ланцюгів обходу для пересилання результату операції АЛУ безпосередньо в регістр дані пам'яті для наступного запису.
Для даного простого приклада компілятор ніяк не може поліпшити ситуацію, однак у ряді більше загальних випадків він може реорганізувати послідовність команд так, щоб уникнути припинень конвеєра. Ця техніка, називана плануванням завантаження конвеєра (pipeline scheduling) або плануванням потоку команд (instruction scheduling), використалася починаючи з 60-х років і стала особливою областю інтересу в 80-х роках, коли конвеєрні машини стали більше розповсюдженими.
Нехай, наприклад, є послідовність операторів: a = b + c; d = e - f;
Як згенерувати код, що не викликає зупинок конвеєра? Передбачається, що затримка завантаження з пам'яті становить один такт. Відповідь очевидна (рис. 9):
Неоптимізована послідовність команд |
Оптимізована послідовність команд |
LW Rb,b |
LW Rb,b |
LW Rc,c |
LW Rc,c |
ADD Ra,Rb,Rc |
LW Re,e |
SW a,Ra |
ADD Ra,Rb,Rc |
LW Re,e |
LW Rf,f |
LW Rf,f |
SW a,Ra |
SUB Rd,Re,Rf |
SUB Rd,Re,Rf |
SW d,Rd |
SW d,Rd |
Рис. 9. Приклад усунення конфліктів компілятором
У результаті усунуті обидва блокування (командою LW Rc,c команди ADD Ra,Rb,Rc і командою LW Rf,f команди SUB Rd,Re,Rf). Є залежність між операцією АЛУ й операцією запису на згадку, але структура конвеєра допускає пересилання результату за допомогою ланцюгів "обходу". Помітимо, що використання різних регістрів для першого й другого операторів було досить важливим для реалізації такого правильного планування. Зокрема, якщо змінна e була б завантажена в той же самий регістр, що b або c, таке планування не було б коректним. У загальному випадку планування конвеєра може вимагати збільшеної кількості регістрів. Таке збільшення може виявитися особливо істотним для машин, які можуть видавати на виконання кілька команд в одному такті.
Багато сучасних компіляторів використають техніку планування команд для поліпшення продуктивності конвеєра. У найпростішому алгоритмі компілятор просто планує розподіл команд у тому самому базовому блоці. Базовий блок являє собою лінійну ділянку послідовності програмного коду, у якому відсутньої команди переходу, за винятком початку й кінця ділянки (переходи усередину цієї ділянки теж повинні бути відсутні). Планування такої послідовності команд здійснюється досить просто, оскільки компілятор знає, що кожна команда в блоці буде виконуватися, якщо виконується перша з них, і можна просто побудувати граф залежностей цих команд і впорядкувати їх так, щоб мінімізувати припинення конвеєра. Для простих конвеєрів стратегія планування на основі базових блоків цілком задовільна. Однак коли конвеєризація стає більше інтенсивної й дійсні затримки конвеєра ростуть, потрібні більш складні алгоритми планування.
На щастя, існують апаратні методи, що дозволяють змінити порядок виконання команд програми так, щоб мінімізувати припинення конвеєра. Ці методи одержали загальну назву методів динамічної оптимізації (в англомовній літературі останнім часом часто застосовуються також терміни "out-of-order execution" - неупорядковане виконання й "out-of-order issue" - неупорядкована видача). Основними засобами динамічної оптимізації є:
Розміщення схеми виявлення конфліктів у можливо більш низькому місці конвеєра команд так, щоб дозволити команді просуватися по конвеєрі доти, поки їй реально не буде потрібен операнд, що є також результатом логічної більш ранньої, але ще що не завершеної команди. Альтернативним підходом є централізоване виявлення конфліктів на одній з ранніх щаблів конвеєра.
Буферизація команд, що очікують розв’язання конфлікту, і видача наступних, логічно не зв'язаних команд, в "обхід" буфера. У цьому випадку команди можуть видаватися на виконання не в тім порядку, у якому вони розташовані в програмі, однак апаратури виявлення й усунення конфліктів між логічно зв'язаними командами забезпечує одержання результатів відповідно до заданої програми.
Відповідна організація комутуючих магістралей, що забезпечує засилання результату операції безпосередньо в буфер, що зберігає логічно залежну команду, затриману через конфлікт, або безпосередньо на вхід функціонального пристрою до того, як цей результат буде записаний у регістровий файл або на згадку (short-circuiting, data forwarding, data bypassing - методи, які були розглянуті раніше).
Ще одним апаратним методом мінімізації конфліктів за даними є метод перейменування регістрів (register renaming). Він одержав свою назву від широко, що застосовується в компіляторах методу, перейменування - методу розміщення даних, що сприяє скороченню числа залежностей і тим самим збільшенню продуктивності при відображенні необхідних вихідній програмі об'єктів (наприклад, змінних) на апаратні ресурси (наприклад, комірки пам'яті й регістри).
При апаратній реалізації методу перейменування регістрів виділяються логічні регістри, звертання до яких виконується за допомогою відповідних полів команди, і фізичні регістри, які розміщаються в апаратному регістровому файлі процесора. Номера логічних регістрів динамічно відображаються на номери фізичних регістрів за допомогою таблиць відображення, які обновляються після декодування кожної команди. Кожний новий результат записується в новий фізичний регістр. Однак попереднє значення кожного логічного регістра зберігається й може бути відновлене у випадку, якщо виконання команди повинне бути перерване через виникнення виняткової ситуації або неправильного пророкування напрямку умовного переходу.
У процесі виконання програми генерується безліч тимчасових регістрових результатів. Ці тимчасові значення записуються в регістрові файли разом з постійними значеннями. Тимчасове значення стає новим постійним значенням, коли завершується виконання команди (фіксується її результат). У свою чергу, завершення виконання команди відбувається, коли всі попередні команди успішно завершилися в заданому програмою порядку.
Програміст має справу тільки з логічними регістрами. Реалізація фізичних регістрів від нього схована. Як ми вже відзначали, номера логічних регістрів ставляться у відповідність номерам фізичних регістрів. Відображення реалізується за допомогою таблиць відображення, які обновляються після декодування кожної команди. Кожний новий результат записується у фізичний регістр. Однак доти, поки не завершиться виконання відповідної команди, значення в цьому фізичному регістрі розглядається як тимчасове.
Метод перейменування регістрів спрощує контроль залежностей за даними. У машині, що може виконувати команди не в порядку їхнього розташування в програмі, номера логічних регістрів можуть стати двозначними, оскільки той самий регістр може бути призначений послідовно для зберігання різних значень. Але оскільки номера фізичних регістрів унікально ідентифікують кожний результат, всі неоднозначності усуваються.