У этого термина существуют и другие значения, см.
EPIC.
EPIC (англ. explicitly parallel instruction computing — «вычисление с явным параллелизмом машинных команд») — класс микропроцессорных архитектур с явным параллелизмом команд. Термин введён в 1997 году альянсом HP и Intel[1] для разрабатываемой архитектуры Intel Itanium[2]. EPIC позволяет микропроцессору выполнять инструкции параллельно, опираясь на информацию от компилятора, а не выявляя возможность параллельной работы инструкций при помощи специальных схем во время исполнения. В теории, это могло упростить масштабирование вычислительной мощности процессора без увеличения тактовой частоты.
В 1989 году исследователи компании Hewlett-Packard пришли к выводу, что количество инструкций, которые процессор архитектуры RISC способен выполнить за один такт, ограничено. Были начаты разработки новой архитектуры, основанной на архитектуре VLIW и названной EPIC[2]. У процессоров архитектуры VLIW одна инструкция (одно командное слово) кодирует несколько операций; операции выполняются одновременно разными исполнительными устройствами процессора.
Цели разработки EPIC:
Планировщик инструкций — устройство со сложной логикой, входящее в состав процессора и предназначенное для определения порядка выполнения инструкций. Удаление планировщика инструкций позволило освободить место внутри процессора для других устройств (например, для АЛУ). Функции планировщика инструкций были возложены на компилятор.
Увеличение степени параллелизма инструкций достигается использованием возможностей компилятора по поиску независимых команд.
Архитектуры VLIW в своей изначальной форме имели несколько недостатков, препятствующих их массовому внедрению:
- наборы инструкций VLIW не являлись совместимыми между различными поколениями процессоров (программа, скомпилированная для процессора, содержащего больше исполнительных устройств (например, больше АЛУ), не могла выполняться процессором, содержащим меньшее количество устройств);
- задержки загрузки данных из иерархии памяти (кэшей, DRAM) не являлись полностью предсказуемыми (из-за этого усложнялась реализация статического планирования инструкций загрузки и использования данных).
Архитектура 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. (Gelato Federation[англ.])