Большой набор регистров или кэш-память?

Большой набор регистров в составе процессора, организованный по схе­ме регистровых окон, фактически функционирует как сверхбыстродейст­вующий буфер для хранения подмножества переменных, к которым чаще всего приходится обращаться в процессе выполнения текущего фрагмента программы. С этой точки зрения функции набора регистров во многом схожи с функциями кэш-памяти. Поэтому возникает естественный вопрос, а не проще ли будет использовать традиционную схему с кэш-памятью и небольшим на­бором регистров?

В табл.13.1 приведены сравнительные характеристики этих двух подходов.

Таблица 13.1.

Набор регистровых окон Кэш-память
Все локальные скалярные переменные текущих процедур Последние по времени обращения скалярные переменные
Отдельные переменные Блоки оперативной памяти
Глобальные переменные, определенные компилятором Последние по времени обращения глобальные переменные
Сохранение данных в памяти и их восстановление основано на глубине вложенности процедур Сохранение данных в памяти и их восстановление основано на алгоритме обновления кэш-памяти
Регистровая адресация Адресация ячеек памяти

Набор регистровых окон позволяет хранить все локальные скалярные перемен­ные (N-1) текущих процедур (или, по крайней мере, подавляющее большин­ство таких переменных) в регистрах процессора. В кэш-памяти хранятся послед­ние по времени обращения скалярные переменные. Поэтому регистровые окна обеспечивают более быстрый доступ к переменным — все необходимые перемен­ные постоянно находятся "под рукой". Тем не менее, кэш-память обеспечивает более эффективное использование пространства памяти, поскольку при его за­полнении учитывается динамически изменяющаяся ситуация.

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

Глобальные переменные хранятся в кэш-памяти точно так же, как и локальные. Обычно в программах имеется довольно много глобальных переменных, но дале­ко не ко всем из них программа обращается очень часто. Механизм работы с кэш-памятью отслеживает динамическую ситуацию, и в результате в кэш-памяти оказывают­ся именно те глобальные переменные, к которым чаще всего производится об­ращение. При использовании регистров для хранения глобальных перемен­ных вся ответственность за отбор именно тех из них, к которым программа бу­дет чаще всего обращаться, возлагается на компилятор.

Механизм сохранения/восстановления данных в регистровых окнах работа­ет на основе текущей глубины вложенности процедур. Поскольку глубина вложенности, как правило, изменяется в весьма узком диапазоне, к оперативной памяти этот механизм обращается довольно редко. В большинстве схем организации кэш-памяти используется секционированный ассоциативный метод отображения с малым размером секции. Поэтому существует опасность, что другие данные или ма­шинные команды вытеснят из кэш-памяти нужные переменные.

Из всего сказанного следует, что ни одному из обсуждаемых принципов организации процессора нельзя безоговорочно отдать предпочтение. Но существует одна характеристика, по которой схема с регистровыми окнами имеет неоспори­мое преимущество в быстродействии перед схемой с кэш-памятью. Речь идет о накладных расходах, связанных с определением адресов операндов.

Для обращения к локальной скалярной переменной в наборе регистров, организованном в виде множе­ства регистровых окон, достаточно передать "виртуальный" номер соответствующего регистра и номер используемого окна. Эти данные поступают на довольно простой дешифратор, который выбирает нужный регистр в наборе.

Для того чтобы обратить­ся к переменной в кэш-памяти, нужно сформировать полноразмерный виртуальный адрес оперативной памяти, который необходимо затем преобразовать в физический адрес оперативной памяти. Сложность этой операции зависит от способа адресации, структуры модуля преобразования виртуальных адресов в физические адреса, его объема. В кэш-памяти с секциони­рованным ассоциативным методом отображения часть кода адреса используется для считывания количества слов и тэгов, соответствующего размеру секции. Другая часть адреса сравнивается с тэгами, и выбирается одно из прочитанных слов. Совер­шенно очевидно, что каким бы быстродействующим не был блок кэш-памяти, время доступа к данным при таком способе поиска значительно больше, чем при работе с регистровыми окнами. Следовательно, с точки зрения производительности обработки локальных скалярных переменных схема с регистровыми окнами имеет несомненное преимущество. Но регистровые окна желательно сочетать с использованием кэш­-памяти для хранения команд.

Контрольные вопросы

1. Назовите основные подсистемы процессора

2. Какие регистры относят к программно доступным?

3. Какие функции выполняют регистры общего назначения?

4. Какая разрядность регистров общего назначения?

5. Сколько регистров общего назначения?

6. Какие функции выполняют регистры управления и состояния?

7. Какие методы используются для повышения эффективности использования регистров?

8. Что такое регистровые окна?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: