Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разное (электроника) > Вопрос о реализации регистровых банков


Автор: actuator 14.1.2012, 22:47
Сам аппаратным синтезом не занимаюсь, но хотелось бы услышать мнение специалистов.

Когда-то я учился программировать микроконтроллеры на архитектуре MCS-51. Оттуда мне запомнилось наличие нескольких банков регистров, переключение между которыми практически бесплатно. Это ж во как здорово для любых видов многозадачности! Не нужно заталкивать регистры в стек, достаточно просто переключиться на другой банк. Я так делал для прерываний.

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

В связи с этим вопрос - можно ли сделать процессор с относительной адресацией регистров? Ну, чтобы использовать не целый банк, а столько, сколько их нужно, как мы поступаем со стеком? Например, сделать дополнительный регистр r с номером смещения в регистровом файле. Функции тогда будут обращаться не по абсолютному номеру "reg(4)", а по относительному "reg(r + 4)". Когда потребуется сохранить/восстановить контекст, компилятор в зависимости от наличия места в файле либо просто переключит номер регистра (дешево?), либо загрузит файл целиком из стека/памяти и тоже переключит номер. Так, я думаю, можно будет избавиться от большого количества сохранений контекста в стек. Забавно, выглядело бы это как стековый процессор, у которого в роли инструкций функции программы. К тому же, у меня подозрение, что именно так работает многозадачность на современных видеокартах - с аппаратным планировщиком и контроллером памяти, реализующими ту же стратегию.

Автор: xvr 16.1.2012, 14:12
Цитата(actuator @  14.1.2012,  22:47 Найти цитируемый пост)
В связи с этим вопрос - можно ли сделать процессор с относительной адресацией регистров?

Есть такие. SPARC например.

Автор: actuator 16.1.2012, 18:12
Спасибо, похоже, я изобрел то, что уже сделано до меня, по научному http://en.wikipedia.org/wiki/Register_window. И даже используется примерно так, как я подумал. Присмотрюсь к Спаркам повнимательнее.

Автор: xvr 16.1.2012, 19:05
Еще посмотрите в сторону Itanium'а, там не только Register Windows, там есть полноценные косвенные адресации к регистрам (смотреть в сторону циклов с Software Pipeline)

Автор: ТарасАтавин 23.11.2013, 15:07
Цитата(actuator @  14.1.2012,  22:47 Найти цитируемый пост)
Когда-то я учился программировать микроконтроллеры на архитектуре MCS-51. Оттуда мне запомнилось наличие нескольких банков регистров, переключение между которыми практически бесплатно. Это ж во как здорово для любых видов многозадачности! Не нужно заталкивать регистры в стек, достаточно просто переключиться на другой банк. Я так делал для прерываний.
Количество банков всегда ограничено, кроме того, обычно требуется после сохранения регистров в стек переписать значения лишь некоторых регистров, а у остальных должны остаться значения, которые они имели до сохранения, переключение же на другой банк заменяет все регистры банка. Я писал для двухбанкового камня, но ни разу не смог использовать переключение банков. Более менее понятно, как программировать камень, у которого сразу несколько слотов, в каждый из которых можно выбирать банк регистров, или как программировать многобанковый камень, используя стек для восстановления части регистров после переключения банков.

Автор: TarasProger 17.8.2015, 09:48
Цитата(actuator @  14.1.2012,  22:47 Найти цитируемый пост)
Когда-то я учился программировать микроконтроллеры на архитектуре MCS-51. Оттуда мне запомнилось наличие нескольких банков регистров, переключение между которыми практически бесплатно. Это ж во как здорово для любых видов многозадачности! Не нужно заталкивать регистры в стек, достаточно просто переключиться на другой банк. Я так делал для прерываний.
Сколько у тебя банков? И сколько задач? Стек тупо больше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)