Окно регистрации - Register window

Пример 4-оконной регистровой оконной системы

В компьютерной технике , зарегистрировать окна являются особенностью , которая предназначает регистры подпрограммы путем динамического наложения подмножества внутренних регистров в фиксированных, программистами видимых регистров. Окна регистров реализованы для повышения производительности процессора за счет уменьшения количества операций со стеком, необходимых для вызовов функций и возвратов. Одна из наиболее важных особенностей дизайна Berkeley RISC , позже они были реализованы в архитектурах набора команд, таких как AMD Am29000 , Intel i960 , Sun Microsystems SPARC и Intel Itanium .

Общие операции

Для разных частей программы предусмотрено несколько наборов регистров. Регистры намеренно скрыты от программиста, чтобы заставить несколько подпрограмм совместно использовать ресурсы процессора.

Сделать регистры невидимыми можно эффективно; ЦП распознает переход от одной части программы к другой во время вызова процедуры. Это выполняется одной из небольшого количества инструкций ( пролог ) и заканчивается одной из столь же небольшого набора ( эпилог ) . В дизайне Беркли эти вызовы заставили бы новый набор регистров быть "замененным" в этой точке или помеченным как "мертвый" (или "повторно используемый") по окончании вызова.

Применение в процессорах

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

Для сравнения: архитектура Sun Microsystems SPARC обеспечивает одновременную видимость четырех наборов по восемь регистров в каждом. Три набора по восемь регистров в каждом имеют "окно". Восемь регистров (от i0 до i7) образуют регистры ввода для текущего уровня процедуры. Восемь регистров (от L0 до L7) являются локальными для текущего уровня процедуры, а восемь регистров (от o0 до o7) являются выходными данными с текущего уровня процедуры на следующий вызываемый уровень. При вызове процедуры окно регистров сдвигается на шестнадцать регистров, скрывая старые регистры ввода и старые локальные регистры и делая старые регистры вывода новыми регистрами ввода. Общие регистры (старые регистры вывода и новые регистры ввода) используются для передачи параметров. Наконец, восемь регистров (от g0 до g7) глобально видимы для всех уровней процедур.

AMD 29000 улучшил дизайн, позволив окнам иметь переменный размер, что помогает использовать их в общем случае, когда для вызова требуется менее восьми регистров. Он также разделил регистры на глобальный набор из 64 и дополнительных 128 для окон. Точно так же архитектура IA-64 (Itanium) использовала окна переменного размера с 32 глобальными регистрами и 96 для окон.

В архитектуре Infineon C166 большинство регистров - это просто места во внутренней RAM, которые обладают дополнительным свойством быть доступными как регистры. Из них адреса 16 регистров общего назначения (R0-R15) не являются фиксированными. Вместо этого регистр R0 расположен по адресу, указанному регистром «указателя контекста» (CP), а оставшиеся 15 регистров следуют последовательно после этого.

Окна регистрации также обеспечивают простой способ обновления. Поскольку дополнительные регистры невидимы для программ, дополнительные окна могут быть добавлены в любое время. Например, использование объектно-ориентированного программирования часто приводит к большему количеству «меньших» вызовов, которые могут быть выполнены, например, путем увеличения окон с восьми до шестнадцати. Такой подход использовался в SPARC, который включал больше окон регистров с новыми поколениями архитектуры. Конечный результат меньше медленно окно регистра разлив и заполнение операция , так как регистровые окна переполнения реже.

Критика

Окна регистров - не единственный способ повысить производительность регистров. Группа из Стэнфордского университета, разрабатывающая MIPS, увидела работу Беркли и решила, что проблема не в нехватке регистров, а в плохом использовании существующих. Вместо этого они инвестировали больше времени в их компиляции «s распределения регистров , убедившись , что он мудро использовал больший набор доступных в MIPS. Это привело к уменьшению сложности микросхемы с половиной от общего числа регистров, предлагая потенциально более высокую производительность в тех случаях, когда одна процедура может использовать большее видимое пространство регистров. В конце концов, с современными компиляторами MIPS лучше использует свое регистровое пространство даже во время вызовов процедур.

использованная литература