Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M8 / Введение в арихитектуру Itanium.doc
Скачиваний:
20
Добавлен:
16.04.2013
Размер:
91.14 Кб
Скачать

2.6.3. Предикация

Предикация – это условное выполнение инструкций. В традиционной архитектуре условное выполнение осуществляется с помощью переходов. Архитектура Itaniumосуществляет эту функцию, используя предикацию инструкций. Предикация удаляет переходы, используемые для получения условного выполнения в больших основных блоках, и устраняет потери связанных с ошибочными предсказаниями переходов.

Рассмотрим инструкцию без предикатов

r1 = r2 + r3

если ее предикатировать, то она примет вид

if (p5) r1 = r2 + r3

В этом примере р5 является условием (предикатом) управления, который решает – будет или не будет эта инструкция выполняться и изменять состояние. Если значение условия – истина, то инструкция обновит состояние. В противном случае она эквивалента NOP. Предикаты – это значения назначенные командами сравнения.

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

if (a>b) c = c + 1

else d = d * e + f

Можно избежать перехода по условию путем превращения кода в предикатный код:

pT, pF = compare(a>b)

if (pT) c = c + 1

if (pF) d = d * e + f

Если условие будет истинным, то предикат рТ будет установлен в 1, иначе – в 0. Предикат pFявляется обратным по отношению к рТ. Зависимость по управлению в инструкцияхc = c + 1 иd = d * e + fвыраженная в переходе по условию (a>b) теперь, преобразуется в зависимость по данным рТ иpF, которые получаются в результате операцииcompare(a>b), а переход ликвидируется. Дополнительный выигрыш состоит в том, что компилятор может планировать инструкции с рТ иpFдля параллельного выполнения. Стоит также отметить, что имеется несколько различных типов инструкций сравнения, которые записывают предикаты в различной манере включая безусловное сравнение и параллельное сравнение.

2.7. Стек регистров

Архитектура Itaniumизбегает, если это не необходимо заполнения и очистки регистров при вызове процедур и обеспечивает интерфейс возврата через переименование управляемое компилятором. В узле вызова новое окно регистров оказывается доступным для вызванной процедуры без необходимости сливания (spill) и заливания (fill) регистров (как вызывающей, так и вызываемой процедурами). Доступ к регистрам осуществляется путем переименования идентификаторов виртуальных регистров в инструкциях, используя набор регистров в физические регистры. Вызванная процедура может свободно использовать доступные регистры, не заботясь о сохранении и восстановлении регистров вызывающей процедуры. Вызванная процедура выполняет инструкциюalloc,задавая количество регистров, которое она собирается использовать, для того чтобы гарантировать, что доступно достаточно регистров. Если достаточное количество регистров недоступно (overflow– выход за верхнюю границу стека), тоallocостанавливает процессор и сливает регистры вызвавшей программы до тех пор, пока не будет доступно необходимое количество регистров.

В узле возврата набор регистров восстанавливается в то состояние, которое имела вызывающая программа до вызова. Некоторые регистры вызывающей процедуры могли быть слиты аппаратно и пока не восстановлены. В этом случае (underflow– выход за нижнюю границу стека) процессор остановится до тех пор, пока процессор не восстановит необходимое количество регистров вызывающей процедуры. Аппаратные средства могут эксплуатировать явную информацию об окне регистрового стека для сливания и заливания регистров из регистрового стека в память для лучшего использования (независимо от вызывающей и вызываемой процедур).

Соседние файлы в папке M8