что такое «регистрационная машина»? - PullRequest
24 голосов
/ 26 октября 2009

С http://code.google.com/p/unladen-swallow/wiki/ProjectPlan Цитирую:

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

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

2 вещи:

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

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

Спасибо!

Ответы [ 6 ]

22 голосов
/ 26 октября 2009

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

Например, обычный ЦП - это машина регистрации. Поскольку 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
11 голосов
/ 26 октября 2009

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

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

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

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

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

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

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

5 голосов
/ 26 октября 2009

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

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

4 голосов
/ 26 октября 2009

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

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

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

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

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

  • У аккумуляторных машин есть «аккумулятор», который в основном представляет собой один регистр, который содержит результат вычислений (и может также предоставлять операнд), при этом большинство машинных инструкций работают на аккумуляторе.
  • «Чистые» стековые машины помещают результат вычислений на вершину стека после использования операндов.
2 голосов
/ 26 октября 2009

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

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

2 голосов
/ 26 октября 2009

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

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

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

...