Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 13. Регистры.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
152 Кб
Скачать
☆

12.6. Об эффективном использовании регистров

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

Так как большая часть операндов представляет локальные скалярные перемен­ные, ускорить доступ к операндам можно с помощью увеличения объема регист­ровой памяти процессора.

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

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

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

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

В на­стоящее время в основном используется программный метод. Аппаратный подход используется редко, например, в компьютерах фирмы Sun семейства SPARC, в компьютерах с архитектурой EPIC.

12. 7. Программная оптимизация использования регистров

Пусть в составе процессора имеется небольшое ко­личество регистров (примерно 16-32) и ответственность за их оп­тимальное использование перекладывается на программы компиляторов с языков высокого уровня в машинный код. Естественно, что в исходном тексте программы на языке высокого уровня никаких ссылок на регистры не содержится. Обращение ко всем языковым кон­струкциям, описывающим данные в программе, производится на уровне симво­лов языка. Компилятор должен так преобразовать исходный текст программы в последовательность машинных команд, чтобы как можно больше часто используемых в текущем фрагменте переменных хранилось в регистрах, а не в оперативной памяти. В итоге, количество операций пересылки данных между регистрами и оперативной памятью будет минимальным.

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