КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Регистры в RISC-процессорах
Отличительная черта RISC-архитектуры — большое число регистров общего назначения, что объясняется стремлением свести все пересылки к типу «регистр-регистр». Но увеличение числа РОН способно дать эффект лишь при разумном их использовании. Оптимизация использования регистров в RISC-процессорах обеспечивается как программными, так и аппаратными средствами. Программная оптимизация выполняется на этапе компиляции программы, написанной на ЯВУ. Компилятор стремится так распределить регистры процессора, чтобы разместить в них те переменные, которые в течение заданного периода времени будут использоваться наиболее интенсивно. На начальном этапе компилятор выделяет каждой переменной виртуальный регистр. Число виртуальных регистров в принципе не ограничено. Затем компилятор отображает виртуальные регистры на ограниченное количество физических регистров. Виртуальные регистры, использование которых не перекрывается, отображаются на один и тот же физический регистр. Если в определенном фрагменте программы физических регистров не хватает, то их роль для оставшихся виртуальных регистров выполняют ячейки памяти. В ходе вычислений содержимое каждой такой ячейки с помощью команды «Чтение» временно засылается в регистр, после чего командой «Запись» вновь возвращается в ячейку памяти. Задача оптимизации состоит в определении того, каким переменным в данной точке программы выгоднее всего выделить физические регистры. Наиболее распространенный метод, применяемый для этой цели, известен как раскраска графа. В общем случае метод формулируется следующим образом. Имеется граф, состоящий из узлов и ребер. Необходимо раскрасить узлы так, чтобы соседние узлы имели разный цвет и чтобы при этом общее количество привлеченных цветов было минимальным. В нашем случае роль узлов выполняют виртуальные регистры. Если два виртуальных регистра одновременно присутствуют в одном и том же фрагменте программы, они соединяются ребром. Делается попытка раскрасить граф в n цветов, где n — число физических регистров. Если такая попытка не увенчалась успехом, то узлам, которые не удалось раскрасить, вместо физических регистров выделяются ячейки в памяти. На рис. 9.37 приведен пример раскраски графа [36], в котором шесть виртуальных регистров отображаются на три физических. Показаны временная последовательность активного вовлечения в выполнение каждого виртуального регистра (рис. 9.37, а) и раскрашенный граф (рис. 9.37, б). Как видно, не удалось раскрасить только виртуальный регистр F, его придется отображать на ячейку памяти. Аппаратная оптимизация использования регистров в RISC-процессорах ориентирована на сокращение затрат времени при работе с процедурами. Наибольшее время в программах, написанных на ЯВУ, расходуется на вызовы процедур и возврат из них. Связано это с созданием и обработкой большого числа локальных переменных и констант. Одним из механизмов для борьбы с этим эффектом являются так называемые регистровые окна. Главная их задача — упростить и ускорить передачу параметров от вызывающей процедуры к вызываемой и обратно. Регистровый файл разбивается на группы регистров, называемые окнами. Отдельное окно назначается глобальным переменным. Глобальные регистры доступны всем процедурам, выполняемым в системе в любое время. С другой стороны, каждой процедуре выделяется отдельное окно в регистровом файле. Все окна имеют одинаковый размер (обычно по 32 регистра) и состоят из трех полей. Левое поле каждого регистрового окна одновременно является и правым полем предшествующего ему окна (рис. 9.38). Среднее поле служит для хранения локальных переменных и констант процедуры. База окна (первый в последовательности регистров окна) указывается полем, называемым указателем текущего окна (CWP, Current Window Pointer), обычно расположенным в регистре (слове) состояния ЦП. Если текущей процедуре назначено регистровое окно j, CWP содержит значение. Каждой вновь вызванной процедуре выделяется регистровое окно, непосредственно следующее за окном вызвавшей ее процедуры. Последние k регистров окна; одновременно являются первыми k регистрами окна j + 1. Если процедура, занимающая окно j, обращается к процедуре, которой в данной архитектуре должно быть назначено окно j + 1, она может передать в процессе вызова k аргументов. Рис. 9.37. Иллюстрация метода раскраски графа: а — временная последовательность активного использования виртуальных регистров; б — граф взаимного использования регистров
Рис. 9.38. Перекрытие регистровых окон
Упомянутые k регистров сразу же будут доступны вызванной процедуре без всяких пересылок. Естественно, вызов приведет к увеличению содержимого поля CPW на единицу. Глубина вложения процедур одна в другую может быть весьма велика, и желательно, чтобы количество регистровых окон не было сдерживающим фактором. Это достигается за счет организации окон в виде циклического буфера. На рис. 9.39 показан циклический буфер из шести окон, заполненный на глубину 4 (процедура А вызвала В, В вызвала С, С вызвала D). Указатель текущего окна (CWP) идентифицирует окно активной на данный момент процедуры — D, то есть окно 03. При выполнении процедуры все ссылки на регистры в командах преобразуются в смещение относительно CWP. Указатель сохраненного окна (SWP, Saved Window Pointer) содержит номер последнего из окон, сохраненных в памяти по причине переполнения циклического буфера. Если процедура D теперь вызовет процедуру Е, аргументы для нее она поместит в общее для обеих поле регистровых окон (пересечение окон 03 и 04), а значение CWP увеличится на единицу, то есть CWP будет показывать на окно 04. Если далее процедура Е вызовет процедуру F, то этот вызов при существующем состоянии буфера не может быть выполнен, поскольку окно для F (05) перекрывается с окном процедуры А (00). Следовательно, при попытке F начать загружать правое поле своего окна будут потеряны параметры процедуры А (Авх). Поэтому когда CWP увеличивается на единицу (операция выполняется по модулю 6) и оказывается равным SWP, возникает прерывание и окно процедуры А сохраняется в памяти (запоминаются только поля Авх и Алок). Далее значение CWP инкрементируется и производится вызов процедуры F. Аналогичное прерывание происходит и при возврате, например когда выполнится возврат из В в A. CWP уменьшается на единицу (по модулю 6) и совпадет со значением SWP. Обработка прерывания приведет к восстановлению содержимого окна процедуры А из памяти. Рис. 9.39. Циклический буфер из пересекающихся регистровых окон
Как видно из примера, регистровый файл из n окон способен поддерживать n - 1 вызов процедуры. Число n не должно быть большим. В [208] показано, что при 8 регистровых окнах сохранение и восстановление окон в памяти требуется лишь для 1% операций вызова процедур. В ВМ Pyramid, например, используется 16 окон по 32 регистра в каждом. Теоретически такой прием не исключен и в CISC. Однако устройство управления CISC-процессора оккупирует на кристалле более 50% площади, оставляя мало места для других подсистем, в частности для большого файла регистров. УУ RISC занимает порядка 10% поверхности кристалла, предоставляя возможность иметь большой регистровый файл. Другая часто встречаемая техника аппаратной оптимизации использования регистров — придание некоторым из них специального качества: такие регистры в состоянии принимать на себя имя любого РОН. Набор регистров, обладающих подобным свойством, называют буфером переименования. Прием оказывается очень удобным при конвейеризации команд и позволяет предотвратить конфликты, когда одна команда хочет воспользоваться регистром, в данный момент занятым другой командой.
Дата добавления: 2014-01-07; Просмотров: 1024; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |