EPIC (архитектура микропроцессора)

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

EPIC (англ. explicitly parallel instruction computing) — микропроцессорная архитектура с явным параллелизмом команд. Термин введён в 1997 году альянсом HP и Intel[1] для разрабатываемой архитектуры Intel Itanium.[2] EPIC позволяет микропроцессору выполнять инструкции параллельно, опираясь на работу компилятора, а не выявляя возможность параллельной работы инструкций при помощи специальных схем. В теории, это могло упростить масштабирование вычислительной мощности процессора без увеличения тактовой частоты.

Истоки в VLIW[править | править исходный текст]

В 1989 исследователи компании HP пришли к выводу, что RISC архитектуры имеют явный предел инструкций, выполняемых за такт. Были начаты разработки новой архитектуры, позже названой EPIC.[2] Исследования основывались на архитектурах 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 (параллелизма инструкций):

  • Предсказание ветвлений используется, чтобы снизить частоту переходов и для увеличения спекулятивности исполнения инструкций. В последнем случае, условное ветвление преобразуется в заполнение предикатных регистров, затем выполняются обе ветви. Результат той ветви, которая не должна была выполняться, отменяется по значению предикатного регистра.
  • Отложенные исключительные ситуации, использующие бит Not a thing в регистрах общего назначения. Они позволяют продолжать спекулятивное исполнение даже после исключительных ситуаций.
  • Крайне большой регистровый файл, чтобы избежать необходимости в переименовании регистров.

В архитектуре Itanium также был добавлен вращающийся регистровый файл[3], необходимый для упрощения программной конвейеризации циклов (software pipelining). При наличии такого файла исчезает необходимость в ручной раскрутке циклов и ручного переименования регистров.[4]

Иные разработки и исследования[править | править исходный текст]

Существовало некоторое количество исследований архитектур EPIC, не связанных с разработками по Itanium.

  • Проект IMPACT в университете Иллинойса в Urbana-Champaign под руководством Wen-mei Hwu сильно повлиял на более поздние исследования.
  • Архитектура PlayDoh от HP-labs.
  • Федерация Gelato, сообщество разработчиков по разработке более эффективных компиляторов для Linux на серверах Itanium.

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]