3.1 predicción de saltos Equipo 1. predicción de saltos  Un predictor de saltos (branch predictor en inglés) es un circuito digital utilizado en los.

Slides:



Advertisements
Presentaciones similares
Procesadores Superescalares
Advertisements

A FAST ALGORITHM FOR DNA SEQUENCES.
Pipelines: Riesgos.
EL Sistemas Digitales Ing. José Alberto Díaz García Escuela de Ingeniería Electrónica Arquitectura Segmentada Pipeline (Segmentación)
Pipelining Predicción dinámica de brincos. Universidad de SonoraArquitectura de Computadoras2 Introducción En base a la historia de la instrucción, predecir.
PROCESADORES SUPERESCALARES
Unidad 2: Segmentación Dependencias de Control Docente: ing. José Díaz Chow.
Gustavo Andrés Uribe Gómez
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 18 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and.
Unidad 2: Segmentación Excepciones en la Segmentación Docente: Ing. José Díaz Chow ARQUITECTURA DE MÁQUINAS COMPUTADORAS III.
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 17 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and.
3.4 PROCESAMIENTO DE LAS INSTRUCCIONES DE SALTO
1 MEMORIAS Fundamentos de Informática Ingeniería Técnica Diseño Industrial.
Es el software que controla el conjunto de operaciones de una computadora. Proporciona el mecanismo por el cual un usuario puede solicitar la ejecución.
Museo Tecnológico. Bienvenidos al Museo Tecnológico BIENVENIDOS Información.
6 a 12 años.  El desarrollo físico es menos acelerado durante la tercera infancia que en años anteriores. Existen amplias diferencias en estatura y peso.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Problemas Capitulo Para el fragmento de código siguiente: lwr1, 0x1ac; r1=m[0x1ac] lwr2, 0xc1f; r2=m[0xc1f] addr3,r0,r0; r3=r0+r0 mulr4,r2,r1; r4=r2*r1.
Organización de computadoras
Introducción al lenguaje C Instrucción IF – ELSE y el bucle WHILE
ARQUITECTURA BÁSICA DE UN ORDENADOR
Procesadores superescalares
Pipelining Peligros de control.
Tratamiento de Datos Capitulo Dos.
Programación 1 Curso: 5to. I TT
SISTEMAS OPERATIVOS PARALELOS Y MULTIPROCESADORES RICHARD GIOVANI MEDINA ESTEBA.
Autor: Araya P., Ruz G., Palomino H.
UNIDAD CENTRAL DE PROCESO CPU.
Datapath para las instrucciones de brinco
EL CPU.
Arquitectura de Computadoras 2012
Pipelining Peligros (hazards).
Programación Básica con NQC
COMPUTADORA Una computadora es una colección de circuitos integrados  y otros componentes relacionados que puede ejecutar con exactitud, rapidez y de.
¿Qué es un OPERADOR? “Un operador es un elemento de programa que se aplica a uno o varios operandos en una expresión o instrucción. Los operadores que.
INTRODUCCION DE SISTEMAS INFORMATICOS
Características en general de Pentium II. ESQUEMA Introducción. Pentium. Pentium II. Tipos de Pentium II. Características en general de Pentium II.
Arquitectura 2013 Explicación 4.
Arquitectura 2013 Explicación 4.
Creando un solo datapath
ADMINISTRACION DE LA PRODUCCION II 2017
LÓGICA DE PROGRAMACIÓN
ORGANIZACIÓN Y ADMINISTRACIÓN DE LA MEMORIA VIRTUAL
Pipelining Introducción.
JAVIER ANDRES MARTÀ MARTINEZ CODIGO 37772
INTRODUCCIÓN A JAVA.
Estas dos líneas de código permiten al Asm iniciar en Code Segment
DISPOSITIVOS DE E/S IU Colegio Mayor del Cauca Sistemas operativos Popayán, mayo de 2015.
ARQUITECTURA DEL COMPUTADOR Ing. Diana E. López.
CURSO PROGRAMACIÓN BÁSICA SEMANA 3 ¿Qué es un programa?
ABSTRACCION DE DATOS   Estructura de Datos Básicos: En programación una estructurad de datos, es una forma particular de organizar datos en una computadora.
Scheduling dinámico: algoritmo de Tomasulo
Pipelining Peligros de control.
Commit out of order Ciclo 1: Detecto un load que fallo en L2 en el tope del ROB Load R3(F5)=R4(F4)+R2(F2) R2(F6)=R1(F1)+R3(F5) Branch R3(F5)
1 TEMA 2: Organización de computadores Procesadores Memorias Dispositivos de E/S.
CICLOS EN JAVA FOR, WHILE, DO WHILE Un ciclo en Java o bucle en Java (como prefieras llamarlo) permite repetir una o varias instrucciones cuantas veces.
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
Universidad Técnica De Manabí Facultad De Ciencias Informáticas Departamento De Informática Y Electrónica Trabajo de investigación grupal Tema: Arquitectura.
ALGORITMO FFT Ing. José Arturo Marín Thames 2018.
Pipelining Peligros de control.
Procesos Lic. Gonzalo Pastor.
REPRESENTACION DE LA INFORMACION EN UN COMPUTADOR Principios Básicos.
ALGORITMO DE ORDENAMIENTO POR BURBUJA. El método de la burbuja es uno de los mas simples, es tan fácil como comparar todos los elementos de una lista.
ORDENAMIENTO POR EL MÉTODO DEL SHAKER SORT (SACUDIDA)
Estructura de los Sistemas Operativos
SISTEMAS OPERATIVOS Estudiante: Rojas De la Cruz Jesus Manuel. Ciclo: VI. Turno: Noche.
1 MEMORIAS Fundamentos de Informática Ingeniería Técnica Diseño Industrial.
ARQUITECTURA DE UN MICROPROCESADOR. ESTRUCTURA BÁSICA DE UN SISTEMA MICROPROGRAMABLE A. Hardware CPU (chip microprocesador): es un circuito integrado.
Para el fragmento de código siguiente: lwr1, 0x1ac; r1=m[0x1ac] lwr2, 0xc1f; r2=m[0xc1f] addr3,r0,r0; r3=r0+r0 mulr4,r2,r1; r4=r2*r1.
Transcripción de la presentación:

3.1 predicción de saltos Equipo 1

predicción de saltos  Un predictor de saltos (branch predictor en inglés) es un circuito digital utilizado en los procesadores que utilizan segmentación de la unidad de proceso para reducir ciclos de parada en la segmentación.  Los saltos condicionales introducen retardo en estos procesadores, ya que normalmente no se evalúa la condición del salto hasta pasadas varias etapas, lo que hace que se tenga que parar el cauce, o que se puedan introducir instrucciones en la segmentación que no deben de ser ejecutadas, teniendo que convertirse posteriormente en NOP, y decrementando así el rendimiento.  La predicción es posible anotando el comportamiento del programa en saltos anteriores.  Un predictor de saltos (branch predictor en inglés) es un circuito digital utilizado en los procesadores que utilizan segmentación de la unidad de proceso para reducir ciclos de parada en la segmentación.  Los saltos condicionales introducen retardo en estos procesadores, ya que normalmente no se evalúa la condición del salto hasta pasadas varias etapas, lo que hace que se tenga que parar el cauce, o que se puedan introducir instrucciones en la segmentación que no deben de ser ejecutadas, teniendo que convertirse posteriormente en NOP, y decrementando así el rendimiento.  La predicción es posible anotando el comportamiento del programa en saltos anteriores.

Las técnicas de predicción de salto se pueden dividir, básicamente, en dos tipos Las que realizan predicción estática. Las que realizan predicción dinámica. Las que realizan predicción estática. Las que realizan predicción dinámica.

La diferencia radica en el momento en el que se realiza la predicción, en el caso de la predicción estática se realiza en tiempo de compilación, mientras que la dinámica se realiza en tiempo de ejecución. Ambas tienen sus ventajas y sus inconvenientes. Por ejemplo con la predicción dinámica se consigue mayor precisión a cambio de un coste en hardware mayor, mientras que la estática tiene menos precisión, no requiere tanto hardware, pero a cambio en algunas implementaciones puede llegar a incrementar la longitud del ejecutable considerablemente (hasta un 30%) La diferencia radica en el momento en el que se realiza la predicción, en el caso de la predicción estática se realiza en tiempo de compilación, mientras que la dinámica se realiza en tiempo de ejecución. Ambas tienen sus ventajas y sus inconvenientes. Por ejemplo con la predicción dinámica se consigue mayor precisión a cambio de un coste en hardware mayor, mientras que la estática tiene menos precisión, no requiere tanto hardware, pero a cambio en algunas implementaciones puede llegar a incrementar la longitud del ejecutable considerablemente (hasta un 30%)

Técnicas de Predicción de salto Tipos:  Predicción estática (tiempo de compilación)  Predecir todos los saltos como tomados  Predicciones basadas en el código de operación  Predicciones en función de su dirección (ejemplo hacia atrás predecirlos como tomados y hacia delante como no)  Predicción dinámica (tiempo de ejecución)  BHT (Branch History Table) Información sobre las últimas ejecuciones de los saltos  BTAC (Branch Target Address Cache) Dirección destino de los últimos saltos tomados Tipos:  Predicción estática (tiempo de compilación)  Predecir todos los saltos como tomados  Predicciones basadas en el código de operación  Predicciones en función de su dirección (ejemplo hacia atrás predecirlos como tomados y hacia delante como no)  Predicción dinámica (tiempo de ejecución)  BHT (Branch History Table) Información sobre las últimas ejecuciones de los saltos  BTAC (Branch Target Address Cache) Dirección destino de los últimos saltos tomados Introducir cuando es tomado Introducir cuando es ejecutado por 1ª vez

Técnicas de Predicción de salto  El Branch Target Buffer (BTB) es una pequeña memoria asociativa que guarda las direcciones de los últimos saltos ejecutados así como su destino. A su vez guarda información que permite predecir si el salto será tomado o no.  En la etapa de fetch se mira si la dirección de la instrucción está en el BTB. Si es así se miran los bits de predicción y se decide si el salto ha de ser tomado o no. Si el salto no es tomado o la dirección no está en el BTB en el siguiente ciclo se hace el fetch de la siguiente instrucción en orden. Si el salto es tomado en el siguiente ciclo e hace el fetch del nuevo camino de ejecución.  El Branch Target Buffer (BTB) es una pequeña memoria asociativa que guarda las direcciones de los últimos saltos ejecutados así como su destino. A su vez guarda información que permite predecir si el salto será tomado o no.  En la etapa de fetch se mira si la dirección de la instrucción está en el BTB. Si es así se miran los bits de predicción y se decide si el salto ha de ser tomado o no. Si el salto no es tomado o la dirección no está en el BTB en el siguiente ciclo se hace el fetch de la siguiente instrucción en orden. Si el salto es tomado en el siguiente ciclo e hace el fetch del nuevo camino de ejecución.

Técnicas de Predicción de salto Fallo en la predicción  Se comprueba si la predicción es correcta al ejecutar la instrucción de salto. Si no, el procesador deberá realizar un vaciado del pipe, quitando todas las instrucciones del camino incorrecto pendientes de ser ejecutadas y restaurando el estado de los registros como estaban antes de predecir el salto. Una nueva burbuja  Realizará el fetch de las instrucciones del camino correcto Fallo en la predicción  Se comprueba si la predicción es correcta al ejecutar la instrucción de salto. Si no, el procesador deberá realizar un vaciado del pipe, quitando todas las instrucciones del camino incorrecto pendientes de ser ejecutadas y restaurando el estado de los registros como estaban antes de predecir el salto. Una nueva burbuja  Realizará el fetch de las instrucciones del camino correcto

Técnicas de predicción estática Existen diversas técnicas de predicción estática de saltos. Las más sencillas se basan en las propiedades estáticas de los saltos, como su código de operación o su dirección destino, mientras que las más complicadas se basan en un proceso de profiling, es decir, en realizar ejecuciones previas para obtener medidas que permitan deducir estáticamente el comportamiento del salto.

Las técnicas más relevantes de predicción estática son  Predecir todos los saltos como tomados: esta técnica es la más sencilla, pero obviamente su precisión es bastante pobre.  Predicciones basadas en el código de operación: está basada en estudios que dicen que según el tipo de salto que se realiza, la posibilidad que sea tomado o no es diferente.  Predecir los saltos en función de su dirección: por ejemplo, los saltos “hacia atrás” predecirlos como tomados y los saltos “hacia adelante” predecirlos como no tomados. Esta técnica está basada en el hecho que una gran mayoría de los saltos “hacia atrás” corresponden a bucles, y por lo tanto serán tomados todas las veces que el bucle se ejecute menos una, en cambio los saltos hacia adelante corresponden más a estructuras if-thenelse. Esta técnica funcionará bien en programas con muchos bucles, mientras que no tendrá gran eficacia en programas con un comportamiento irregular de los saltos.  Predecir todos los saltos como tomados: esta técnica es la más sencilla, pero obviamente su precisión es bastante pobre.  Predicciones basadas en el código de operación: está basada en estudios que dicen que según el tipo de salto que se realiza, la posibilidad que sea tomado o no es diferente.  Predecir los saltos en función de su dirección: por ejemplo, los saltos “hacia atrás” predecirlos como tomados y los saltos “hacia adelante” predecirlos como no tomados. Esta técnica está basada en el hecho que una gran mayoría de los saltos “hacia atrás” corresponden a bucles, y por lo tanto serán tomados todas las veces que el bucle se ejecute menos una, en cambio los saltos hacia adelante corresponden más a estructuras if-thenelse. Esta técnica funcionará bien en programas con muchos bucles, mientras que no tendrá gran eficacia en programas con un comportamiento irregular de los saltos.

Técnicas de predicción dinámica En estas técnicas, la predicción sobre el resultado de un salto se basa en información conocida sólo en tiempo de ejecución, (al contrario de la predicción estática).

Dos estructuras son necesarias para realizar una predicción dinámica: Branch History Table (BHT): Es una tabla donde se guarda información sobre las últimas ejecuciones de los saltos, esta información se refiere a si el salto ha sido efectivo o no. A partir de esta información se predice si el siguiente salto será tomado o no. Branch Target Address Cache (BTAC): Es una tabla donde se almacena la dirección destino de los últimos saltos ejecutados. De esta manera, cuando un salto es predicho como tomado, se mira si está en la tabla, y si es así, se obtiene la dirección destino de ella, así se puede calcular rápidamente la dirección destino, incluso en saltos indirectos. Branch History Table (BHT): Es una tabla donde se guarda información sobre las últimas ejecuciones de los saltos, esta información se refiere a si el salto ha sido efectivo o no. A partir de esta información se predice si el siguiente salto será tomado o no. Branch Target Address Cache (BTAC): Es una tabla donde se almacena la dirección destino de los últimos saltos ejecutados. De esta manera, cuando un salto es predicho como tomado, se mira si está en la tabla, y si es así, se obtiene la dirección destino de ella, así se puede calcular rápidamente la dirección destino, incluso en saltos indirectos.