EPIC
EPIC (англ. explicitly parallel instruction computing) — мікропроцесорна архітектура з явним паралелізмом команд. Термін введений в 1997 році альянсом HP і Intel для архітектури Intel Itanium. EPIC дозволяє мікропроцесору виконувати інструкції паралельно, спираючись на роботу компілятора, а не виявляючи можливість паралельної роботи інструкцій за допомогою спеціальних схем. У теорії, це могло спростити масштабування обчислювальної потужності процесора без збільшення тактової частоти.
Витоки в VLIW
У 1989 дослідники компанії HP дійшли висновку, що RISC архітектури мають явну межу інструкцій, виконуваних за такт. Були розпочаті розробки нової архітектури, пізніше названої EPIC. Дослідження ґрунтувалися на архітектурах VLIW, в яких кожне командне слово містить кілька операцій, виконуваних на декількох виконавчих пристроях.
Однією з цілей EPIC був перенесення складної логіки планування інструкцій з мікропроцесора в компілятор, який би планував інструкції статично. Це дозволило б прибрати планувальник інструкцій з процесора, звільнивши місце і потужність для інших елементів, наприклад, додаткових АЛП. Іншою метою було збільшити ступінь паралелізму інструкцій (instruction level parallelism) за рахунок великих можливостей компілятора з пошуку незалежних команд.
VLIW у своїй оригінальній формі мала кілька недоліків, що перешкоджають масовому впровадженню:
- Набори інструкцій VLIW не є зворотньо сумісними між різними поколіннями процесорів. Якщо в більш новому процесорі буде використовуватися більше виконавчих пристроїв (наприклад, АЛП), то програми для нового процесора не можна виконати на старому, вужчому процесорі (з меншою кількістю пристроїв).
- Затримки завантаження даних з ієрархії пам'яті (кешей, DRAM) не є повністю передбачуваними. Через це статичне планування інструкцій завантаження та використання даних стають вкрай складними.
Еволюція VLIW
Архітектура EPIC має такі особливості для усунення недоліків VLIW:
- Кожна група з декількох інструкцій називається бандл (bundle). Кожен бандл може мати стоповий біт, що позначає, що наступна група залежить від результатів роботи даної. Такий біт дозволяє створювати майбутні покоління архітектури з можливістю паралельного запуску декількох бандлів. Інформація про залежності обчислюється компілятором, і тому апаратурі не доведеться проводити додаткову перевірку незалежності операндів.
- Для передпідкачки даних використовується інструкція програмної підкачки (software prefetch). Передпідкачка збільшує ймовірність того, що до моменту виконання команди завантаження, дані вже будуть в кеші. Також, в цій інструкції можуть бути додаткові вказівки для вибору різних рівнів кешу для даних.
- Інструкція спекулятивного завантаження використовується для завантаження даних до того, як стане відомо, чи будуть вони використані (bypassing control dependencies), або чи будуть вони змінені перед використанням (bypassing data dependencies).
- Інструкція перевірки завантаження (check load instruction) допомагає інструкціям спекулятивного завантаження за допомогою перевірок, чи залежала інструкція завантаження від подальшого запису. У разі наявності подібної залежності, спекулятивне завантаження повинно бути повторено.
Архітектура EPIC також включає в себе кілька концепцій (grab-bag) для збільшення ILP (паралелізму інструкцій,англ. Instruction-level parallelism):
- Передбачення розгалужень використовується, щоб знизити частоту переходів і для збільшення спекулятивності виконання інструкцій. В останньому випадку, умовне розгалуження перетворюється в заповнення предикатних регістрів, потім виконуються обидві гілки. Результат тієї гілки, яка не повинна була виконуватися, скасовується за значенням предикатного регістру.
- Відкладені виняткові ситуації, що використовують біт Not a thing в регістрах загального призначення. Вони дозволяють продовжувати спекулятивне виконання навіть після виняткових ситуацій.
- Вкрай великий регістровий файл, щоб уникнути необхідності в перейменуванні регістрів.
В архітектурі Itanium також був доданий обертовий регістровий файл, необхідний для спрощення програмної конвейєризації циклів (software pipelining). За наявності такого файлу зникає необхідність в ручній розкрутці циклів і ручного перейменування регістрів.
Інші розробки і дослідження
Існувала деяка кількість досліджень архітектур EPIC, не пов'язаних з розробками по Itanium.
- Проєкт IMPACT в університеті Іллінойсу в Urbana-Champaign під керівництвом Wen-mei Hwu сильно вплинув на пізніші дослідження.
- Архітектура PlayDoh від HP-labs.
- Федерація Gelato, співтовариство розробників з розробки більш ефективних компіляторів для Linux на серверах Itanium.
Див. також
- п
- о
- р
- ASIP
- CISC
- EDGE
- EPIC
- MISC
- URISC
- RISC
- VLIW
- NISC
- ZISC
- TRIPS[en]
- Порівняння
- Конвеєр команд
- Bubble
- Operand forwarding[en]
- Позачергове виконання
- Спекулятивне виконання
- Модуль передбачення переходів
- Memory dependence prediction[en]
- Конфлікти в конвеєрі
- Процесор цифрових сигналів (DSP)
- GPGPU
- Мікроконтролер
- Фізичний процесор
- Система на кристалі (SoC)
- Секційний процесор
- Barrel processor
- Cellular[en]
- Блок генерації адреси (AGU)
- Арифметико-логічний пристрій (ALU)
- Barrel shifter
- Функціональний блок (EU)
- Математичний співпроцесор (FPU)
- Back-side bus
- (Мультиплексор)
- Регістри
- Модуль керування пам'яттю (MMU)
- Буфер асоціативної трансляції (TLB)
- Кеш
- Регістровий файл
- Мікрокод
- Пристрій керування
- Тактова частота
- APM
- ACPI
- Динамічна зміна частоти[en]
- Динамічна зміна напруги[en]
- Clock gating
Ця стаття є заготовкою. Ви можете допомогти проєкту, доробивши її. Це повідомлення варто замінити точнішим. |