EPIC: Explicitly Parallel Instruction Computing (IA 64 )
Аппаратные ухищрения суперскаляров внутреннее разбиение CISC-команд на простые RISC-команды, регистровый файл, аппаратный планировщик, неупорядоченное ядро, предсказание переходов, спекулятивное исполнение, предвыборка данных и т. п.
Недостатки традиционных архитектур Последовательное исполнение команд. Сложное аппаратное обеспечение для определения параллелизма на уровне инструкций (ILP). Ограниченность ILP, доступного в пределах базовых блоков. Сложность определения ILP вследствие ветвлений. Зависимости по данным. Недостаток памяти и регистров: фундаментальное ограничение. Большое количество вызовов процедур (недостаток ресурсов). Выделение ILP из циклов (конвейеризация, разворачивание) вызывает увеличение размера кода.
Структура команды Команды ( 41 бит) упаковываются в связки (bundle) по 128 бит. Старшие 5 бит связки – шаблон. Шаблон указывает к каким ИУ направляется каждая из команд и границы разделения групп команд, которые не имеют зависимостей.
Вид команды
Система команд Система команд IA 64 обладает основными чертами RISC-архитектуры. Регулярная длина. Команды вида (reg3 = reg1 op reg2). Операции проводятся только над регистрами, для чтения/записи из/в память существует специальная группа команд. В архитектуре IA 64 нет команд с высокой латентностью, например: трансцендентных, деления, целочисленного умножения и т.п.
Особенности IA 64 архитектуры Спекуляция кода. Спекуляция данных. Предсказания. Регистровый стек. Ветвления. Вращение регистров. Архитектура вычислений с плавающей точкой.
Память IA-64 определяет единственное однородное, линейное адресное пространство размером 2 64 байт. – единственное означает, что код и данные находятся в одной памяти. – однородное означает, что память не разделена на участки с предопределенной функциональ- ностью. – линейное означает, что память не разделена на страницы; все 2 64 байт расположен последовательно.
Регистры битных регистров общего назначения GR0-GR битных вещественных регистров FR0-FR битных предикатных регистра PR0-PR битных регистров ветвлений BR0-BR7. специальные архитектурные регистры, среди которых есть регистры архитектурной поддержки циклов и вызовов функций.
Регистры
Спекулятивное исполнение кода
Спекуляция данных
Предсказание
Регистровый стек механизм, помогающий избежать ненужных сохранений регистров при вызове функций. Регистры GR32- GR128 - стековые. Они динамически переименовываются при входе в функцию и выделении регистрового фрейма стека из внутреннего регистрового файла. при переходах между подпрограммами можно избегать загрузки значений локальных переменных и параметров из памяти в регистры
Регистровый стек
Программная конвейеризация циклов Программная конвейеризация циклов обеспечивается за счет использования: – специальных инструкций ветвления – архитектурных регистров loop counter (LC) epilogue counter (EC) – вращения регистров
Вращение регистров EPIC позволяет переименовывать регистры, давая каждой итерации свой набор регистров и исключая необходимость раскрутки цикла. Команды планируются таким образом, что через несколько итераций после старта цикла выполняются одновременно разные команды из разных итераций.
Программная конвейеризация Программная конвейеризация циклов – это оптимизированный способ выполнения цикла. Если итерации в цикле могут выполняться независимо, то за счет имеющихся функциональных устройств могут исполняться параллельно. Это используется для программной конвейеризации циклов. После того, как выполняется первая команда первой итерации, начинает выполняться вторая команда первой итерации и первая команда второй итерации. Конвейер наполняется (стадия пролога), и затем с конвейера за один такт сходит по одной итерации цикла (стадии ядра и эпилога). На стадии эпилога конвейер освобождается. В EPIC программная конвейеризация поддерживаются аппаратно. -- Зависимость между итерациями устраняется за счет вращения регистров (за такт регистры вращаются на один в сторону увеличения номеров.) Таким образом, то, что было записано в r32, на следующем такте окажется в r33 и т.д. -- Предикатные регистры (начиная с p16) контролируют, какие из команд должны быть выполнены, а какие – нет (на стадиях пролога и эпилога). Два счетчика – LC (loop counter) и EC (epilogue counter) определяют количество итераций и количество команд в одной итерации.
Пример mov pr.rot = 0 // очистка предикатных регистров вращения cmp.eq p16, p0 = r0, r0 // установить p16=1 mov ar.lc = 4 // Счетчик цикла LC=n-1 mov ar.ec = 3 // Счетчик эпилога EC=3 Loop: (p16)ld1 r32 = [r12], 1;; // #1 загрузить X (p17)add r34 = 1, r33;; // #2 Y = X+1 (p18)st1 [r13] = r35, 1;; // #3 сохранить Y br.ctop.sptk.few Loop
Пример Аналогичный обычный цикл Loop: ld1 r32=[r12], 1// загрузить X add r33=1, r32// Y = X+1 st1 [r13]=r33, 1// сохранить Y br Loop
Схема Itanium® 2
Alpha 21264PowerPC 970FXItanium2 Частота ядра500 MHz – 1.3 GHz1.6 – 2.7 GHz1 – 1.66 GHz Программные регистры 32 целочисл (64 бит) 32 веществ (64 бит) 32 целочисл (64 бит) 32 веществ (64 бит) 16 векторных (128-бит) 128 целочисл (64 бит) 128 веществ (82 бит) 64 предикатных (1 бит) 8 регистров ветвлений (64 бит) 128 прикладных регистра Аппаратные регистры 80 целочисл 72 веществ целочисл веществ векторных соответствуют программным Кэш данных L1 64 KB 2-way строка 64 B 32 KB 2-way строка 128 B 16 KB 4-way строка 64 B Кэш команд L1 64 KB 2-way строка 64 B 64 KB прямого отображения строка 128 B 16 KB 4-way строка 64 B Кэш L2 1 – 4 MB внешний 512 KB 8-way строка 128B 256 KB 8-way строка 128B Кэш L3–– 1.5 – 9 MB 12-way строка 128B Векторные расширенияMVIAltiVec MMX SSE3 Длина окна80215– Исполнительные устройства 6(вещ 2)12(вещ 2)11(вещ 2) Макс. число инструкций за такт 656 (2 связки) Длина конвейера целочисл 5 веществ 11 целочисл 5 веществ 11 векторн Пиковая производительность 1.33 GFLOP/s (0.666 GHz) 4.39 GFLOP/s (2.195 GHz) 3.20 GFLOP/s (1.600 GHz)