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.

Див. також[ред. | ред. код]