La Red de Conocimientos Pedagógicos - Currículum vitae - Predicción de rama mejorada y captura previa de datos de hardware para procesadores Pentium

Predicción de rama mejorada y captura previa de datos de hardware para procesadores Pentium

Cuando la tubería en el procesador comienza a funcionar a máxima velocidad y de repente se ejecuta una rama incorrecta del programa, el procesador encontrará la rama correcta nuevamente. Durante este proceso, algunas unidades de ejecución quedarán inactivas y los retrasos en la ejecución aumentarán, lo que afectará aún más el rendimiento final. El propósito de la lógica de predicción de ramas es minimizar la probabilidad de que se produzca esta situación. En Pentium M, la lógica de predicción de bifurcaciones es una mejora importante. De hecho, la prueba de ejecución de sucursales del Pentium M es muy similar a la del Pentium 4.

Para ser precisos, la unidad de predicción de rama del Pentium M debería ser similar al procesador Pentium 4 con núcleo Prescott. Agrega dos partes: una es identificar bucles y la otra es predecir ramas indirectas. Debido a esto, la predicción de ramas en el Pentium M es significativamente diferente del Pentium 4 anterior de Prescott y es más avanzada que ellos. Por supuesto, es muy difícil mejorar aún más los métodos tradicionales de predicción de ramas estáticas basados ​​en tablas de historial de ramas. Sin embargo, al mejorar la unidad de predicción de ramas en los siguientes aspectos, los ingenieros de Intel mejoraron la precisión de predicción del Pentium M en un 20%, que por supuesto se compara con el Pentium III.

La primera mejora es la adición de una lógica de identificación de ciclos. En los métodos tradicionales de predicción de rama estática, la condición de final del bucle de la predicción de rama siempre es incorrecta. Por supuesto, podemos resolver el problema ampliando la capacidad del búfer para almacenar más información de la sucursal y luego analizando los datos que contiene. Pero analizar los datos uno por uno provoca grandes retrasos. Por lo tanto, el Pentium M utiliza un enfoque ligeramente diferente para separar la lógica de identificación del bucle y la información de conclusión del bucle en el código. Esto puede mejorar en gran medida la precisión de la predicción de las condiciones al final del ciclo.

El segundo es mejorar la predicción de ramas indirectas. La llamada rama indirecta es la dirección de rama de una rama, que se desconoce cuando se compila el programa y está determinada por el estado de los registros relevantes cuando se ejecuta el programa. La predicción de sucursales estáticas tradicionales utiliza dos tablas, la tabla de historial de sucursales y la tabla de direcciones de sucursales. Con estas dos tablas, pero falta la tabla de direcciones de sucursales indirectas, la precisión del resultado de la predicción no supera el 75%. Por lo tanto, los desarrolladores agregaron una nueva tabla de sucursales indirectas al Pentium M específicamente para almacenar dichas direcciones de sucursales indirectas.

Después de las dos mejoras anteriores, debido a la precisión de predicción enormemente mejorada, la canalización se ejecuta a máxima velocidad más veces que antes y la unidad de ejecución espera tiempos de inactividad con menos frecuencia. Debido a esto, el rendimiento general del Pentium M es aproximadamente un 7% mayor que el del Pentium III en la misma frecuencia. Además, con la mejora de la unidad de predicción de rama, Pentium M también actualizó la lógica de búsqueda previa de datos del hardware para recuperar datos de la memoria al caché. Pentium M utiliza un algoritmo de captación previa de datos de hardware similar al procesador Pentium 4 con núcleo Prescott, que es más eficiente que el Pentium III.

Pentium M, al igual que Pentium III y Pentium 4, son procesadores RISC. Esto significa que la unidad de ejecución es mucho más eficiente a la hora de procesar comandos internos simplificados que instrucciones complejas x86. En otras palabras, ejecutar instrucciones RISC es más rápido y fluido que ejecutar arquitecturas x86, que normalmente constan de tres o más operandos. Por lo tanto, los comandos x86 generalmente se dividen en dos o incluso tres microoperaciones después de pasar por el decodificador.

Por ejemplo, un comando para almacenar datos en la memoria o un comando para procesar datos en la memoria se decodifica en dos instrucciones respectivamente. En el primer caso, consta de dos instrucciones: calcular la dirección y almacenar los datos en el búfer; en el segundo caso, consta de dos instrucciones: leer los datos de la memoria y manipular los datos. Todos los procesadores ahora tienen la capacidad de ejecutar microoperaciones fuera de orden, por lo que una instrucción x86 se puede dividir en múltiples microoperaciones y enviarse al canal de ejecución para su procesamiento.

Si estas microoperaciones no están relacionadas entre sí, no hay problema en ejecutarlas individualmente. Sin embargo, si la ejecución de una instrucción requiere el resultado de la ejecución de otra instrucción, la canalización esperará a que la unidad de ejecución envíe el resultado del procesamiento y luego podrá continuar con el procesamiento. Este fenómeno de espera no es obvio en la arquitectura NetBurst porque tiene muchas unidades de ejecución. Sin embargo, para un procesador como el Pentium M, el impacto en el rendimiento sigue siendo bastante obvio. El procesador en espera continúa desperdiciando energía. Inaceptable.

Esta es también la razón por la que el procesador Pentium M necesita incorporar tecnología de fusión de microoperaciones para evitar unidades de ejecución inactivas.

El trabajo de esta tecnología es muy simple, que consiste en dividir las instrucciones x86 en algunas partes de acuerdo con la correlación, y luego el decodificador reúne todas las microoperaciones y luego el micro- las operaciones se dividen según la correlación previamente determinada. Esto forma un subconjunto de instrucciones x86. Las microoperaciones correlacionadas se dividen y ejecutan por la misma unidad de ejecución, mientras que las microoperaciones ejecutadas por diferentes unidades de ejecución son independientes entre sí. Por lo tanto, no es necesario esperar el resultado de la ejecución de una unidad de ejecución. Aunque la fusión de microoperaciones requiere más trabajo, es buena para mejorar el rendimiento. Mediante pruebas, el uso de esta tecnología puede aumentar la velocidad de procesamiento de datos enteros en 5 y la velocidad de procesamiento de datos de punto flotante en 9.