6 votos

memoria caché pila en lugar de registros

Hay un procesador que hacer operaciones aritméticas en una pila y no en los registros? Para mantener el rendimiento, por supuesto, que el procesador debe almacenar en caché bloque de la cima de una pila en el mismo tipo de memoria que se utiliza para los registros.

He leído en un papel (David R. Ditzel, H. R. McLellan. Registro de Asignación Gratuita de: La Máquina de Pila de la memoria Caché.) que una caché es más lento 2 veces que se registra debido a:

  • direccionamiento indirecto durante cada uno de los accesos a la caché;
  • la caché cuando la pila crece.

El papel es viejo. Tal vez, las mejoras de diseño del procesador que apareció hace pila de caché viable? Siento que va a reducir la complejidad de los compiladores y optimizar la copia entre los registros y el resto de la memoria.

Actualización 2012-10-18. Debido a que este concepto era bien conocida (no a mí), me cambio la pregunta a "... los procesadores Modernos?"

Actualización 2012-10-18. Me siento en el deber de decir explícitamente que no estoy hablando de "dirección cero máquina". El almacenamiento en caché y "dirección cero" son ortogonales. Mi hipotética procesador puede tener hasta 5-ary, además de como "r3 := r0+r2+r11+r5+r8". "r" significa que la celda de memoria en sp+n, donde sp es un puntero de pila. sp cambios antes y después de un bloque de código. Una muy inusual, cambios en el programa sp en cada operación aritmética.

7voto

GSerg Puntos 33571

Sí, toda la línea de Burroughs computadoras mainframe a partir de 1961 con el B5000 utiliza una arquitectura de pila.

En esta arquitectura, la gestión del flujo de datos y la pila en realidad, no es demasiado de un cuello de botella para el rendimiento. Un tema de mayor importancia es el hecho de que un "cero" dirección de la máquina necesita mucho más instrucciones para completar una determinada tarea de una, dos o tres direcciones de la máquina. La instrucción decodificación y la ejecución de la canalización de convertirse en el principal cuello de botella.

Cuando yo trabajaba allí en la década de 1980, hubo un esfuerzo para construir una CPU que podría prefetch relativamente grandes secuencias de cero-dirección de instrucciones y traducir sobre la marcha a las tres de la dirección de operaciones que se alimenta a la canalización de ejecución. (Piense en un compilador Java JIT implementado en el hardware). Se puso bastante complejo, especialmente para la aplicación de las tecnologías disponibles en el momento, y no sé si esta última estrategia tuvo éxito.

En caso de que usted se esté preguntando, "N" dirección de la terminología se refiere al número de operandos que se pueden especificar en una sola instrucción. Todas las operaciones en una pila de la máquina, de forma implícita, la parte superior de uno o dos lugares en la pila, por lo que hay cero operandos de las instrucciones. Una máquina que tiene un acumulador que se utiliza para todas las operaciones en relación el uno con el otro registro o la ubicación de memoria es una dirección de la máquina. Una de dos direcciones de la máquina puede especificar una arbitraria de origen y de destino de los operandos de una instrucción, y una de tres direcciones de la máquina puede especificar dos operandos fuente y poner el resultado en una independiente de destino.

3voto

Alex Andronov Puntos 178

Recuerdo la lectura de un papel similar (tal vez el mismo) hace alrededor de 17 años. Este enfoque podría ser buena si uno fuera el desarrollo de un procesador para ejecutar una instrucción a la vez de forma rápida. Por desgracia, no funciona bien con los de fuera-de-orden de instrucciones de programación. Si uno tiene un código como:

 ldr r1,[r0]
 ... hacer algo, que no impliquen r1, r2, o [r2]
 str r1,[r2]

Una instrucción programador es libre a cambio de esas dos instrucciones en torno a como lo considere oportuno. Si bien puede ser difícil para la instrucción programador para saber si una escritura en algunos ubicación de memoria podría ser un escriba a [r2], muchos de los lenguajes compilados requieren programadores para indicar qué cosas puede o no puede ser un alias.

Por el contrario, las instrucciones eran más como:

 mov.l [r0],[--sp] ; Pulse [r0] en la pila
 ... hacer algo, que afecta a sp
 mov.l [sp++],[r2] ; Pop [r2] de la pila

sería mucho más difícil para un fuera-de-orden de ejecución de motor para determinar si el operando origen de la última instrucción siempre sería el mismo que el del operando destino de la ex, y si alguno de los intervinientes instrucciones pueden afectar al mismo.

2voto

GetFree Puntos 495

En el pasado algunos trabajo con el Saab Ericsson Space Thor, un microprocesador para aplicaciones espaciales. Funcionó, pero tenía algunos inconvenientes serios. Sólo una: fue expuesta la tubería de la instrucción: la instrucción que carga una palabra de memoria utilizada como dirección de la parte superior de la pila hace 2 instrucciones. Escribí una rutina de copia de memoria rápida para él, pero Saab dijo que no podía utilizarse porque interrumpe causaría problemas...

0voto

Van Gale Puntos 387

El x86 es casi uno de los :-) (y la x87 parte de fp más cerca)

En los sistemas modernos, pila es terrible, sin embargo, porque puede alias a través de núcleos o incluso nodos NUMA, por lo que pueden estar involucrados muchos lento, señalización de larga distancia. O, como mínimo, bloqueos más de lo que usted consigue con un archivo de registro y cambio de nombre de registro.

¡Considerar que no incluso CPUs, pero otros dispositivos pueden datos DMA en su pila--piense Lee tampones!

0voto

user13107 Puntos 313

Había dedicado los procesadores Forth que solía ser utilizado en el procesador de arranque para máquinas Sun/Sparc cuya arquitectura dedicada asignada a la lengua. Pero no está generalmente disponible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X