35 Модель памяти IA-64
(я не знаю, зачем мы это проходим, IA-64
нигде не используется)
Некоторые особенности IA-64 заметно повышают
производительность. Среди них — сокращение числа обращений к памяти,
планирование команд, сокращение числа условных переходов и спекулятивные
операции.
Модель памяти довольно проста. Всего предусмотрено 264
байт линейной памяти. Имеющиеся команды позволяют обращаться к блокам памяти
размером 1, 2, 4, 8, 16 и 10 байт (последнее значение введено для совместимости
с 80-разрядными числами с плавающей точкой стандарта IEEE 745). Категорической
необходимости в выравнивании обращений к памяти по естественным границам нет,
однако без выравнивания производительность ниже. Память может быть как с
прямым, так и с обратным порядком следования байтов; тот или иной формат
устанавливается специальным битом в регистре, загружаемом операционной
системой.
Лучший способ ускорить обращения к памяти — выполнять
эту операцию в фоновом режиме. В процессоре Itanium 2 предусмотрено 128
64-разрядных регистров общего назначения. Первые 32 из них являются
статическими, а оставшиеся 96 группируются в стек регистров, напоминающий
регистровое окно UltraSPARC III. В отличие от UltraSPARC, количество доступных
программе регистров меняется от одной процедуры к другой. В итоге каждая
процедура получает доступ к 32 статическим регистрам и некоторому (переменному)
количеству регистров, распределяемых динамически.
При
вызове процедуры указатель стека регистров смещается таким образом, чтобы
входные параметры оказались видимыми в регистрах, но сами регистры не были
распределены между локальными переменными. Процедура сама определяет количество
необходимых ей регистров и соответствующим образом перемещает указатель стека.
Сохранять содержимое этих регистров при входе и восстанавливать при выходе не
требуется, хотя, если процедуре нужно изменить статический регистр, она должна
сначала явно сохранить его прежнее значение, а впоследствии восстановить его.
Поскольку количество регистров выражено доступной переменной и обуславливается
требованиями каждой конкретной процедуры, неэффективное применение регистров исключается.
Кроме того,
увеличивается
максимальная глубина вызова процедур, при которой регистры не требуется
«сбрасывать» в память.
В
Itanium 2 есть 128 регистров с плавающей точкой, организованных по стандарту
IEEE 745 и не группируемых в стек. Большое количество регистров этого типа
позволяет сохранять промежуточные результаты множества операций с плавающей
точкой в регистрах, не перемещая их в память.
Кроме
того, в Itanium 2 предусмотрено 64 1-разрядных предикатных регистра, 8
регистров ветвлений и 128 специализированных прикладных регистров, которые
используются для самых различных целей, в частности для обмена параметрами
между прикладными программами и операционной системой. Общая схема регистров
Itanium 2 представлена на рис. 5.29.
Рис.
5.29. Регистры Itanium 2