什么是"注册机器"?

Daf*_*ees 24 python language-theory language-design language-implementation

http://code.google.com/p/unladen-swallow/wiki/ProjectPlan我引用:

"使用JIT还可以让我们将Python从基于堆栈的机器移动到注册机器,这已被证明可以提高其他类似语言的性能(Ierusalimschy等,2005; Shi等,2005)."

在大学里,我为一个带有递归过程的语言构建了一个简单的编译器 - 它为每个被调用的过程维护堆栈帧 - 这样就可以递归调用它们,这样参数和返回值就可以工作....

2件事:

1)考虑到上面引用中使用的术语,我是否正确地认为我实施的内容将被视为"基于堆栈的机器"?

2)如果我在第(1)点的假设是正确的,那么"注册机器"如何工作?即它与基于堆栈的机器有何不同?

谢谢!

Óla*_*age 22

寄存器机器是一种硬件或软件单元,在处理数据时从内存中取出它,将其放在可以快速处理它的位置,然后返回结果.

例如,常规CPU是寄存器机器.由于ALU(在CPU中使用数字的单元)只能使用寄存器中的数字.

基于堆栈的机器将数据添加到堆栈中,然后将内容弹出或推送到其上.

例如,添加两个数字即可

Push 2 // Push 2 onto the stack
Push 3 // Push 3 onto the stack
Add // Add the top two things on the stack.
Run Code Online (Sandbox Code Playgroud)

在寄存器机器中它会是这样的.

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
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 11

注册机几乎总是有一个堆栈.

但堆栈机器很少有架构上可见的寄存器,或者它可能只有一个或两个.

寄存器机器可能具有一些堆栈操作,甚至可能具有堆栈寻址模式.

不同之处在于方向.寄存器机器将主要具有对寄存器进行操作的指令,并且将具有一些用于在寄存器和堆栈或存储器之间加载和存储的操作.

堆栈机..这些非常罕见,因为实际的硬件设备..将直接在堆栈上运行其指令,并且将有一堆操作用于在堆栈和内存之间加载和存储.

现在,硬件注册机器比硬件堆栈机器更快的原因可能与软件"注册"VM的速度更快的原因无关,根据引用的论文,它比软件"堆栈"机器更快.

对于软件VM来说,显然需要执行更少的指令.根据引用文章中的说法,这是根据经验确定的,但我想这是因为需要在注册机中完成更少的推送,弹出和交换等开销指令,并且因为如果它们仍然可以轻松地重复使用操作数躺在寄存器文件中,无需加载或推送操作.当然,这真的只是记忆; 它们是虚拟寄存器.


Bri*_*ink 5

寄存器机器使用固定数量的寄存器或桶来存储用于计算的中间值.例如,"add"指令可以将值添加到两个特定寄存器中,并将结果存储在另一个寄存器中.

基于堆栈的机器使用堆栈在计算期间存储中间值.例如,要添加两个数字,"添加"指令会从堆栈中弹出两个值,添加它们,然后将结果推回到堆栈中.