Pregunta

De http://code.google.com/p/unladen-swallow / wiki / ProjectPlan Cito:

" El uso de un JIT también nos permitirá mover Python desde una máquina basada en pila a una máquina de registro, que se ha demostrado que mejora el rendimiento en otros lenguajes similares (Ierusalimschy et al, 2005; Shi et al, 2005) . "

En la universidad, creé un compilador simple para un lenguaje con procedimientos recursivos, que mantenía los marcos de pila para cada procedimiento llamado, de modo que puedan llamarse recursivamente y para que los parámetros y los valores de retorno funcionen ...

2 cosas:

1) Estoy en lo cierto al pensar que lo que implementé se consideraría una "máquina basada en pila" dada la terminología utilizada en la cita anterior?

2) Si mi suposición en el punto (1) era correcta, ¿cómo funciona una máquina de registro " ¿trabajo? es decir, ¿en qué se diferencia de una máquina basada en pila?

Gracias!

¿Fue útil?

Solución

Una máquina de registro es una unidad de hardware o software que, cuando trabaja con datos, los toma de la memoria, los coloca en un lugar donde puede trabajar rápidamente y luego devuelve el resultado.

Por ejemplo, una CPU normal es una máquina de registro. Dado que la ALU (la unidad que funciona con números en una CPU) solo puede funcionar con números en un registro.

Una máquina basada en la pila agrega los datos a una pila y luego la saca o la empuja.

Por ejemplo, agregar dos números sería

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

Cuando en una máquina de registro sería algo como esto.

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

Otros consejos

Una máquina de registro casi siempre tiene una pila, también.

Pero una máquina de pila rara vez tiene registros visibles desde el punto de vista arquitectónico, o solo puede tener uno o dos.

Una máquina de registro puede tener algunas operaciones de pila e incluso puede tener un modo de direccionamiento de pila.

La diferencia es de orientación. La máquina de registro tendrá principalmente instrucciones que operan en registros, y tendrá un puñado de operaciones para cargar y almacenar entre los registros y la pila o memoria.

Una máquina de pila ... y estos son muy raros, ya que los dispositivos de hardware reales ... operarán directamente en la pila con sus instrucciones y tendrán un puñado de operaciones para cargar y almacenar entre la pila y la memoria.

Ahora, las razones por las que las máquinas de registro de hardware son más rápidas que las máquinas de pila de hardware posiblemente no estén relacionadas con las razones por las que el software "se registra" Las máquinas virtuales son más rápidas, según el documento citado, que el software "stack" máquinas.

Para las máquinas virtuales de software, aparentemente es el caso de que se deban ejecutar menos instrucciones. Esto se determinó empíricamente de acuerdo con las afirmaciones en el documento citado, pero imagino que es porque se necesitan muchas menos instrucciones generales como push, pop e intercambio en la máquina registradora, y porque la máquina registradora puede reutilizar operandos fácilmente si todavía están acostado en el archivo de registro, sin necesidad de cargar o empujar operaciones. Por supuesto, todo es solo memoria; son registros virtuales.

Una máquina de registro utiliza un número fijo de registros o depósitos para almacenar valores intermedios para el cálculo. Por ejemplo, el " agregar " la instrucción podría agregar los valores en dos registros específicos y almacenar el resultado en otro registro.

Una máquina basada en pila usa una pila para almacenar valores intermedios durante el cálculo. Por ejemplo, para sumar dos números, " sumar " las instrucciones extraen dos valores de la pila, los agregan y vuelven a colocar el resultado en la pila.

  

1) ¿Tengo razón al pensar que lo que yo   implementado se consideraría un   " máquina basada en pila " Dado que   terminología utilizada en la cita   arriba?

No realmente. Una pila de algún tipo es prácticamente la única forma de implementar llamadas a funciones recursivas. Pero una "máquina basada en pila" va mucho más allá al hacer todo a través de la pila. No solo llamadas a funciones, sino también operaciones aritméticas. En cierto modo, se comportan como si cada instrucción de máquina fuera una llamada de función manejada a través de la pila. Se trata de un diseño de máquina muy simple, pero un ensamblador / código de máquina bastante difícil de escribir.

  

2) Si mi suposición en el punto (1) era   bien, ¿cómo funciona una máquina de registro "   ¿trabajo? es decir, en qué se diferencia de un   máquina basada en pila?

Una máquina de registro tiene un almacenamiento interno rápido (registros) y realiza la mayoría de sus operaciones en los datos de estos registros. Hay instrucciones adicionales de la máquina para copiar datos entre registros y memoria principal.

IIRC hay dos tipos de máquinas de pila:

  • Las máquinas acumuladoras tienen un "acumulador", que es básicamente un registro único que contiene el resultado de los cálculos (y también puede proporcionar un operando), con la mayoría de las instrucciones de la máquina operando en el acumulador.
  • " Puro " las máquinas de pila colocan el resultado de los cálculos encima de la pila después de consumir los operandos.

Una máquina de registro es una máquina abstracta cuyos códigos de operación se definen por referencia a su operación en un conjunto de registros con nombre, en lugar de por su operación en la parte superior de una pila.

En una máquina de registro: agregar podría definirse para tomar tres nombres de registro como operandos, agregar el contenido de los dos primeros y colocar el resultado en el tercero. (Más común es el diseño donde solo se nombran uno o dos y el resultado siempre va en un registro de acumulador especial, pero ese no es el punto).

En una máquina de pila: agregar podría definirse para extraer dos operandos de la pila, agregarlos e insertar el resultado en la pila.

¿Tu compilador generó código de máquina? Si es así, su objetivo era una máquina de registro (casi todos los diseños de CPU son máquinas de registro).

Las máquinas de pila almacenan todos los valores en una pila, mientras que las máquinas de registro tienen un número fijo de ranuras de almacenamiento cuyas " direcciones " no cambie (a diferencia de las máquinas de pila).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top