1. Introducción 2. Características Técnicas 3. Unidad de Búsqueda y Decodificación 4. Unidad de Despacho y Ejecución 5. Unidad de Interfaz con el Bus 6. Bibliografía
En Marzo de 1999 apareció en el mercado el Pentium III, conocido en la etapa de proyecto como Katmai. Es un Pentium II mejorado, por lo que durante casi 2 años fue el microprocesador de bandera de Intel, pues, a las ventajas del Pentium II Xeon, incorpora nuevas instrucciones de microcódigo que mejoran la capacidad de manejo de 3-D (instrucciones Katmai). En un inicio el Pentium III se comercializó a 500 MHz, pero actualmente su velocidad supera el 1 GHz. Como miembro de la familia de procesadores P6, generación de procesadores que le sucedió a la línea Pentium de Intel se caracteriza por la implementación de la microarquitectura de ejecución dinámica, la cual incorpora una única combinación de la predicción de salto múltiple, análisis del flujo de datos y la ejecución especulativa. Esto hizo posible que la familia P6 tuviera un mayor rendimiento que la familia Pentium mientras mantenía la compatibilidad binaria con la arquitectura de los procesadores anteriores de Intel.
La potencia de un procesador Intel® Pentium III, brinda desempeño y confiabilidad, que es mejor para la mayor parte de los consumidores y usuarios de negocios, a continuación las características que especifican el procesador Pentium III.
- Integra la arquitectura Dual Independent Bus (DIB), un bus de sistema de transacción múltiple y la tecnología de realce de medios Intel MMX
- Ofrece extensiones Streaming Single Instruction Múltiple Data (SSE) Las extensiones "Streaming SIMD" también conocidas como MMX2 o KNI, Katmai New Instructions. Se diferencia de las ultimas MMX en que las ultimas operaban con dos enteros de 32 bits, mientras que las SSE con cuatro valores de punto flotante simultáneamente. Constan de 70 nuevas instrucciones que incluyen: instrucciones únicas, datos múltiples para coma flotante, instrucciones de enteros SIMD adicionales e instrucciones para el control del almacenamiento caché. Entre las tecnologías que se benefician de las extensiones "Streaming SIMD" se incluyen las aplicaciones avanzadas de tratamiento de imágenes, sonido y vídeo, y reconocimiento de la voz. Más concretamente:
– Visualización y manipulación de imágenes de mayor resolución y calidad. – Vídeo MPEG2 y sonido de alta calidad, y codificación y decodificación MPEG2 simultáneas. – Gran parte de los procesadores Intel Pentium III vienen equipados con una cache de transferencia avanzada, y un avanzado sistema de almacenaje intermediario para alcanzar los requisitos de datos que requieren gran ancho de banda en los ambientes de hoy (tratamiento de imagen, CAD, Windows NT).
- Incorpora la cache primaria o Level 1(L1) de 32K (16K para instrucciones y 16K para los datos) para ofrecer las más altas velocidades de acceso a la información disponible. La cache de no-bloqueo L1, le brinda un acceso rápido a los datos utilizados más frecuentemente.
- Existen versiones que incorporan segundo nivel de cache L2 de 256 KB de Cache de Transferencia avanzada integrada a toda velocidad con código de corrección de errores (ECC) o versiones que incorporan una cache L2 discreta de 512 KB a media velocidad con ECC en el paquete que mejora las maniobras de la protección y la capacidad del receptáculo
- Existen versiones del procesador Intel Pentium III con bus de sistema de 100 MHz ó 133 MHz donde el procesador esta disponible a la misma frecuencia especifica del núcleo aparte de los 100 MHz y 133 MHz de las versiones del Front Side Bus
- Basado en la micro arquitectura Intel P6, y con tecnología Intel SpeedStep Intel P6, es una nueva tecnología revolucionaria que le permite cambiar automáticamente los modos del desempeño máximo para optimizar la vida de la batería.
- La Tecnología Intel QuickStart para procesadores móviles optimiza el consumo de energía mediante el trabajo a un grado de potencia general más bajo cuando el sistema está inactivo.
- El uso de la tecnología de Intel de 0.18-micrones disminuye el tamaño del procesador para un desempeño y movilidad sin precedentes ya que antes era solo hasta 0.25 micrones y que permite incorporar 28 millones de transistores en solo 105 mm cuadrados.
- Se encuentra disponible en las velocidades de hasta 1.33GHz. utilizando la tecnología de 0.13 micrones.
Arquitectura de ejecución dinámica en Pentium III El mecanismo de ejecución fuera de orden llamado "Ejecución Dinámica incorpora tres conceptos importantes:
- Predicción de saltos profunda. Permite decodificar instrucciones más allá de las ramificaciones para mantener el pipeline lleno. Algoritmo de predicción optimizado. Predice el flujo del programa a través de varias ramificaciones: mediante un algoritmo de predicción de ramificaciones múltiples, el procesador puede anticipar los saltos en el flujo de las instrucciones. Éste predice dónde pueden encontrarse las siguientes instrucciones en la memoria con una increíble precisión del 90% o mayor. Esto es posible porque mientras el procesador está buscando y trayendo instrucciones, también busca las instrucciones que están más adelante en el programa. Esta técnica acelera el flujo de trabajo enviado al procesador.
- Análisis dinámico del flujo de datos. Análisis en tiempo real para detectar la posibilidad de ejecución fuera de orden, optimizando el uso de las unidades de ejecución. Analiza y ordena las instrucciones a ejecutar en una sucesión óptima, independiente del orden original en el programa: mediante el análisis del flujo de datos, el procesador observa las instrucciones de software decodificadas y decide si están listas para ser procesadas o si dependen de otras instrucciones. Entonces el procesador determina la sucesión óptima para el procesamiento y ejecuta las instrucciones en la forma más eficiente.
- Ejecución Especulativa. Habilidad de ejecutar instrucciones por delante del contador de programa. Utiliza el análisis anterior y va ejecutando todas las instrucciones posibles. Aumenta la velocidad de ejecución observando adelante del contador del programa y ejecutando las instrucciones que posiblemente van a necesitarse. Cuando el procesador ejecuta las instrucciones (hasta cinco a la vez), lo hace mediante la "ejecución especulativa. Como las instrucciones del software que se procesan con base en predicción de ramificaciones, los resultados se guardan como "resultados especulativos". Una vez que su estado final puede determinarse, las instrucciones se regresan a su orden propio y formalmente se les asigna un estado de máquina.
Puede afirmarse que la ejecución dinámica elimina las limitaciones del empleo de una secuencia lineal de instrucciones entre las fases de búsqueda y ejecución tradicionales. Esta permite decodificar instrucciones que se encuentren en múltiples niveles de ramificaciones para mantener el pipeline de instrucciones lleno. También permite la ejecución de instrucciones fuera de orden para mantener las unidades de ejecución de instrucciones del procesador corriendo a toda capacidad. Finalmente entrega los resultados de las instrucciones ejecutadas en el orden original del programa para mantener la integridad de los datos y la coherencia del programa sobresaliente de ejecución fuera de orden, optimizando el uso de las unidades de ejecución, todo esto se logra con la implementacion por hardware de la arquitectura que garantice la Ejecución Dinámica y a la cual hacemos referencia seguidamente.
La microarquitectura de un superpipeline con características multietapas, el cual trata de trabajar menos por etapa de pipeline para un numero de 20 etapas 33 % menos que en el procesador Pentium, lo que ayuda a lograr un mayor rango del reloj en el proceso. Esta microarquitectura elimina la secuencia tradicional entre las fases de búsqueda y ejecución y amplia el ancho de la ventana de instrucciones con la utilización de la piscina de instrucciones. Esto le permite al procesador tener mucho mas visibilidad dentro del flujo de instrucciones del programa en la fase de ejecución lo que mejora la planificación. Esto necesita de una mayor eficiencia del procesador en la fase de búsqueda y decodificación en términos de la predicción del flujo del programa. Una planificación optimizada necesita la fase de ejecución que es reemplazada por fase doble "despacho /ejecución" y la fase de "retiro". Esto permite que las instrucciones sean comenzadas en cualquier orden pero que siempre sean completadas en el orden original del programa, por lo que se puede considerar tres mecanismos acoplados con una piscina de instrucciones como se muestra en la figura.
- La Unidad de Búsqueda/Decodificación: Es una unidad que toma como entrada el flujo de instrucciones del programa del usuario en orden de la
- Cache de instrucciones y las decodifica en una serie de µoperaciones que representan el flujo de datos. La pre-busqueda es especulativa.
- La Unidad de Despacho/Ejecución: Es una unidad fuera de orden que acepta el flujo de datos, planifica la ejecución de las µops sujetas a la dependencia de datos y a la disponibilidad de recursos y almacena temporalmente los resultados de las ejecuciones especulativas.
- La Unidad de Retiro: Es una unidad fuera de orden que conoce como y cuándo retirar los resultados temporales especulativos al estado arquitectural permanente.
- La Unidad de Interfaz con el Bus: Es la unidad parcialmente ordenada responsable de la conexión con el mundo real de las tres unidades internas.
- Comunica directamente con el segundo nivel de cache L2 soportando hasta cuatro accesos de cache concurrentemente. Esta unidad también controla las transacciones del bus con el protocolo MESI y con el sistema de memoria.
A continuación una muestra detallada de cada una de las unidades que garantizan la ejecución dinámica.
3. Unidad de Búsqueda y Decodificación
En esta unidad la cache L1 es una cache de instrucción local. La unidad Next_IP (próximo índice) suministra el índice de la instrucción de la cache L1, basado en las entradas desde la Tabla de destino de Saltos BTB, estado Lazo/Interrupción y de las indicaciones de perdida de la predicción del salto desde la unidad de la sección de ejecución de enteros. La cache de instrucción L1 busca la línea de cache correspondiente y el índice de la próxima línea desde Next_IP y presenta 16 bytes alineados al decodificador. Los bytes prebuscados son rotados así que estos están ajustados para el decodificador de instrucciones (ID). El comienzo y el final de las instrucciones son marcados. Los tres decodificadores paralelos aceptan este flujo de bytes marcados, y proceden a encontrar y decodificar las instrucciones contenidas allí dentro. El decodificador convierte las instrucciones en µop de tres elementos (dos fuentes lógicas y un destino lógico por µop. Muchas instrucciones de la arquitectura Intel son convertidas directamente en µops sencillas, alguna instrucciones son decodificadas en de una a cuatro µops y las instrucciones complejas requieren microcodigos (Secuenciador de instrucciones microcodigo). Este microcodigo es un conjunto de secuencias preprogramadas de las µops normales. Las µops están en una cola y son enviadas a la unidad Tabla de Registro de Alias (RAT), donde los registros lógicos son convertidos en registros físicos en la familia P6 los registros físicos y el estado de asignación el cual adiciona información del estado a las µops y las introduce en la piscina de instrucciones. La piscina de instrucciones esta implementada como un arreglo de una capacidad de memoria direccionable llamado Buffer de Reordenamiento (ROB). Durante cada ciclo de reloj pueden ser decodificadas hasta tres macroinstrucciones en el primer estado de decodificación del pipeline. Sin embargo si las instrucciones son complejas o son de mas 7 bytes entonces el decodificador esta limitado a decodificar algunas instrucciones. Los decodificadores pueden decodificar:
- Hasta tres macroinstrucciones por ciclo de reloj.
- Hasta seis µops por ciclo de reloj.
- Macroinstrucciones de hasta 7 bytes de ancho.
Se tienen tres decodificadores. El primer decodificador es capaz de decodificar una macroinstruccion de la arquitectura Intel de cuatro o menos µops en cada ciclo de reloj. Los otros dos decodificadores pueden decodificar cada uno una instrucción de la arquitectura Intel de una µop en cada ciclo de reloj. En general:
- Instrucciones simples de registro a registro son solo una µop.
- Cargar instrucciones son solo una µop.
- Almacenar instrucciones tiene dos µops.
- Instrucciones simples de lectura – modificación son dos µops.
- Instrucciones simples de la forma registro – memoria tienen de dos a tres µops.
- Instrucciones simples de lectura – modificación escritura son de cuatro µops.
- Instrucciones complejas tienen generalmente mas de cuatro µops, por tanto estas tomaran varios ciclo para la decodificación.
4. Unidad de Despacho y Ejecución
La unidad de Despacho selecciona las µops desde la piscina de instrucciones dependiendo de su estado. Si el estado indica que una µop tiene todos sus operandos, entonces la unidad de Despacho chequea para ver si el recurso de ejecución necesitado por esa µop esta también disponible. Si ambas cosas son ciertas, la Estación de Reservación quita esa µop y la envía al recurso donde será ejecutada. Los resultados de la µop posteriormente son retornados a la piscina. Hay cinco puertos en la Estación de Reservación y los múltiples recursos son accesados como se muestra en la figura.
El procesador puede planificar hasta 5 µops por ciclo de reloj, una por cada puerto de recurso, pero lo más típico es 3 µops por ciclo de reloj. La actividad de este proceso de planificación es lo que se llama proceso fuera de orden; las
µops son despachadas a los recursos de ejecución estrictamente acorde al flujo de datos y a la disponibilidad del recurso sin tener en cuenta el orden original del programa. El algoritmo actual empleado por este proceso de planificación de la ejecución es vitalmente importante para el funcionamiento. Si una sola µop por recurso tiene los datos listos, entonces no es seleccionada. Pero si varios están disponibles este es seleccionado. La familia P6 utiliza el algoritmo de planificación pseudo(falso) FIFO.
Muchas de las µops son de saltos. En la predicción dinámica de saltos se tiene un historial de los últimos saltos ejecutados en Buffer de Destino de Saltos (BTB) que posee un buffer con 512 entradas de forma similar a las líneas de memoria cache en 32 conjuntos (set)de 16 entradas (way). Los bits del 4 al 8 dan la dirección de memoria donde se encuentra el salto, identifican cual de los conjuntos de entradas se utilizara para almacenar el historial de la instrucción de salto. Cuando se agota el espacio disponible en un conjunto de la BTB y es necesario introducir un nuevo salto, en el mismo se descarta una de las entradas. La primera vez que se ejecuta una instrucción de salto que no esta almacenada en la BTB se reserva espacio para mantener el historial de la misma. A menos que sea descartada por necesidad de espacio en el conjunto correspondiente de entradas en la BTB permanecerá en el mismo de forma indefinida. En la primera ejecución del salto la predicción dinámica de saltos no predice que dicha instrucción deba saltar y se continua interpretando el contenido posterior a la instrucción. Si ya existe una entrada en la BTB para la instrucción de salto, se predecirá el comportamiento de la misma dependiendo de sus ejecuciones anteriores. La predicción se hace en dos nivele diferentes. En primer lugar el microprocesador posee un registro de desplazamiento de 4 bits donde almacena el resultado de los últimos saltos guardando un ‘1’ si se llevo a cabo el salto y un ‘0’ si no fue así. Basándose en esta información, hay 16 posibles combinaciones en el historial de un salto.
La BTB predecirá correctamente muchos de estos saltos pero no podrá predecirlos todos correctamente. Considerando una BTB que está prediciendo correctamente el salto dirigida hacia atrás al final del lazo; en el futuro ese lazo va a terminar, y cuando lo hace, ese salto será una perdida de la predicción. Las µops de saltos son etiquetadas (en orden en el pipeline) con su fallo a través de la dirección y el destino que se predijeron para ellos. Cuando el salto se ejecuta, lo que el salto realmente hizo se compara contra lo que el hardware de predicción dijo que haría. Si aquéllos coinciden, entonces el salto se retira en el futuro y el trabajo especulativamente ejecutado entre él y la próxima instrucción de salto en la piscina de instrucción es bueno. Pero si ellos no coinciden, entonces la Unidad de Ejecución de Salto (JEU) cambia el estado de todas las µops detrás del salto para eliminarlos de la piscina de la instrucción. En ese caso el destino del salto se entrega a la BTB que reinicia todo el pipeline con la nueva dirección asignada.
Unidad de Retiro
La Unidad de Retiro también verifica el estado de las µops en la piscina de instrucciones. Está buscando µops que se han ejecutado y pueden ser retiradas de la piscina. Una vez retiradas, la arquitectura original de las µops es escrita según la Arquitectura Intel de la instrucción original. La Unidad de Retiro no sólo avisa que µops están completas, sino que también debe re-imponer el orden del programa original en ellos. Esta también debe hacer esto ante las interrupciones, trampas, faltas, puntos de ruptura y perdida de las predicciones.
La Unidad de Retiro debe leer primero la piscina de instrucciones para encontrar a los candidatos potenciales para el retiro y determina cuales de estos candidatos son los próximos en el orden del programa original. Entonces escribe los resultados de este ciclo de retiro al Registro de Ficheros Retirados (RRF). La Unidad de Retiro es capaz de retirar 3 µops por ciclo de reloj.
5. Unidad de Interfaz con el Bus
Hay dos tipos de acceso a memoria: cargas y almacenamiento. Las cargas sólo necesitan especificar la dirección de memoria que va a ser accedida, el ancho de los datos, y el registro destino. Las cargas son codificadas en una sola µop. El almacenamiento necesita proporcionar una dirección de memoria, el ancho del dato, y que los datos sean escritos. El almacenamiento por consiguiente requiera de dos µops, una para generar la dirección y una para generar los datos. Estas µops después tienen que recombinarse para completar el almacenamiento El almacenamiento nunca se ejecuta especulativamente ya que no hay ninguna manera transparente de deshacerlos. Los almacenamientos nunca se reordenan entre ellos. Un almacenamiento se despacha cuando la dirección y los datos están disponibles y no hay ningún almacenamiento más viejo en espera de ser despachado
Un estudio de la importancia del reordenamiento del acceso a memoria concluyo que:
- El almacenamiento tiene que ser restringido de pasar a otro almacenamiento, en aras de disminuir un pequeño impacto en la ejecución.
- El almacenamiento puede ser restringido de pasar cargas, para que no ocurra una perdida de eficiencia.
- Restringir que la carga pase otra carga o almacenamientos tiene un impacto significativo sobre la eficiencia.
El Buffer de Ordenamiento de Memoria (MOB) permite cargas para pasar otras cargas y actúa como una Estación de Reservación y Buffer de Reordenamiento. Este mantiene suspendida las cargas y las almacena y las redespacha cuando desaparece una condición de bloqueo (dependencia o recurso). El procesador Pentium III utiliza una arquitectura de Ejecución Dinámica que mezcla la ejecución fuera-de-orden y la ejecución especulativa con el hardware de renombramiento de registros y la predicción de saltos. Éstos procesadores ofrecen un pipeline en orden que convierte las macroinstrucciones Intel 386 del procesador en simples µops , y un centro del procesador superescalar de tres vías fuera de orden que ejecuta las µops. El termino tres vías significa que utiliza técnicas de procesamiento paralelo que el µP esta habilitado para decodificar, despachar y completar la ejecución de tres instrucciones por ciclo de reloj, para manejar este nivel de instrucciones se utiliza un superpipeline de 11 estados con transferencia avanzada de caches. El pipeline del procesador esta dividido en cuatro secciones (primer nivel de cache, segundo nivel de cache, unidad de ejecución fuera de orden y sección de retiro). Las instrucciones y los datos son suministrados a estas unidades a través de la unidad de interfaz con el bus. Varias unidades de ejecución pueden conectarse al mismo pipeline por ejemplo: una unidad de direcciones lógicas de enteros y una unidad de ejecución de punto flotante (de suma, de multiplicación, y de división) comparten un pipeline. La cache de entrelazado de puertos semiduales, con un puerto dedicado a cargas y el otro a almacenamiento.
La mayoría de las operaciones simples (ALU de enteros, suma de punto flotante, incluso la multiplicación de punto flotante pueden ser encausadas al pipeline de una a dos operaciones por ciclo de reloj. La división de punto flotante no puede ser encausada. Las operaciones de latencia largas pueden proceder en paralelo con operaciones de latencia corta. En la ejecución fuera de orden la consideración más importante es hacer segura la cantidad suficiente de µops listas para la ejecución, la predicción correcta de ramificaciones y la decodificación rápida.
- IA-32 Intel Architecture Software Developer’s Manual Volume 1:Basic Architecture
- IA-32 Intel® Architecture Software Developer’s Manual Volume 3: -System Programming Guide
- P6 Family of Processors Hardware Developer’s Manual September 1998
Resumen El presente trabajo expone la implementación de esta técnica en este microprocesador como ultimo miembro de la familia de procesadores P6 para que Intel de paso a su nueva arquitectura. El microprocesador Pentium III implementa la arquitectura de Ejecución Dinámica que es una innovadora combinación de tres técnicas de procesamiento diseñada para ayudar al procesador a manipular los datos más eficientemente. Éstas son la predicción de salto múltiple, el análisis del flujo de datos y la ejecución especulativa. La ejecución dinámica hace que el procesador sea más eficiente manipulando datos en lugar de sólo procesar una lista de instrucciones. La forma en que los programas de software están escritos puede afectar al rendimiento del procesador. Por ejemplo, el rendimiento del software será afectado negativamente si con frecuencia se requiere suspender lo que se está haciendo y "saltar" a otra parte en el programa. También pueden producirse retardos cuando el procesador no puede procesar una nueva instrucción hasta completar la instrucción original. La ejecución dinámica permite al procesador alterar y predecir el orden de las instrucciones. Palabras claves: Microprocesador Pentium III, ejecución dinámica, predicción de saltos, microoperaciones.
Autor:
Bárbara García Olivera
Mariuly González Rodríguez