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

редактировать
Пример 4-оконного окна регистра система

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

Содержание

  • 1 Контекст
  • 2 Реализация
  • 3 Применение в ЦП
  • 4 Критика
  • 5 Ссылки

Контекст

Большинство конструкций ЦП включают небольшой объем высокоскоростной памяти, известной как регистры. Регистры используются ЦП для хранения временных значений при работе с более длинными строками инструкций. Значительная производительность может быть добавлена ​​к дизайну с большим количеством регистров. Однако, поскольку регистры являются видимой частью набора команд ЦП, число обычно не может быть изменено после того, как проект был выпущен.

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

Реализация

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

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

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

В проекте 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, увидела работу Беркли и решила, что проблема не в нехватке регистров, а в плохом использовании существующих. Вместо этого они потратили больше времени на выделение регистров своего компилятора, убедившись, что он разумно использует больший набор, доступный в MIPS. Это привело к уменьшению сложности микросхемы с половиной общего числа регистров, одновременно предлагая потенциально более высокую производительность в тех случаях, когда одна процедура могла использовать большее видимое пространство регистров. В конце концов, с современными компиляторами MIPS лучше использует свое регистровое пространство даже во время вызовов процедур.

Ссылки

Последняя правка сделана 2021-06-03 11:53:06
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте