assembly x86 intel cpu-architecture

assembly - ¿Cuál es el motor de pila en la microarquitectura Sandybridge?



x86 intel (2)

  1. Como explica el documento de microarquitectura de Agner Fog , el motor de pila maneja la parte rsp+=8 / rsp-=8 de push / pop / call / ret en la etapa de emisión de la tubería (antes de emitir uops en el fuera de orden (OoO) parte del núcleo).

    Entonces, la parte de ejecución de OoO del núcleo solo tiene que manejar la parte de carga / almacenamiento, con una dirección generada por el motor de pila. Ocasionalmente tiene que insertar un uop para sincronizar su desplazamiento de rsp cuando el contador de desplazamiento de 8 bits se desborda, o cuando el núcleo OoO necesita el valor de rsp directamente (por ejemplo, sub rsp, 8 o mov [rsp-8], eax después de una call , ret , push o pop normalmente hacen que se inserte un uop adicional en las CPU Intel. Las CPU AMD aparentemente no necesitan uops de sincronización adicionales).

    Tenga en cuenta que las tablas de instrucciones de Agner muestran que Pentium-M y más tarde decodifican pop reg en un único uop que se ejecuta solo en el puerto de carga. Pero Pentium II / III decodifica pop eax a 2 uops; 1 ALU y 1 carga , porque no hay un motor de pila para manejar el ajuste ESP fuera del núcleo fuera de servicio. Además de tomar uops adicionales, una larga cadena de push / pop y call / ret crea una dependencia en serie de ESP, por lo que la ejecución fuera de orden tiene que atravesar los uops de ALU antes de que un valor esté disponible para mov ebp, esp o an dirección para mov eax, [esp+16] .

  1. La familia P6 microarch (PPro a Nehalem) almacenó los valores de entrada para una uop directamente en el ROB. En la emisión / cambio de nombre, las entradas de registro "en frío" se leen desde el archivo de registro arquitectónico al ROB (que puede ser un cuello de botella, debido a los puertos de lectura limitados. Ver puestos de registro de lectura). Después de ejecutar un uop, el resultado se escribe en el ROB para que otros uops lo lean. El archivo de registro arquitectónico se actualiza con valores del ROB cuando se retira Uops.

    Las microarquitecturas de la familia SnB (y P4) tienen un archivo de registro físico, por lo que el ROB almacena números de registro (es decir, un nivel de indirección) en lugar de los datos directamente. Re-Order Buffer sigue siendo un nombre excelente para esa parte de la CPU.

Tenga en cuenta que SnB introdujo AVX, con 256b vectores. Presumiblemente, hacer que cada entrada ROB fuera lo suficientemente grande como para almacenar vectores de doble tamaño era indeseable en comparación con solo mantenerlos en un archivo de registro FP más pequeño.

SnB simplificó el formato uop para ahorrar energía. Sin embargo, esto condujo a un sacrificio en la capacidad de micro fusión de uop: los decodificadores y uop-cache aún pueden micro fusionar operandos de memoria usando modos de direccionamiento de 2 registros (indexados), pero están "sin laminar" antes de emitirse al OOO núcleo

Estoy leyendo http://www.realworldtech.com/sandy-bridge/ y estoy enfrentando algunos problemas para entender algunos problemas:

El rastreador de puntero de pila dedicado también está presente en Sandy Bridge y cambia el nombre del puntero de pila, eliminando las dependencias en serie y eliminando una serie de uops.

¿Qué es realmente un dedicated stack pointer tracker ?

Para Sandy Bridge (y el P4), Intel todavía usa el término ROB. Pero es fundamental comprender que, en este contexto, solo se refiere a la matriz de estado para los uops en vuelo

¿Qué significa de hecho? Por favor deja en claro.


La máquina de pila es algo así como otro puerto de ejecución / memoria. Como dice la niebla:

La modificación del puntero de la pila mediante las instrucciones PUSH, POP, CALL y RET se realiza mediante un motor de pila especial. ... Esto alivia la canalización de la carga de μops que modifican el puntero de la pila.

Así que nos ocupamos de la aritmética rsp + = 8 / rsp- = 8. La máquina de pila los maneja sin competir por los recursos del puerto de ejecución. Pero hay más.

La pila de 16 direcciones de retorno de hardware profundo (Sección 3.4.1.4 del Manual de referencia de optimización de arquitecturas Intel® 64 e IA-32) es una sombra rápida de las direcciones de retorno. Apareció en Pentium M. También se usa predicción de retorno. Busque en el documento de Microarchitecture de Fog "return stack buffer" por un poco, pero no mucho más.

Entonces, ahora tiene un buen hardware para reducir la contención del puerto de ejecución para la aritmética de la pila y valores rápidos de la dirección de retorno de la caché. Puede dificultar la vida de la máquina apiladora si intenta burlarla. Básicamente, siempre haga coincidir las llamadas / rets y empujes y estallidos. Entonces estás listo para irte.