что такое «регистрационная машина»?
-
06-07-2019 - |
Вопрос
От http://code.google.com/p/unladen-swallow/wiki/ProjectPlan Я цитирую:
«Использование JIT также позволит нам перенести Python со стековой машины на регистровую машину, что, как было показано, повышает производительность на других подобных языках (Ierusalimschy et al, 2005;Ши и др., 2005)».
В колледже я создал простой компилятор для языка с рекурсивными процедурами, который поддерживал кадры стека для каждой вызываемой процедуры, чтобы их можно было вызывать рекурсивно и чтобы параметры и возвращаемые значения работали....
2 вещи:
1) Прав ли я, полагая, что то, что я реализовал, будет считаться «машиной на основе стека», учитывая терминологию, использованную в приведенной выше цитате?
2) Если мое предположение в пункте (1) оказалось верным, то как работает «регистрационная машина»?то естьчем он отличается от машины на основе стека?
Спасибо!
Решение
Регистровая машина — это аппаратный или программный блок, который при работе с данными извлекает их из памяти, помещает в место, где можно быстро с ними работать, а затем возвращает результат.
Например, обычный процессор — это регистровая машина.Поскольку АЛУ (устройство, работающее с числами в ЦП) может работать только с числами в регистре.
Машина на основе стека добавляет данные в стек, а затем либо извлекает, либо помещает в него данные.
Например, добавление двух чисел будет
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
Другие советы
Регистровая машина почти всегда имеет стек.
Но стековая машина редко имеет архитектурно видимые регистры или может иметь только один или два.
Регистровая машина может иметь несколько операций стека и даже режим адресации стека.
Разница заключается в ориентации.Регистровая машина в основном будет иметь инструкции, которые работают с регистрами, и будет иметь несколько операций для загрузки и хранения между регистрами и стеком или памятью.
Стековая машина..и они очень редки как настоящие аппаратные устройства..будет работать непосредственно со стеком со своими инструкциями и будет иметь несколько операций для загрузки и хранения между стеком и памятью.
Теперь, согласно цитируемой статье, причины того, что машины аппаратной регистрации работают быстрее, чем машины аппаратного стека, возможно, не связаны с причинами того, что программное обеспечение «регистрирует» виртуальные машины быстрее, чем машины программного «стека».
Очевидно, что для программных виртуальных машин необходимо выполнять меньше инструкций.Это было определено эмпирически в соответствии с утверждениями в цитируемой статье, но я предполагаю, что это связано с тем, что в регистровой машине необходимо выполнять гораздо меньше накладных инструкций, таких как push, pop и Exchange, и потому, что регистровая машина может легко повторно использовать операнды, если они все еще лежит в файле реестра, без необходимости загрузки или push-операций.Конечно, на самом деле это всего лишь воспоминания;это виртуальные регистры.
Регистровая машина использует фиксированное количество регистров или сегментов для хранения промежуточных значений для вычислений.Например, инструкция «добавить» может складывать значения в двух конкретных регистрах и сохранять результат в другом регистре.
Машина на основе стека использует стек для хранения промежуточных значений во время вычислений.Например, чтобы сложить два числа, инструкция «добавить» извлекает два значения из стека, складывает их и помещает результат обратно в стек.
1) Правильно ли я думаю, что то, что я реализовал, будет считаться «машиной на основе стека», учитывая терминологию, используемую в приведенной выше цитате?
Не совсем.Тот или иной стек — практически единственный способ реализовать рекурсивные вызовы функций.Но «машина на основе стека» идет гораздо дальше. все через стек.Не только вызовы функций, но и арифметические операции.В каком-то смысле они ведут себя так, как будто каждая машинная инструкция представляет собой вызов функции, обрабатываемый через стек.Это обеспечивает очень простую конструкцию машины, но довольно сложный для написания ассемблерный/машинный код.
2) Если мое предположение в точке (1) было правильным, как работает «машина регистрации»?то естьЧем он отличается от машины на основе стека?
Регистровая машина имеет быстрое внутреннее хранилище (регистры) и выполняет большую часть операций с данными в этих регистрах.Существуют дополнительные машинные инструкции для копирования данных между регистрами и основной памятью.
IIRC существует два типа стековых машин:
- Машины с аккумулятором имеют «аккумулятор», который по сути представляет собой один регистр, в котором хранятся результаты вычислений (а также могут предоставляться операнды), при этом большинство машинных инструкций работают с аккумулятором.
- «Чистые» стековые машины помещают результат вычислений на вершину стека после использования операндов.
Регистровая машина — это абстрактная машина, коды операций которой определяются ссылкой на их работу с набором именованных регистров, а не на их работу с верхней частью стека.
В регистрационной машине:add можно определить так, чтобы принимать три имени регистра в качестве операндов, добавлять содержимое первых двух и помещать результат в третий.(Более распространенной является конструкция, в которой именуются только один или два, а результат всегда сохраняется в специальном аккумуляторном регистре, но дело не в этом.)
В стековой машине:add можно определить для извлечения двух операндов из стека, добавления их и помещения результата в стек.
Ваш компилятор сгенерировал машинный код?Если да, то его целью была регистровая машина (почти все конструкции ЦП являются регистровыми машинами).
Стековые машины хранят все значения в стеке, тогда как регистровые машины имеют фиксированное количество слотов хранения, «адреса» которых не меняются (в отличие от стековых машин).