Скачиваний:
68
Добавлен:
16.04.2013
Размер:
148.99 Кб
Скачать

3.4. Использование спекулятивности в архитектуре IntelItaniumдля преодоления зависимостей

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

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

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

Эти методики используются для сокрытия времени загрузок и уменьшения времени выполнения.

3.4.1. Модель спекулятивности в архитектуре IntelItanium

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

  • Спекулятивные по управлению инструкции загрузки, задерживают исключения.

  • Спекулятивные по данным инструкции загрузки, сохраняют адресную информацию.

  • Специальные инструкции проверки, проверяют исключения или конфликты данных.

Спекулятивная загрузка Itaniumможет быть передвинута выше барьера зависимости (обозначенного пунктиром), как это показано на рис.3.2.

Использование загрузки

без спекулятивности

Использование загрузки

со спекулятивностью

Зависимость

по данным или управлению

Спекулятивная загрузка, зависимая по данным или управлению

Настоящая загрузка

Проверка на исключения

или конфликт по памяти

Рис. 3.2. Модель спекулятивности в архитектуре IntelItanium

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

3.4.2. Использование спекуляции по данным в архитектуре IntelItanium

Спекуляция по данным в архитектуре Itaniumиспользует специальные инструкции загрузки (ld.a) называемые инструкциями предварительной загрузки (advancedload) и связанные с ними инструкции проверки (chk.aили ld.c) для проверки достоверности результатов спекуляции по данным.

Если выполняется инструкция ld.a, то выделяется элемент в аппаратной структуреALAT(AdvancedLoadAddressTable – таблица адресов предварительных загрузок). ЭлементALATиндексируется номером физического регистра и там записывает адрес загрузки, тип загрузки и размер загрузки.

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

Если выполняется инструкция проверки, то в ALATищется элемент с тем же самым номером и типом приемного физического регистра. Если элемент найден, то выполнение продолжается нормально, со следующей инструкции.

Если же соответствующий элемент не найден, то результаты спекуляции должны быть рассчитаны заново:

  • Используется chk.a, если загрузка или то, что она использовала, является спекулятивным. Инструкцияchk.aпереходит к сгенерированному компилятором коду восстановления для выполнения заново загрузки и зависимых инструкций.

  • Используется ld.c, если использование загрузки не являлось спекулятивным. Инструкцияld.cперезапускает загрузку.

Элементы удаляются из ALATиз-за:

  • Сохранений, которые записывают адреса, накладывающиеся на элементы ALAT.

  • Других предварительных загрузок, у которых приемник является тем же самым физическим регистром, который есть в элементе ALAT.

  • Аппаратно заданного выполнения или условий операционной системы необходимых для обслуживания корректности.

  • Ограничений вместимости, ассоциативности и соответствия алгоритму, используемому для данной реализации ALAT.