- •Глава 12. Регистры
- •12.1. Типы регистров
- •12.2. Программно доступные регистры
- •12.3. Регистры общего назначения
- •Универсальные регистры для хранения данных любых форматов или специализированные регистры в соответствии с определенными типами данных?
- •12.4. Регистры условий
- •12.5. Регистры управления и состояния
- •12.6. Об эффективном использовании регистров
- •12. 7. Программная оптимизация использования регистров
- •12.8. Аппаратный подход к повышению эффективности использования регистров Регистровые окна
- •Глобальные переменные
- •Большой набор регистров или кэш-память?
- •12.9. Контрольные вопросы
12.6. Об эффективном использовании регистров
Под эффективностью использования регистров будем понимать отношение числа обращений к переменным, расположенным в регистрах, к общему числу обращений к переменным в программе.
Так как большая часть операндов представляет локальные скалярные переменные, ускорить доступ к операндам можно с помощью увеличения объема регистровой памяти процессора.
Регистровая память имеет наименьшее время обращения, поэтому стремятся разработать такую стратегию использования регистров в программах, которая обеспечивала бы размещение в регистрах как можно большего количества операндов и минимизировала потребность в пересылке данных из оперативной памяти в регистры и обратно.
Возможны два подхода к решению этой проблемы. Один подход основывается на программных методах — разработке эффективных компиляторов, а второй — на аппаратных — включении в состав процессора большого количества регистров.
При использовании программных методов основные функции выполняет компилятор, преобразующий программу на языке высокого уровня в последовательность машинных команд. При этом машинная программа должна быть составлена таким образом, чтобы как можно большая часть переменных, необходимых при выполнении текущего фрагмента программы, размещалась в регистрах процессора. В таком компиляторе требуется реализовать сложные алгоритмы анализа структуры и статистических характеристик исходной программы и на основании этого анализа выполнить оптимальное распределение переменных между ячейками памяти и регистрами процессора.
Аппаратный подход состоит в том, чтобы включить в состав процессора по возможности больше регистров и организовать наиболее эффективное их использование, размещая в регистрах переменные на более длительный период времени.
В настоящее время в основном используется программный метод. Аппаратный подход используется редко, например, в компьютерах фирмы Sun семейства SPARC, в компьютерах с архитектурой EPIC.
12. 7. Программная оптимизация использования регистров
Пусть в составе процессора имеется небольшое количество регистров (примерно 16-32) и ответственность за их оптимальное использование перекладывается на программы компиляторов с языков высокого уровня в машинный код. Естественно, что в исходном тексте программы на языке высокого уровня никаких ссылок на регистры не содержится. Обращение ко всем языковым конструкциям, описывающим данные в программе, производится на уровне символов языка. Компилятор должен так преобразовать исходный текст программы в последовательность машинных команд, чтобы как можно больше часто используемых в текущем фрагменте переменных хранилось в регистрах, а не в оперативной памяти. В итоге, количество операций пересылки данных между регистрами и оперативной памятью будет минимальным.
Исследования показали, что применение даже простых алгоритмов оптимизации делает излишним использование количества регистров свыше 64. Применение же сложных алгоритмов оптимизации позволяет вполне обойтись 32 регистрами без сколько-нибудь заметного снижения производительности. Кроме того, исследователи пришли к выводу, что при использовании небольшого количества регистров (например, 16) компьютер без специализации регистров работает быстрее, чем компьютер с разделением регистров по типам форматов чисел. Аналогичные результаты были получены и в ряде других работ, в которых сравнивалась эффективность использования оптимизирующих компиляторов для процессоров с малым числом регистров по сравнению с процессорами с расширенным набором регистров, организованных в виде регистровых окон.
