Predictores Dinámicos

Documentos relacionados
Estrategias de predicción dinámicas.

PREDICCIÓN HARDWARE DE BIFURCACIONES

CAPÍTULO 2 PROCESADORES SUPERESCALARES

Arquitectura de Computadores I. Sistema de memoria 3 (Solución): Segmentación + Bancos

Predicción Dinámica - 1. Arquitectura de Computadores

5. PREDICCIÓN DINÁMICA DE SALTOS

Arquitectura de Computadores Problemas (hoja 4). Curso

Departamento de Automática

ADDI R4,R0,#2 ADDI R1,R0,#40 LOOP: LW R2,0(R1) SUBI R3,R2,#1 MUL R2,R3,R2 DIV R2,R3,R4 SW 0(R1),R2 SUBI R1,R1,#4 BNEZ R1, LOOP ADDI R4,R0,#0

Apellidos Nombre Grupo. Arquitectura e Ingeniería de Computadores. Examen Final (Teoría parte primer cuatrimestre). 18/06/2012

Aspectos avanzados de arquitectura de computadoras Predicción de Saltos. Facultad de Ingeniería - Universidad de la República Curso 2017

1) En un DLX con segmentación ejecutamos el siguiente fragmento de código:

Ejercicios de Paralelismo a Nivel de Instrucción

Arquitectura de Computadores Problemas (hoja 2). Curso

TEMA 3 PROCESADORES VLIW (Very Long Instruction Word)

ARQUITECTURA DE COMPUTADORES Problemas TEMA 4: Microprocesadores avanzados

Simulador de Técnicas de Predicción Dinámicas

Arquitectura de Computadores

Universidad Euskal Herriko del País Vasco Unibertsitatea Arquitectura de Computadores I Sistema de memoria 1

Seminario 1: Procesadores paralelos

Tema 1: PROCESADORES SEGMENTADOS

Micro arquitectura. Técnicas Digitales III Ing. Gustavo Nudelman Universidad Tecnológica Nacional - Facultad Regional Buenos Aires

Práctica 5 - Memoria Cache

DEPENDENCIAS Y BLOQUEOS DE CONTROL (Apartado 2.8)

Reducción de la penalización por fallo Técnica: Dar prioridad a los fallos de lectura sobre la escritura (I)

Arquitectura y Tecnología de Computadores. Curso 07/08

Aspectos avanzados de arquitectura de computadoras Pipeline. Facultad de Ingeniería - Universidad de la República Curso 2017

Tema 2. Diseño del repertorio de instrucciones

5.3 Unidades Aritméticas Segmentadas.

Memoria. Organización de memorias estáticas.

3. SEGMENTACIÓN DEL CAUCE

Organización de Computadoras. Pipeline Continuación

Memoria virtual Ejercicios resueltos

Optimizaciones avanzadas de memoria caché

2. SEGMENTACIÓN ENCAUZADA AVANZADA Y PARALELISMO DE INSTRUCCIONES: EJERCICIOS Y CUESTIONES

Segmentación de cauce

Técnicas hardware para extraer más paralelismo de instrucciones

Soluciones a ejercicios de Paralelismo a Nivel de instrucción

Explotación del paralelismo a nivel de instrucción

Arquitectura de Computadoras

EXAMEN DE ARQUITECTURA II Septiembre, 2010

Procesadores Superescalares

Introducción a paralelismo a nivel de instrucción

2. SEGMENTACIÓN ENCAUZADA AVANZADA Y PARALELISMO DE INSTRUCCIONES: EJERCICIOS Y CUESTIONES

6. PROCESADORES SUPERESCALARES Y VLIW

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Arquitectura e Ingeniería de Computadores Problemas (hoja 3). Curso

Procesadores de palabra de instrucción muy larga (VLIW) v.2012

Arquitectura de Computadores II Clase #5

Arquitectura e Ingeniería de Computadores. Examen Parcial. 7/02/2012

ASP2. Problemas de Procesadores Multimedia.

#define MAX 1024 void escala_vect (float A[MAX], float B[MAX], float k) { int i; for (i=0; i < MAX; i++) B[i]=k*A[i]; }

Arquitectura de Computadoras Trabajo Práctico N 7 Pipeline de Instrucciones Primer Cuatrimestre de 2010

Aspectos avanzados de arquitectura de computadoras Superescalares I. Facultad de Ingeniería - Universidad de la República Curso 2017

Dpto. Arquitectura y Tecnología de Computadores SPD. Práctica 5. pág 1

ARQUITECTURA DE COMPUTADORES. Práctica 8

Caches unificadas vs. Caches separadas Comparativa (I)

Tutorías con Grupos Reducidos (TGR) Sesión 2: Paralelismo a Nivel de Instrucción

INSTRUCCIONES CONDICIONALES

Arquitectura de Computadores Problemas (hoja 2). Curso

Arquitectura de Computadores II Clase #3

FSO - ejercicios de gestión de memoria

TEMA 3: El proceso de compilación, del código fuente al código máquina

2EMHWLYRV 5HIHUHQFLDV

Paralelismo al nivel de instrucciones

ARQUITECTURA DE COMPUTADORES. 2º INGENIERÍA INFORMÁTICA. SOLUCIONES Problemas de Gestión de Memoria Etiqueta Índice byte

Test: Conteste exclusivamente en HOJA DE LECTURA ÓPTICA. No olvide marcar que su tipo de examen es C

Nombre: Carnet: Examen Parcial 1 (35 Puntos)

Apellidos... Nombre... Nº matrícula... Contesta a las siguientes cuestiones (rodea con un círculo la respuesta correcta):

Tratamiento de Excepciones en MIPS

Multiplicación de matrices con DLX

SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 3. PLANIFICACIÓN ESTÁTICA AVANZADA. TMS320C6713

Arquitectura de Computadoras Trabajo Práctico N 8 Pipeline de Instrucciones 1 Primer Cuatrimestre de 2016

Tema 5. El sistema de memoria

Ejercicios del tema 5. Jerarquía de de Memoria

Arquitectura de Computadores II Clase #16

ARQUITECTURA DE COMPUTADORES. 2º INGENIERÍA INFORMÁTICA. SOLUCIONES EJERCICIOS BOLETÍN TEMA 3 (Gestión de Memoria). Curso 04/05.

Ejercicios del tema 4. El procesador

Definición de prestaciones

PROCESADORES SUPERESCALARES

Unidad II: Memorias. Ing. Marglorie Colina

Bus de direcciones. Bus de datos

Apellidos, Nombre: No se considerarán como válidas las respuestas en las que no se justifiquen los cálculos realizados

Memoria virtual Ubicación de bloque en paginación

Unidad 2. La Información en los Ordenadores

ARQUITECTURA DE COMPUTADORES

Tema 6: Memoria virtual. Óscar David Robles Sánchez Sofía Bayona Beriso David Miraut Andrés Luis Rincón Córcoles

Tutorías con Grupos Reducidos (TGR) Parte 5: Memoria Virtual

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

TEMA 4. ARQUITECTURA IA-64

Ejercicios del Tema 3. Fundamentos de la programación en ensamblador

Ejercicios Jerarquía de Memoria

Problema. Dispone del siguiente fragmento de código intermedio:

Los números naturales y enteros en el 80X86 y en LAN

CPU MEMORIAS CACHE. Memorias caché. Memoria caché = memoria de tamaño pequeño y acceso rápido situada entre la CPU y la memoria principal.

Autor: Longinos Recuero Bustos

Fundamentos de Sistemas Operativos Licenciatura en Administración de Tecnologías de Información y Comunicaciones

Transcripción:

Predicción dinámica. La predicción de saltos pretende reducir la penalización producida por los saltos, haciendo prebúsqueda ( prefetching ), emitiendo y ejecutando instrucciones del camino destino del salto antes que el salto sea resulto. Esta circunstancia es conocida como ejecución especulativa, ya que se ejecutan instrucciones sin saber si son las correctas en el orden del programa. Para ello necesitamos saber si el salto será efectivo o no, y además, conocer la dirección del salto en el caso de que sea efectivo. Se pretende con esta técnica no introducir burbujas en la ejecución segmentada de las instrucciones. Las técnicas de predicción de saltos se pueden dividir básicamente en dos tipos: Las que realizan predicción estática. (tiempo de compilación). Las que realizan predicción dinámica. (tiempo de ejecución). Ambas tienen sus ventajas e inconvenientes. La dinámica nos da mejores resultados a cambio de complicar mucho el diseño del procesador. La predicción estática tiene menos precisión, pero requiere mucho menos hardware; pero, muchas predicciones estáticas pueden llegar a incrementar en un 30% el código resultante. Existen técnicas no basadas en la predicción para mejorar el rendimiento en los saltos y son conocidas como: Salto retardado. (YA VISTA). Ejecución concurrente de los dos posibles caminos en un salto. En este apartado haremos un breve resumen de las técnicas estáticas, para pasar después a estudiar las técnicas dinámicas. Estrategias de predicción estáticas. Las técnicas más sencillas de predicción estática a de saltos se basan en observar el código de operación o su dirección de destino. Las más complicadas se basan en un proceso llamado profiling que consiste en realizar el compilador ejecuciones previas con el fin de poder deducir estáticamente y en tiempo de compilación el comportamiento del salto. Las técnicas más relevantes son: Predecir todos los saltos como tomados. Es la técnica más sencilla, pero la más pobre en porcentaje de aciertos. Predicciones basadas en el código de la operación. Se basa en estudios que indican que según el tipo de salto que se realiza, la posibilidad de que sea tomado o no es diferente. Esta técnica se basa en hacer un estudio previo de cada tipo de salto (es decir, instrucción de salto) para ver que probabilidad ofrece de saltar o no. Se aplicó en el IBM 370 y se obtuvo unos muy buenos resultados del orden del 80%-90%. Predecir los saltos en función de su dirección. Se basa en suposiciones del tipo la mayoría de los saltos hacia atrás son evaluados afirmativamente y los saltos hacia delante negativamente. Esto tiene su sentido, pues los saltos hacia atrás suelen ser bucles y los saltos hacia delante estructuras if-then-else. Esta técnica funciona bien para programas con muchos bucles, pero baja mucho su eficiencia cuando estamos trabajando con programas con un comportamiento irregular en los bucles. Vicente Arnau Llombart 1 12/11/2009

Estrategias de predicción dinámicas. Las técnicas que vamos a ver ahora para predicción de saltos se basan en información conocida sólo en tiempo de ejecución. Dos estructuras son necesarias para realizar una predicción estática: Branch History Table (BHT) o Tabla de Historia de los Saltos. Tabla que contiene información de lo sucedido en cada salto las últimas veces que fue tomado. A partir de esta información se predice si el salto será tomado o no. Branch Target Address Cache (BTAC) o Tabla de Direcciones de Salto. Como su nombre indica es una tabla donde se almacena las direcciones de salto destino de los últimos saltos evaluados. De esta forma, si un salto es predicho como tomada, se mira si está en la tabla, y si es así, se obtiene la dirección destino. La base de la mayoría de los predictores dinámicos es el llamado Branch Target Buffer, que no es más que una tabla que combina los dos anteriores. Cada entrada posee bits para realizar la predicción y la posible dirección de salto. A partir de esta estructura básica se han diseñado muchos predictores, desde los más sencillos que veremos aquí, hasta muy sofisticados que utilizan dos niveles de predicción. Últimamente se están utilizando los predictores híbridos que combinan tanto técnicas estáticas como dinámicas, eligiendo en cada momento la que de un mejor resultado. Otro aspecto muy importante son las penalizaciones que puede sufrir un procesador por el hecho de equivocarse en una predicción. Se pueden presentar dos tipos de Penalizaciones: 1. Misfetch penalty o penalización por búsqueda errónea: los procesadores leen una instrucción de la cache realizando un búsqueda de instrucción, a continuación, si la instrucción es de salto, la evaluación del salto se realizará en el segmento de decodificación. Por ello, si nos equivocamos en la predicción, deberemos anular la instrucción e introducir una o más burbujas para vaciar los cauces de segmentación e iniciar la ejecución de una nueva instrucción en la dirección real de salto. 2. Mispredict penalty o penalización por predicado erróneo: sabemos que los procesadores para mantener alto el rendimiento realizan cargas especulativas de instrucciones en la memoria cache de instrucciones, correspondientes al posible bloque destino del salto. Si se comprueba que ha habido un fallo en la predicción, el procesador además de realizar un vaciado del cauce segmentado y restaurar los valores de los registros, deberá leer un nuevo predicado, es decir, deberá cargar la cache de Instrucciones o en su defecto, el buffer de lectura de instrucciones con nuevas instrucciones procedentes de la dirección de salto ya evaluada. Para comparar diversas arquitecturas de predicción dinámica de saltos, nos fijaremos en un parámetro conocido como la predicción de aciertos, es decir, el porcentaje de saltos que han sido bien predichos. Para las técnicas de predicción también será útil almacenar información general de los programas, del estilo tengo pocas instrucciones de saltos que se ejecutan muchas veces o tengo muchos saltos que se ejecutan pocas veces, pues esto influirá mucho en el rendimiento de las predicciones. A continuación se enumeran las 5 técnicas más importantes utilizadas en la predicción dinámica de los saltos: Vicente Arnau Llombart 2 12/11/2009

1. Branch Target Buffer. Buffer de salto. Con información de la historia de cada salto. 2. Predictores basados en dos niveles de historia. 3. Predicción de la siguiente línea de cache a leer. 4. Predictores basados en el camino recorrido por el programa. 5. Predictores híbridos. Que combinan varias técnicas, incluso las estáticas. Buffer de predicción de saltos. Vamos a ver una versión muy sencilla, en la cual el buffer está formado por una pequeña memoria indexada con los bits menos significativos de la dirección de la instrucción de salto. Además contiene un bit para indicar si el salto fue tomado o no en su última evaluación. Puede suceder que una nueva instrucción de salto tenga sus bits de menor peso de su dirección coincidentes con otra instrucción de salto ya evaluada. No importa, se procede como si nada pasara y la predicción de la anterior instrucción y su dirección de salto son tomadas como buenas. En caso de que se produzca un fallo, se invertirá no solo el bit de predicción sino también se corregirá la dirección de salto del buffer de predicción. Con un solo bit, cada vez que estemos analizando una instrucción condicional de final de bucle, al cometer un error en su predicción, este será doble: al suponer que salto y no salta (última iteración del bucle) y la siguiente vez que lo evaluemos que lo hacemos a no salta y nos equivocaremos también pues si que saltará. Ejemplo: Sea el siguiente fragmento de programa en ensamblador. ADDI R8,R0,10 bubu: ADD R4, R5, R6 XOR R12, R4, R0... ADDI R8,R0,-1 bnez R8, bubu ; salta si no es igual a cero... Este bucle se repite 10 veces, y si se ejecuta muchas veces, ocurrirá que la primera y la última vez será evaluado erróneamente. Pero es fácil mejorar la predicción para estos casos, basta con utilizar cuatro posibles estados de predicción, es decir 2 bits en vez de uno. 11: efectivo con alta probabilidad. 10: efectivo probable. 01: no efectivo probable. 00: no efectivo con alta probabilidad. Vicente Arnau Llombart 3 12/11/2009

Tendremos un autómata finito con cuatro estados, de forma que para pasar de una predicción de salto a una de no salto, al menos se han de producir dos errores consecutivos. Veamos la forma que tendrá este autómata en la figura siguiente: Otra forma de realizar este esquema de predicción es utilizar como dirección de entrada al buffer toda la dirección de la instrucción de salto, en vez de solo sus bits menos significativos. Esto aumenta el rendimiento. Vicente Arnau Llombart 4 12/11/2009

Vicente Arnau Llombart 5 12/11/2009

Vicente Arnau Llombart 6 12/11/2009

Vicente Arnau Llombart 7 12/11/2009

Vicente Arnau Llombart 8 12/11/2009

Vicente Arnau Llombart 9 12/11/2009