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

3. Обращение к памяти

3.1. Краткий обзор

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

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

3.2. Не спекулятивные обращения к памяти

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

3.2.1. Сохранения в память

В Itanium, целочисленные инструкции запоминания могут записывать 1, 2, 4 или 8 байтов, а инструкции запоминания с плавающей точкой – 4, 8 или 10 байтов. Например, инструкцияst4запишет в память первые четыре байта регистра.

Хотя архитектура Itaniumиспользует, по умолчанию, упорядочивание байт по убыванию, но программа может изменить упорядочивание байт, путем установки в маске пользователя (UM) бита упорядочивания (be).

3.2.2. Загрузки из памяти

Целочисленные инструкции загрузки Itanium, могут читать 1, 2, 4 или 8 байтов, в зависимости от типа используемой загрузки. При загрузке 1, 2 или 4 байтов, перед записью в приемный регистр, данные расширяются нулями до 64 битов.

Хотя загрузки обеспечиваются для различных типов данных, но основной тип данных учетверенное слово (8 байт). Кроме нескольких исключений, все целочисленные операции выполняются над 8-байтовыми данными. Это может быть особенно важно, когда имеем дело с целыми знаковыми числами и 32-битными обращениями, либо с любыми обращениями, которые короче, чем 64 бита.

3.2.3. Подсказки предвыборки данных

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

3.3. Зависимости инструкций

Зависимости по управления и данным являются фундаментальными факторами в оптимизации и планировании инструкций. Такие зависимости могут препятствовать планированию транслятором инструкций в порядке, который вырабатывал бы более короткие критические пути и лучшее использование ресурса, т.к. они ограничивают размещение инструкций относительно других инструкций, от которых они являются зависимыми.

Вообще, обращения к памяти – это главный источник зависимостей по данным и управлению, которые не могут быть нарушены из-за получения неправильного ответа (если нарушена зависимость по данным) или вызывается ошибка, которая не должна быть вызвана (если нарушена зависимость по управлению). Этот раздел описывает:

  • Фоновый материал по зависимостям обращений к памяти

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