Estructuras segmentadas

Slides:



Advertisements
Presentaciones similares
Procesadores Superescalares
Advertisements

A REA DE TECNOLOGIA ELECTRONICA U NIVERSIDAD DE O VIEDO LECCION 5 – ARQUITECTURA INTERNA DE LOS PIC - 1F.F. LINERA ARQUITECTURA BASICA. CARACTERISTICA.
Diseño y análisis de algoritmos
UNIVERSIDAD DEL VALLE DE MEXICO CAMPUS CHAPULTEPEC
III - Gestión de memoria
Arquitectura de Computadores I
Scheduling dinámico Scoreboarding.
PROGRAMACIÓN PARALELA Tema 5: Análisis de algoritmos paralelos
PROCESADORES SUPERESCALARES
Microprocesadores.
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Hazards.
Departamento de Ingeniería de Sistemas Universidad de Antioquia
Arquitectura de Computadores
Pipelines: Riesgos.
El procesador: la ruta de datos y el control (II Parte)
EL Sistemas Digitales Ing. José Alberto Díaz García Escuela de Ingeniería Electrónica Arquitectura Segmentada Pipeline (Segmentación)
EMISION MULTIPLE DE INSTRUCCIONES
Arquitectura de Conjunto de Instrucciones (ISA)
Mejoras a las Máquinas Von Neumann
Circuitos Combinacionales Comunes
Composición Interna de un Procesador
Este obra se publica bajo unalicencia de Creative Commons Reconocimiento- NoComercial-CompartirIgual 3.0 España.licencia de Creative Commons Reconocimiento-
Microcomputadores Prof : Tatiana Marín R.. Sistema basado en microprocesador de 8 bits.
TRADUCTOR DE UN PROGRAMA
circuitos vlsi TEMA 4. LÓGICA SECUENCIAL CMOS Dr. José Fco. López
PLANIFICACIÓN DINÁMICA DE INSTRUCCIONES
INGENIERIA DE COMPUTADORES II
P(C) = m * nMAXIMO GRADO DE PARALELISMO WSBS ha sido llamado el procesamiento en serie de bits, ya que se procesa un bit por vez (n = m = 1). Es el procesamiento.
Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
Procesador Introducción - Funcionamiento - Memoria caché
Segmentación No Lineal
Unidad 2: Segmentación Dependencias de Control Docente: ing. José Díaz Chow.
Memoria Cachés. Universidad de SonoraArquitectura de Computadoras2 Introducción Caché es el nivel de memoria situada entre el procesador y la memoria.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Descomposición Factorial Unidad 5
Asignación de Espacio No Contiguo
Conceptos Arquitectónicos del computador
Scheduling dinámico Algoritmo de Tomasulo.
Organización de Computadoras
Capítulo 7 Gestión de memoria.
Funcionamiento de la CPU
MICROCONTROLADORES NOCIONES BÁSICAS COMPUTO II. ¿QUÉ ES UN MICROCONTROLADOR? MICROCONTROLADOR = MICROPROCESADOR + MEMORIA + PERIFERICOS.
Unidad 2: Segmentación Excepciones en la Segmentación Docente: Ing. José Díaz Chow ARQUITECTURA DE MÁQUINAS COMPUTADORAS III.
Diseño de la Unidad de Control Multiciclo: Microprogramación
Arquitectura de Von Neumann
Departamento de Ingeniería de Sistemas Universidad de Antioquia
“Organización y Arquitectura de Computadores” William Stallings
Organización del Computador I Verano Aritmética (3 de 3) Basado en el capítulo 4 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
Sistemas Operativos Avanzados
Cap. 6: Pipelining. Encauzamiento de procesadores
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Ing. Noretsys Rodríguez. Definición de Conceptos  Falla: Ocurre cuando un programa no se comporta de manera adecuada. Es una propiedad estadística de.
Metodología de la programación
Capítulo 4 CPU y la memoria.
RENDIMIENTO DEL COMPUTADOR
INTRODUCCIÓN El rendimiento, costo de compra y costo de operación forman la base para la toma de decisiones, sobre que PC es mejor que otra y así adquirir.
Rendimiento de la CPU y sus factores
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 14 La mayor parte del contenido de estas láminas, ha sido extraído del libro Computer Organization and.
ARQUICTECTURA DE SERVIDORES
PROCESADORES SUPERESCALARES
Modos de direccionamiento
Son los atributos de un sistema que son visibles para un programador, es decir aquellos atributos que impactan directamente en la ejecución lógica de un.
ARQUITECTURAS DE LOS SERVIDORES El computador tiene 2 aspectos para entender su funcionamiento al nivel de programación: Almacenamiento Procesamiento Para.
ARQUITECTURA DE COMPUTADORES
Curso: Fundamentos de Computación
Santiago Restrepo Rodríguez
PROCESADOR.- El procesador es el cerebro del sistema, encargado de procesar toda la información. Básicamente, es el "cerebro" de la computadora. Prácticamente,
Arquitectura de Computadoras (Taller) Semestre II de 2008.
Hiperpipeline Superescalares Arquitectura de Computadoras 2012.
Transcripción de la presentación:

Estructuras segmentadas Noción de segmentación Rendimiento. Tipos de cauces. Cauces no lineales y tablas de reserva. Cálculo de latencias en cauces. Segmentación de instrucciones Arquitectura DLX. Encauzamiento de instrucciones en el DLX. stallses. Múltiples unidades funcionales.

Noción de segmentación ¿Qué es la segmentación o pipelining? Técnica para la generación de paralelismo en monoprocesadores. Consiste en dividir una función en subfunciones independientes que pueden realizarse simultáneamente (trabajo en cadena). En un instante determinado, se está trabajando sobre un número de elementos igual al número de etapas => paralelismo.

Noción de segmentación

Etapas del cauce Evolución de los elementos a través de las etapas del cauce:

Mejora del rendimiento Suponemos que se cumple aproximadamente: T0 => tiempo en ejecutar el proceso completo sin segmentar T => tiempo en ejecutar una etapa k => número de etapas de que consta el cauce Sin embargo, el tiempo en ejecutar n procesos sin segmentar:

Mejora del rendimiento El tiempo en ejecutar el proceso segmentado sobre 1 elemento en k etapas será: Y desde que sale el primer resultado del cauce, va saliendo uno nuevo cada T, por lo que el tiempo de procesar n elementos será: Con todo esto, la ganancia es:

Rendimiento Limite Observemos que la ganancia límite, cuando n tiende a infinito, es k:

Requisitos para la segmentación Características del proceso necesarias para poder aplicar segmentación: Se debe poder descomponer en etapas. Es necesario que las entradas de una etapa estén determinadas únicamente por las salidas de la anterior. Cada etapa debe poder ser realizada por un circuito específico de forma más rápida que el conjunto del proceso. Los tiempos de ejecución de cada etapa deben parecidos.

Tipos de cauces Tipos de cauces: uní función: ejecutan un único proceso. multifunción: pueden ejecutar varios procesos: estáticos: en un instante determinado sólo pueden ejecutar uno. dinámicos: pueden ejecutar simultáneamente varios procesos. lineal: a cada etapa sólo le puede seguir otra etapa concreta. no lineal: se pueden establecer recorridos complejos de las etapas.

Aplicaciones Aplicación de la segmentación: A operadores aritméticos: n ejecutan una o varias operaciones de la ALU. n pueden ser lineales (sumas) o no lineales (división). En este caso suelen ser cíclicos (bucles). n los procesadores actuales incluyen varias ALUs segmentadas, y cada una se puede ocupar de varias operaciones. A ejecución de instrucciones: suelen ser cauces lineales. alguna de sus fases puede a su vez sub-segmentarse (uso de una ALU segmentada para la fase de ejecución).

Tablas de reserva Cauces no lineales y tablas de reserva

Latencia Latencia prohibida: latencia con la que se producen número de ciclos que separan la iniciación de dos operaciones (la distancia en ciclos entre las entradas de dos elementos al cauce) Latencia prohibida: latencia con la que se producen colisiones (en el ejemplo, 1 es una latencia prohibida) Latencia permitida: latencia con la que no se produce colisión (en el ejemplo, 2 es una latencia permitida)

Ciclos de latencia Ciclo de latencia: secuencia de latencias permitidas que se puede repetir indefinidamente. Ejemplo. Para la función B, se tiene que (1,4) es un ciclo de latencia:

Segmentación de instrucciones Arquitectura DLX. Encauzamiento de instrucciones en el DLX. stallses: por dependencia estructural, por dependencia de datos, por dependencia de control. Múltiples unidades funcionales.

Formato de instrucciones DLX Carga/almacenamiento y operaciones con valores inmediatos, saltos condicionales: Operaciones aritméticas: Saltos incondicionales:

Máquina básica Máquina básica no encauzada

Ciclos de cada instrucción Ejecución de instrucciones en 5 ciclos

DLX encauzado Etapas del cauce Búsqueda (IF) se accede a memoria por la instrucción, se incrementa el CP. Decodificación / Búsqueda de operandos (ID) se decodifica la instrucción, se accede al banco de registros por los operandos, se calcula el valor del operando inmediato con el signo extendido (por si hace falta más adelante). WB MEM EX ID IF se almacena el resultado (si lo hay) en el banco de registros.

Máquina segmentada Máquina segmentada

Ejecución de instrucciones segmentadas

Ejecución de instrucciones segmentadas

Ejemplo de ejecución de instrucciones

Efecto de los stallses Efecto: el rendimiento disminuye del máximo teórico. La ganancia de rendimiento, a reloj constante, es: Máximo teórico: número de etapas del cauce.

Ejemplo de stole Ejemplo: una instrucción de carga seguida de otras varias (la máquina tiene un único puerto de memoria).

Ejemplo del efecto del stole el load y la instrucción 3 tienen un conflicto: compiten por el puerto de memoria. El stole en el cauce:

stallses por dependencia estructural Las limitaciones en los recursos implican stallses estructurales: 1 puerto de memoria en lugar de 2; (fetchó acceso a memoria). 1 ALU en lugar de 2; (incremento PC ó instrucción de proceso). banco de registros con pocos puertos; (lectura ó escritura). Solución a los stallses estructurales: añadir más recursos, buscando un equilibrio entre rendimiento y coste.

stallses por dependencia de datos Código con dependencia de datos

Adelanto de resultados Solución a los stall ses por dependencia de datos: reenvío/adelanto de resultados (bypassing, forwarding). La instrucción 1, que calcula el nuevo valor de R1, lo tiene listo al final del ciclo 3. La instrucción 2, que lo lee, en realidad necesita que esté listo al principio del ciclo 4. Se puede modificar la ALU con una realimentación, para que el nuevo valor de R1 vaya de la salida a la entrada (además, sigue siendo enviado al banco de registros en la fase WB).

Ejecución con adelanto La ejecución queda ahora:

Adelanto de resultados Adelanto de datos

Problemas del adelanto de resultados Observaciones al adelanto de resultados: Se deben habilitar caminos de realimentación de todas a todas las unidades: de la ALU a memoria, de la ALU a la ALU, etc. Las dependencias se dan entre instrucciones de todos los tipos. Hay que tener en cuenta que el control se complica aún más: hay que decidir cuándo se realimenta un resultado, controlar la realimentación, etc. Aun así, puede no ser suficiente; por ejemplo, si una instrucción de memoria genera un dato para una operación de la ALU: lw r1,0(r2) sub r4,r1,r5

Problemas del adelanto de resultados

Dependencias de datos: clasificación Clasificación de las dependencias de datos: Lectura después de Escritura (RAW, dependencia): una instrucción genera un dato que lee otra posterior (la que hemos visto hasta ahora). Escritura después de Escritura (WAW, dependencia en salida): una instrucción rescribe un dato que otra posterior ya había escrito; en una máquina segmentada simple sólo se da si se permite que las instrucciones se adelanten unas a otras. Escritura después de Lectura (WAR, antidependencia): una instrucción modifica un valor antes de que lo lea otra instrucción anterior; tampoco se puede dar en nuestro cauce.

Ejemplos de dependencias de datos RAW: add r1,r2,r3 add r4,r1,4 WAW: lw r1,0(r2) WAR: sw r1,0(r2) add r1,r3,r4

Reordenación de instrucciones Aprovechamiento del cauce: reordenación de instrucciones Se trata de calcular: a = b + c d = e - f g = a + d

Reordenación de código Código inicial Código reordenado

Eficacia de la reordenación

stallses por dependencia de control Hasta ahora: el CP se actualiza en la fase de búsqueda (fetch). Si en el cauce entra un salto, hay dos instrucciones que pueden ser la siguiente que hay que buscar: la que está a continuación del salto, o bien la que es el destino del salto. Problema: necesitamos saber ya cuál es la siguiente instrucción que vamos a meter en el cauce, pero: si es un salto condicional, aún no se sabe cuál de las dos es la correcta (se sabe en la fase EX); en cualquier caso, el contador de programa incrementado se almacena en la fase (WB).

stallses por dependencia de control Esto sólo sería importante si, en el código, el porcentaje de saltos (tomados y no tomados) es significativo.

Estadísticas de saltos En promedio, para enteros: 13% de instrucciones son saltos condicionales hacia delante, 3% de instrucciones son saltos condicionales hacia atrás, 4% son saltos incondicionales. Estos datos dependen fuertemente de las optimizaciones que use el compilador, pero como orientación sirven. Resumiendo: 1 de cada 5 instrucciones es un salto. Conclusión: sí hay que tener en cuenta los saltos.

Estrategias frente a los saltos ¿Qué se puede hacer? Plan A: en cuanto veamos que una instrucción es un salto, paramos el cauce, hasta que sepamos adónde salta; sabemos si es un salto en la fase ID; conocemos el destino en MEM (usando realimentación). Total: 3 ciclos de stole. Si el porcentaje de saltos es del 30%, y el CPI ideal es 1, la máquina tiene una ganancia del 50% del máximo teórico aproximadamente. Conclusión: No interesa.

Estrategias frente a los saltos ¿Qué se puede hacer? Plan B: intentamos averiguar, en una fase anterior, si el salto se toma o no; vamos calculando el destino lo antes posible, por si acaso hace falta; por ejemplo, en la fase de decodificación (ambas). Total: 1 ciclo de stole. Necesitamos un recurso adicional (un sumador). Si el porcentaje de saltos es del 30%, y el CPI ideal es 1, la máquina tiene ahora una ganancia del 77% del máximo teórico, aproximadamente. Conclusión: Puede interesar.

Rediseño para menor coste en saltos

Tratamiento de los saltos Formas de tratar un salto en el flujo de instrucciones: no hacer nada: es el esquema más sencillo (y barato), también es el que peor rendimiento da; suponer que el salto no se va a tomar: se siguen buscando instrucciones a continuación del salto, en caso de que se tome, se invalidan; suponer que el salto se va a tomar: se calcula el destino, y se empieza a buscar por él en nuestra máquina no es viable: se conocen el sentido y el destino a la vez => no es suposición, es certeza retardar la ejecución del salto: ejecutar la instrucción siguiente, tanto si el salto se toma, como si no.

Opción “suponer salto no se toma” Opción: suponer que el salto no se toma.

Opción “suponer salto no se toma”

¿Tomamos salto o no? Porcentaje de saltos tomados sobre el total de ejecutados:

Opción “suponer salto se toma” En promedio: En programas de enteros, el 62% de los saltos ejecutados se toman. En programas de coma flotante, el porcentaje sube al 70%. Por lo tanto: sería más interesante la opción de suponer que el salto se va a tomar (es más probable). Problema: para buscar la instrucción destino del salto, es necesario calcularla; en nuestra máquina, este valor se obtiene en la fase ID; para entonces, también sabemos si el salto se toma o no, por tanto ya no es necesario suponer.

Opción “retardar el salto” Opción de ejecución retardada del salto. Cuando se llega a un salto, la siguiente instrucción se ejecuta, tanto si el salto se toma como si no se toma (delay-slot). Implicaciones: a la hora de generar código es necesario tener esto en cuenta => cambio en la compilación / programación; el número de instrucciones, situadas a continuación de un salto, que se ejecutan puede variar con la arquitectura; a veces no es posible utilizar el delay-slot para hacer trabajo útil => nop’s.

Relleno del delay-slot Diferentes posibilidades para rellenar el delay-slot.

Aprovechamiento del delay-slot Requisitos para aprovechar el delay-slot. Si las instrucciones se toman de antes del salto: no debe haber dependencia entre ellas y el salto; siempre mejora el rendimiento. Si las instrucciones se toman del destino del salto: no debe afectar al programa el que se ejecuten si el salto no se toma; puede haber ocasiones en las que el código no se copie, sino que se duplique (al destino se llega desde varios puntos); sólo mejora el rendimiento si el salto se toma Si las instrucciones se toman de a continuación del salto: no debe afectar al programa el que se ejecuten si el salto se toma; sólo mejora el rendimiento si el salto no se toma.

Dificultades para el aprovechamiento Problema: Puede ser difícil encontrar instrucciones a continuación del salto, o del destino, que no afecten al programa si se ejecutan cuando el salto se toma o no, respectivamente. Posibles soluciones: Saltos con anulación (o cancelación): se predice si se van a tomar o no (por el compilador); se rellenan sus delay-slots con instrucciones según corresponda; si el salto se comporta…como lo esperado => todo bien; al revés de lo esperado => se anula la ejecución de los delay-slots. Con esto se relajan los requisitos sobre las instrucciones que van en los delay-slots y se facilita su aprovechamiento.

Ejecución de los delay-slots Ejecución de los delay-slots, en porcentaje sobre el total de los saltos condicionales:

Uso de los delay-slots en la práctica Observaciones sobre el uso de delay-slots: en promedio, el 30% se desperdician (35% en enteros, 25% en coma flotante) o lo que es igual, hasta un 70% se aprovechan; sin embargo, en nuestra máquina, los saltos sólo tienen 1 delayslot; en otras, con cauces más largos, pueden tener más; esto puede hacer difícil el rellenarlos con trabajo útil; lo mismo ocurre con procesadores superescalares (ya los veremos en detalle: ejecutan varias instrucciones a la vez). En resumen: los delay-slots tienen bastante utilidad en cauces sencillos, pero en cauces más complejos su efectividad es poca. Conclusión: ya no se usan.

Múltiples unidades funcionales Problema: Unas instrucciones tardan más en ejecutarse que otras. Ejemplo: una multiplicación y un desplazamiento lógico Si el ciclo de reloj se ajusta a la más lenta, con las rápidas (y con las demás etapas del cauce) se está perdiendo tiempo. Si el ciclo de reloj se ajusta a la más rápida, a las lentas no les da con un ciclo. Solución: Se segmenta también la fase de ejecución.

Cauce multifuncional El nuevo cauce:

Nuevo flujo de instrucciones El flujo de instrucciones a través del cauce es ahora: las instrucciones pasan por las fases IF e ID; a continuación, cada instrucción pasa a la unidad funcional que le corresponda para su ejecución; las instrucciones terminan el recorrido por su unidad funcional, y pasan a recorrer las fases MEM y WB. Es necesario modificar la máquina: añadiendo latches entre las fases de las unidades funcionales; posibilitando el flujo desde ID hasta cualquier unidad funcional; por supuesto, el control se complica (pero no demasiado).

Ejemplo de ocupación del nuevo cauce Se supone que las instrucciones no tienen dependencias entre sí. Las fases en cursiva indican cuándo se necesitan los datos. Las fases en negrita indican cuándo se generan los resultados.

Complicaciones de la multifunción Complicaciones que aparecen en el nuevo modelo: Las posibilidades de dependencia (=>stallses) aumentan: algunas unidades funcionales están segmentadas y pueden tener varias instrucciones en ejecución; además, varias unidades funcionales pueden estar activas simultáneamente. Además los stallses serán más largos, puesto que el cauce es más largo (dependiendo de la unidad funcional). Las instrucciones no tienen por qué terminar en orden: cuidado con las dependencias en salida WAW; puede haber varias instrucciones en la fase WB a la vez (hay riesgo de conflicto estructural). Buena noticia: las antidependencias WAR no pueden darse.

Ejemplo de ejecución multifuncional Hay dependencias RAW de cada instrucción con la anterior. Esto implica stallses. La instrucción 4 necesita el resultado de la 3, pero para su fase MEM, por lo que puede pasar a la fase EX en el ciclo 13. Hay dependencias estructurales: en el ciclo 16, la instrucción 4 no puede almacenar el dato porque la instrucción 3 está usando la etapa de memoria.

MIPS R4000 El MIPS R4000 Representativo de arquitecturas que aparecieron a partir de los años 80. Es una máquina de 64 bits. Implementa el repertorio MIPS-3. Tiene un cauce con gran número de etapas (supersegmentación). Esto le permitía utilizar una frecuencia alta (100-200 MHz) Utilizado por NEC, Nintendo, Silicon Graphics, Sony,...

Cauce del R4000

MIPS R4000 El retardo de una carga son dos ciclos (implica posible stole, si la siguiente instrucción necesita el dato).

Ejecución de un salto en el R4000 Cuál es el destino del salto, y si se toma, se sabe al fin de la fase EX; por lo tanto, la penalización son 3 ciclos.

Delay-slots en el R4000 Los saltos en el R4000 El R4000 permite el aprovechamiento de un delay-slot (aunque haya 3). Para los otros dos slots, se predice que el salto no se va a tomar y ejecuta 2 instrucciones de la continuación del salto, pero si el salto se toma, se anula su ejecución, Dispone de instrucciones de ‘salt probablemente tomado’: equivalentes a nuestro ‘salto con anulación’.

Coma flotante en el R4000 Las operaciones de coma flotante: Tiene 3 unidades funcionales: división, multiplicación, suma. La unidad de suma se usa también al final de la multiplicación y la división. La duración de las operaciones va de 2 ciclos para una negación a 112 ciclos para una raíz cuadrada.

Estadísticas de stallses en R4000 Estadísticas de causas de stallses en el R4000:

Definiciones ILP: Nivel de paralelismo de instrucciones en arquitectura superescalar TLP: Ejecución de múltiples hilos al mismo tiempo. Los dos metodos para lograr el TLP son: Multiprocesamiento a nivel de chip, chip-level multiprocessing (CMP) Multiples hilos simultáneo, simultaneous multithreading (SMT) SMP incluye múltiples paquetes independientes En un alto nivel, es muy común construir computadores con múltiples CPU: totalmente independientes en arreglos, SMP CMP, múltiples "núcleos" de procesador son incluidos en el mismo paquete Con acceso de memoria no uniforme (Non-Uniform Memory Access (NUMA)) NUMA es considerado un modelo mucho más escalable, permitiendo que en un computador posea más CPU que un SMP, debido a la perdida de performans