Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Оптимизация часть 3..doc
Скачиваний:
41
Добавлен:
16.04.2013
Размер:
149 Кб
Скачать

Раздел 3.4. Описывает определенные в архитектуре Itanium, особенности обращений к памяти, увеличивающие число зависимостей, которые могут быть удалены транслятором.

3.3.1. Зависимости по управлению

Инструкция является зависимой по управлению, если принятие перехода прямо влияет на выполнение инструкции. В следующем коде инструкция загрузки зависима от перехода:

(p1) br.cond некая_метка

ld8 r4=[r5]

В следующих разделах приведены краткие обзоры зависимостей по управлению и их влияния на оптимизацию.

3.3.1.1. Планирование инструкций и зависимости по управлению

Нижеприведенный код содержит зависимость по управлению при наличии инструкции перехода:

add r7=r6,1 // Такт 0

add r13=r25,r27

cmp.eq p1,p2=r12,r23

(p1) br.cond некая_метка ;;

ld4 r2=[r3] ;;// Такт 1

sub r4=r2,r11 // Такт 3

Компилятор не может безопасно переместить инструкцию загрузки перед переходом, если при этом не может гарантировать, что перемещенная загрузка не вызовет фатальную ошибку программы, либо как-то еще разрушит состояние программы. Так как загрузка не может быть передвинута вверх, то планирование не может быть улучшено при нормальном движении кода. Таким образом, переход создает барьер для инструкций, выполнение которых зависит от него. На рис. 3.1, загрузка в блоке B не может быть передвинута вверх, из-за условного перехода в конце блока А.

Блок А

b r

ld

Блок В

Рис. 3.1. Зависимость по управлению препятствующая движению кода.

3.3.2. Зависимости по данным

Зависимость по данным существует между инструкциями, которые обращаются к регистрам или местам памяти и другими инструкциями, которые изменяют те же самые регистры или места.