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.