Подтвердить что ты не робот

Что такое "машина регистрации"?

Из http://code.google.com/p/unladen-swallow/wiki/ProjectPlan Я цитирую:

"Использование JIT также позволит нам переместить Python из машины на основе стека на машину регистрации, которая, как было показано, повышает производительность на других подобных языках (Ierusalimschy et al, 2005; Shi et al, 2005)."

В колледже я построил простой компилятор для языка с рекурсивными процедурами - который поддерживал фреймы стека для каждой вызванной процедуры - чтобы их можно было вызывать рекурсивно и чтобы параметры и возвращаемые значения работали....

2 вещи:

1) Правильно ли я полагаю, что то, что я реализовал, будет считаться "машиной на основе стека" с учетом терминологии, используемой в приведенной выше цитате?

2) Если мое предположение в пункте (1) было правильным, как работает "регистрирующая машина"? то есть, как он отличается от машины на основе стека?

Спасибо!

4b9b3361

Ответ 1

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

Например, обычный ЦП является регистратором. Поскольку ALU (блок, который работает с числами в ЦП) может работать только с числами в регистре.

Машина на основе стека добавляет данные в стек, а затем либо всплывает, либо нажимает на нее материал.

Например, добавление двух чисел будет

Push 2 // Push 2 onto the stack
Push 3 // Push 3 onto the stack
Add // Add the top two things on the stack.

Когда в машине регистрации это будет что-то вроде этого.

Load x, r0 // Load x onto register 0
Load y, r1 // Load y onto register 1
Add r0, r1, r2 // Add 1 and 2 and store the result in register 2

Ответ 2

У регистрационной машины почти всегда есть стек.

Но машина стека редко имеет регистры с архитектурой, или может иметь только один или два.

У регистрационной машины могут быть некоторые операторы стека и могут даже иметь режим адресации стека.

Разница - одна из ориентации. У регистратора в основном будут инструкции, которые работают с регистрами, и будет иметь несколько операций для загрузки и хранения между регистрами и стеком или памятью.

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

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

Для программных виртуальных машин это, по-видимому, случай, когда требуется меньшее количество инструкций. Это было определено эмпирически в соответствии с претензиями в цитированной статье, но я предполагаю это, потому что в машине регистрации должно быть сделано намного меньше служебных инструкций, таких как push, pop и exchange, и потому, что регистратор может легко использовать операнды, если они все еще остаются лежащий в регистровом файле, без необходимости загрузки или push-операций. Конечно, все это просто память; они являются виртуальными регистрами.

Ответ 3

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

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

Ответ 4

1) Правильно ли я думаю, что то, что я будет рассматриваться как "машина на основе стека", учитывая терминология, используемая в цитате выше?

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

2) Если мое предположение в пункте (1) было правильно, как работает "регистратор", Работа? то есть как он отличается от машина на основе стека?

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

IIRC существует два типа стековых машин:

  • Аккумуляторные машины имеют "аккумулятор", который в основном представляет собой единственный регистр, который содержит результат вычислений (а также может поставлять операнд), причем большинство машинных команд работают на аккумуляторе.
  • "Чистые" стековые машины помещают результат вычислений поверх стека после использования операндов.

Ответ 5

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

В машине регистрации: add может быть определен, чтобы взять три имени регистра в качестве операндов, добавить содержимое первых двух и поместить результат в третий. (Чаще всего это дизайн, в котором только один или два названы, и результат всегда идет в специальный регистр накопителя, но это не точка.)

В стековой машине: add может быть определено, чтобы вытолкнуть два операнда из стека, добавить их и нажать результат в стек.

Ответ 6

Создал ли ваш компилятор машинный код? Если это так, то его целью была машина регистрации (почти все конструкции процессора являются регистрационными машинами).

Машины стека сохраняют все значения в стеке, тогда как в регистрационных машинах имеется фиксированное количество слотов для хранения, чьи "адреса" не меняются (в отличие от стековых машин).