Сколько регистров в кастомной ВМ? - PullRequest
1 голос
/ 01 июня 2010

Я создаю собственную виртуальную машину и мне интересно, сколько регистров мне следует использовать. Изначально у меня было 255, но я немного беспокоюсь о том, чтобы сохранять 255 указателей (целый КБ) в стеке или куче каждый раз, когда я вызываю функцию, когда большинство из них даже не используются. Сколько регистров я должен использовать?

Ответы [ 4 ]

4 голосов
/ 01 июня 2010

Возможно, вы захотите заглянуть в окна регистров , которые позволяют сократить количество «активных» регистров, доступных одновременно, при сохранении большого количества регистров в ядре. *

Сказав это, вы можете обнаружить, что использование стековой архитектуры более удобно. Некоторые основные виртуальные машины, предназначенные для реализации в программном обеспечении (JVM, CLR, Python и т. Д.), Используют стековую архитектуру. Конечно, проще написать компилятор для стека, чем искусственно ограниченный набор регистров.

1 голос
/ 01 июня 2010

Независимо от того, какое количество регистров вы выберете, у вас, вероятно, будет слишком много для большинства подпрограмм и слишком мало для нескольких подпрограмм.(Это всего лишь предположение. Однако, учитывая, сколько вещей в программировании следует распределению степенных законов - входящие ссылки на объекты, модули, классы, исходящие ссылки из объектов, модулей, классов, цикломатическая сложность подпрограмм, сложность подпрограмм NPath, SLOCдлина подпрограмм, время жизни объектов, размер объектов - разумно предположить, что то же самое верно для количества регистров для подпрограммы, особенно если вы считаете, что, вероятно, существует корреляция между сложностью / длиной и количеством регистров.)

Виртуальная машина Parrot нашла довольно простой выход из этой головоломки: у них есть бесконечное количество регистров.Очевидно, что эти регистры не хранятся в бесконечном массиве, скорее, они лениво материализуют достаточно регистров для любой отдельной подпрограммы.Таким образом, они никогда не исчерпывают регистры и никогда не тратят место.

1 голос
/ 01 июня 2010

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

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

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

0 голосов
/ 02 июня 2010

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

Абсолютно отвратительный шаблонный беспорядок, в который это превращается для простых концепций дизайна, хотя делает меня чрезвычайно несчастным. Хочу купить: статические if и variadic шаблоны.

...