- •Глава 12. Регистры
- •12.1. Типы регистров
- •12.2. Программно доступные регистры
- •12.3. Регистры общего назначения
- •Универсальные регистры для хранения данных любых форматов или специализированные регистры в соответствии с определенными типами данных?
- •12.4. Регистры условий
- •12.5. Регистры управления и состояния
- •12.6. Об эффективном использовании регистров
- •12. 7. Программная оптимизация использования регистров
- •12.8. Аппаратный подход к повышению эффективности использования регистров Регистровые окна
- •Глобальные переменные
- •Большой набор регистров или кэш-память?
- •12.9. Контрольные вопросы
12.3. Регистры общего назначения
Перед разработчиками архитектуры процессора встает несколько вопросов, связанных с организацией набора регистров:
Универсальные регистры или регистры с частичной специализацией на выполнение определенного круга функций?
Универсальные регистры для хранения данных любых форматов или специализированные регистры в соответствии с определенными типами данных?
Количество регистров.
Разрядность регистров и размещение в регистрах данных, разрядность которых превышает разрядность регистров.
Универсальные регистры или регистры с частичной специализацией на выполнение определенного круга функций?
Если в процессоре существуют специализированные регистры, то их применение специфицируется неявно через код операции, который требует участия в определенной операции именно такого-то регистра и никакого другого. Явная спецификация операнда при такой организации может только уточнить, какой именно из группы регистров одинакового назначения будет использоваться при выполнении данной команды (если специализированные регистры объединены в группы по назначению). В результате сохраняется пространство в коде команды для другой информации. С другой стороны, любая специализация ограничивает программиста в использовании ресурсов процессора. Однозначного решения этой проблемы, пригодного на все случаи жизни, не существует.
В архитектурах, которые были разработаны еще в 70-х годах 20-го столетия (например, в архитектуре фирмы Intel IA-32), часть регистров общего назначения являлись истинно универсальными, а часть специализированными.
В архитектурах, которые были разработаны значительно позже регистры общего назначения – это универсальные регистры, данные из которых программист мог использовать в любых командах. В тоже время некоторые из этих универсальных регистров все-таки были специализированы, например: один из них предназначался для хранения номера текущей команды; другой – для хранения адреса возврата из подпрограммы; третий – для хранения указателя стека.
Универсальные регистры для хранения данных любых форматов или специализированные регистры в соответствии с определенными типами данных?
Однозначного ответа на этот вопрос не существует.
В архитектурах процессоров для построения специализированных компьютеров с относительно невысокой производительностью для управления различными технологическими объектами предпочтение отдается универсальным регистрам для хранения данных любых форматов данных (с фиксированной точкой, с плавающей точкой, адресов).
В архитектурах процессоров для построения как универсальных, так и специализированных компьютеров с высокой производительностью предпочтение отдается наборам специализированных по форматам данных регистров. В таких архитектурах имеются: универсальные регистры для данных с фиксированной точкой и адресов; универсальные регистры для данных с плавающей точкой; универсальные векторные регистры.
Количество регистров
Чем больше регистров, тем:
меньше обращений в оперативную память, а значит, тем выше производительность компьютера;
больший размер поля адресов регистров в команде и, соответственно, больше формат команды;
больше времени необходимо для их сохранения в оперативной памяти при прерываниях и переключениях процессов;
больше аппаратные затраты на их реализацию.
Чем меньше регистров в процессоре, тем:
чаще придется обращаться к оперативной памяти, а, значит, меньше производительность компьютера;
меньший размер поля адресов регистров в команде и, соответственно, короче формат команды;
меньше времени необходимо для их сохранения в оперативной памяти при прерываниях и переключениях процессов;
меньше аппаратные затраты на их реализацию.
В архитектурах процессоров для построения специализированных компьютеров с относительно невысокой производительностью для управления различными технологическими объектами используется 8 универсальных регистров общего назначения для хранения данных любых форматов данных (с фиксированной точкой, с плавающей точкой, адресов).
В архитектурах процессоров для построения специализированных компьютеров с относительно высокой производительностью для управления различными технологическими объектами используется 16 универсальных регистров общего назначения для хранения данных любых форматов данных (с фиксированной точкой, с плавающей точкой, адресов).
В архитектурах процессоров для построения как универсальных, так и специализированных компьютеров с высокой производительностью используется от 16 до 32 универсальных регистров для данных с фиксированной точкой и адресов; количество регистров для данных с плавающей точкой, векторных регистров – не менее 16.
В некоторых архитектурах (например, в архитектуре EPIC фирмы Intel) используется: 128 регистров для данных с фиксированной точкой и адресов; 128 регистров - для данных с плавающей точкой.
Тем не менее, увеличение количества регистров свыше определенного порога не приводит к существенному сокращению частоты обращений к оперативной памяти. Это означает, что затраты на их включение в процессор не окупаются.
Однозначного ответа на вопрос об оптимальном количестве регистров не существует.
Разрядность универсальных регистров
Если в архитектуре предусмотрены регистры для хранения данных с плавающей точкой, то, как правило, такие регистры 64-разрядные.
Если в архитектуре предусмотрены универсальные векторные регистры для хранения данных как с плавающей точкой, так и с фиксированной точкой, то разрядность таких регистров определяется областью применения компьютера. Известны 256- и 512-ти разрядные универсальные векторные регистры.
Универсальные регистры, предназначенные для хранения адресов, должны иметь разрядность, соответствующую длине адреса при включении в состав компьютера оперативной памяти максимального объема. В ряде архитектур высокопроизводительных процессоров универсальные регистры 64-разрядные.
В некоторых архитектурах универсальные регистры для хранения данных с фиксированной точкой 32-разрядные. Для хранения данных удвоенной разрядности (например, 64-разрядных данных с фиксированной точкой) в таких архитектурах используется пара универсальных регистров.
Универсальные регистры для хранения данных с фиксированной точкой должны иметь разрядность, позволяющую хранить элементы большинства типов данных, используемых в компьютере, в одном регистре.
