1 / 68

Estructuras segmentadas

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.

mareo
Download Presentation

Estructuras segmentadas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. 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.

  3. Noción de segmentación

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

  5. 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:

  6. 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:

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

  8. 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.

  9. 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.

  10. 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).

  11. Tablas de reserva • Cauces no lineales y tablas de reserva

  12. Latencia • Latencia: • 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)

  13. 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:

  14. Segmentación de instrucciones • 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.

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

  16. Máquina básicaMáquina básica no encauzada

  17. Ciclos de cada instrucción • Ejecución de instrucciones en 5 ciclos

  18. 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.

  19. Máquina segmentada • Máquina segmentada

  20. Ejecución de instrucciones segmentadas • Ejecución de instrucciones segmentadas

  21. Ejecución de instrucciones segmentadas • Ejecución de instrucciones segmentadas

  22. Ejemplo de ejecución de instrucciones • Ejemplo de ejecución de instrucciones

  23. 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.

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

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

  26. 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.

  27. stallses por dependencia de datos • Código con dependencia de datos

  28. 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).

  29. Ejecución con adelanto • La ejecución queda ahora:

  30. Adelanto de resultados • Adelanto de datos

  31. 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

  32. Problemas del adelanto de resultados

  33. 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.

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

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

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

  37. Eficacia de la reordenación • Eficacia de la reordenación

  38. stallses por dependencia de control • 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).

  39. 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.

  40. 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.

  41. 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.

  42. 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.

  43. Rediseño para menor coste en saltos

  44. 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.

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

  46. Opción “suponer salto no se toma”

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

  48. 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.

  49. 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.

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

More Related