- •5. Программная конвейерная обработка и поддержка циклов
- •5.1. Краткий обзор
- •5.2. Терминология циклов и основная поддержка циклов
- •5.3. Оптимизация циклов
- •5.3.1. Развертывание цикла
- •5.3.2. Программная конвейерная обработка
- •5.4. Особенности поддержки циклов в архитектуре Intel Itanium
- •5.4.1. Ротация регистров
- •5.4.3. Переходы циклов с программной конвейерной обработкой
- •5.4.3.1. Переходы счетных циклов
- •5.4.2. Замечание об инициализации ротации предикатов
- •5.4.3.2. Пример счетного цикла
- •5.4.3.3. Переходы while-циклов
- •5.4.4. Краткий обзор терминологии
- •5.5. Оптимизация циклов в архитектуре Intel Itanium
- •5.5.1. While-циклы
- •5.5.2. Циклы с инструкциями, имеющими предикаты
- •5.5.3. Циклы с множеством выходов
- •5.5.3.1. Преобразование циклов с несколькими выходами в циклы с одним выходом.
- •5.5.3.2. Конвейерная обработка с явными многократными выходами
- •5.5.4. Соображения о программной конвейерной обработке
- •5.5.5. Программная конвейерная обработка и предварительные загрузки
- •5.5.5.1. Ограничения емкости
- •5.5.5.2. Конфликты в alat
- •5.5.6. Предварительное разворачивание циклов для программной конвейерной обработки
- •5.5.7. Осуществление сокращений
- •5.5.8. Явный пролог и эпилог
- •5.5.9. Устранение избыточной загрузки в циклах
- •5.6. Итоги
5.4.3.3. Переходы while-циклов
На рис.5.2. показана блок-схема переходов while-циклов.
Есть несколько отличий в работе переходов while-циклов по сравнению с переходами счетных циклов. Переходу while-цикла не нужен LC, вместо этого поведение определяет предикат перехода. В течение фаз ядра и эпилога, предикат перехода равен единице и нулю, соответственно. В течение фазы пролога, предикат перехода может быть либо 0, либо 1, в зависимости от схемы используемой для программы while-цикла. Кроме того, после ротации р16 всегда устанавливается в ноль. Причины этих различий связаны с сущностью while-циклов и будут объяснены подробнее на примере в разделе далее.
wtop, wexit |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|||
|
P |
==0 (prolog/epilog) |
|
|
|
|
|
|||||
|
|
|
|
|
|
(специальные неразворачива- |
||||||
(пролог, ядро) |
==1 |
|
|
>1 |
E C? |
==0 |
|
емые циклы) |
||||
|
|
|
(prolog/epilog) |
|
|
|
|
|
|
|||
|
|
|
|
|
|
(epilog) |
= =1 |
|
|
|
|
|
|
EC=EC |
|
EC -- |
|
EC -- |
|
EC = EC |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PR[63]=0 |
|
PR[63]=0 |
|
PR[63]=0 |
|
PR[63]=0 |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RRB -- |
|
RRB -- |
|
RRB -- |
|
RRB=RRB |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
wtop: переход |
|
|
|
|
|
|
|
wtop: проскок |
||||
wexit : проскок |
|
|
|
|
|
|
|
wexit : переход |
||||
Рис. 5.2. Поток выполнения инструкций wtop и wexit.

R[qp]?