SlideShare una empresa de Scribd logo
1 de 41
La CDC 6600 de Seymour Cray, construida
  La inmensa mayoría de las CPUs
en 1965, es la primera arquitectura
superescalar, siendo llevado1998
  desarrolladas    desde             son
                             el concepto a
  superescalares.
las microcomputadoras en las CPUs RISC.
El procesamiento superescalar es la
última de una serie de innovaciones
tendientes a producir procesadores
cada vez más rápidos. Explotando el
paralelismo a nivel de instrucción.
Los procesadores superescalares son
capaces de ejecutar más de una
instrucción por ciclo de reloj .
Lo esencial del enfoque superescalar
es su habilidad para ejecutar
instrucciones en diferentes cauces de
manera         independiente        y
concurrente. El concepto puede
llevarse más lejos permitiendo que
las instrucciones se ejecuten en un
orden diferente al del programa.
Banco de Registros de               Banco de Registros de
                     Enteros                          Coma Flotante




  Unidades
 Funcionales
Segmentadas




                                       Memoria




  Hay múltiples unidades funcionales, cada una de las cuales está
  implementada como un cauce segmentado, que admiten la ejecución
  en paralelo de varias instrucciones. En el ejemplo, dos operaciones
  enteras, dos de coma flotante y una de memoria (carga o
  almacenamiento) pueden estar ejecutándose en el mismo instante.
Dependencia de Datos
                                                Verdadera


La aproximación superescalar depende      Dependencia Relativa al
de la habilidad para ejecutar múltiples       Procedimiento
instrucciones en paralelo.

Para maximizar el paralelismo en las      Conflicto en los Recursos
instrucciones, se puede usar una
combinación      de   optimizaciones
realizadas por el compilador y de
técnicas de hardware.                      Dependencia de Salida



                                             Antidependencia
Consideremos la siguiente secuencia:

add      r1, r2    ; Cargar el registro r1 con el contenido de r2
                     más el contenido de r1.


move     r3, r1    ; Cargar el registro r3 con el contenido de r1.




La segunda instrucción se puede captar y decodificar, pero no se puede
ejecutar hasta que finalice la ejecución de la primera instrucción. El motivo es
que la segunda instrucción necesita un dato producido por la primera
instrucción. Esta situación es conocida como “dependencia de datos
verdadera” (también llamada dependencia de flujo o dependencia escritura -
lectura).
Clave:                     Ejec.

                                     Capt.    Decod.                   Escr.



       i0
       i1                                          Sin dependencia


                                             Dependencia de datos(i1 usa
       i0                                    datos calculados por 10)
       i1



       i0                                                      Dependencia relativa al
                                                                  procedimiento
i1/salto
       i2
       i3
       i4
       i5




       i0
                                              Conflicto en los recursos (i0 e i1 usan
       i1                                         la misma unidad funcional)




            0   1   2   3   4    5           6         7           8           9


                                                 Tiempo en ciclos base.
Consideraremos la siguiente secuencia, en la cual una de las
cargas se hace desde la memoria y no desde un registro:




   load     r1, ef   ; cargar el registro r1 con el contenido de la
                     dirección de memoria efectiva ef.

   move     r3, r1   ; carga el registro r3 con el contenido de r1.




Este esquema es menos efectivo en el caso de un cauce superescalar: las
instrucciones independientes que se ejecutan durante la carga lo hacen
probablemente en el primer ciclo de esta, dejan al procesador sin nada que
hacer hasta que concluya la carga.
Clave:                     Ejec.
                                      Capt.       Decod.               Escr.


            i0
            i1                                      Sin dependencia

                                               Dependencia de datos(i1
           i0                                 usa datos calculados por
La figura anterior
            i1                                                 10)

            i0                                                   Dependencia relativa al
     i1/salto                                                       procedimiento
            i2
 La presencia de saltos en una secuencia
            i3
            i4
       de instrucciones complica el
            i5
      funcionamiento del cauce. Las
     instrucciones que siguen a una
          i0                                   Conflicto en los recursos (i0 e i1
          i1
 bifurcación (en la que se puede saltar o      usan la misma unidad funcional)

 no) tienen una dependencia relativa al
             0   1     2    3   4     5       6            7           8       9
  procedimiento en esa bifurcación y no
pueden ejecutarse hasta que se ejecute el         Tiempo en ciclos base.

                   salto.
Ilustra el efecto de un salto en un cauce superescalar de grado 2.
Si se usan instrucciones de longitud variable, surge otro tipo de
dependencia relativa al procedimiento.
Clave:                     Ejec.
                                        Capt.       Decod.               Escr.


Un conflicto en un recurso es una pugna de dos o más
          i0
          i1                               Sin dependencia
instrucciones por el mismo recurso al mismo tiempo.
Desde el punto de vista del cauce segmentado,datos(i1conflicto en
         i0
                                       Dependencia de
                                                        un
                                      usa datos calculados por
los recursos presenta el mismo comportamiento que una
          i1                                     10)

dependencia de datos (figura anterior). No obstante, hay
          i0                                       Dependencia relativa al
algunas diferencias.
  i1/salto                                             procedimiento
      i2
      i3
      i4
      i5


      i0                                        Conflicto en los recursos (i0 e i1
      i1
                                                usan la misma unidad funcional)


           0   1    2     3     4      5        6            7           8       9

                                                    Tiempo en ciclos base.
Una instrucción S2 presenta una
dependencia de salida respecto de S1 si y
solo si S1 y S2 modifican el mismo recurso
y S1 precede a S2 en el orden de
ejecución.


El siguiente ejemplo muestra una dependencia de salida:



                           S1    x := 10
                           S2    x := 20
Una instrucción S2 es antidependiente de
S1 si y solo si S2 modifica un recurso que
S1 lee y S1 precede a S2 en el orden de
ejecución.


El siguiente ejemplo muestra una antidependencia:



                           S1   x := y + c
                           S2   y := 10
Una solución alternativa para alcanzar
    mayores prestaciones es la llamada
 supersegmentación, un término acuñado
        Una solución alternativa para
en 1988. La supersegmentación aprovecha
       alcanzar mayores prestaciones
 el hecho de que muchas etapas del cauce
                 es la llamada
  realizan tareas que requieren menos de
      supersegmentación, un término
     medio ciclo de reloj. De este modo,
              acuñado en 1988.
 doblando la velocidad de reloj interna se
permite la realización de dos tareas en un
            ciclo de reloj externo.
Clave:                       Ejec.
                                                  Capt.       Decod.                   Escr.




                                                                       Cauce sencillo de 4
Instrucciones Sucesivas                                                     etapas




                                                                  Supersegmentada




                                                                  Superescalar




                          0   1   2   3   4   5           6            7           8           9


                                                          Tiempo en ciclos base.
Las dos realizaciones, supersegmentada y
superescalar, ejecutan el mismo número de
instrucciones en el mismo tiempo cuando
funcionan de forma interrumpida. El procesador
supersegmentado se queda atrás con respecto al
procesador superescalar al comienzo del
programa y en cada destino de un salto.
Existe paralelismo en las instrucciones cuando las
instrucciones de una secuencia son independientes
     y por tanto pueden ejecutarse en paralelo
                   solapándose.
Como ejemplo del concepto de paralelismo en las instrucciones,
consideremos los dos siguientes fragmentos de código:


            Load R1  R2               Add R3  R3, “1”
            Add R3  R3, “1”           Add R4  R3, R2
            Add R4  R4, R2            Store [R4]  R0


Las tres instrucciones de la izquierda son independientes, y en
teoría las tres podrían ejecutarse en paralelo. Por el contrario, las
tres instrucciones de la derecha no pueden ejecutarse en paralelo
porque la segunda instrucción usa el resultado de la primera, y la
tercera instrucción usa el resultado de la segunda.
El paralelismo en las instrucciones depende
de la frecuencia de dependencias de datos
verdaderas y dependencias relativas al
procedimiento que haya en el código. Estos
factores dependen a su vez de la
arquitectura del repertorio de instrucciones
y de la aplicación.
El paralelismo de la máquina es una medida de la capacidad del
procesador para sacar partido al paralelismo en las instrucciones.
       El paralelismo de la máquina depende del número de
instrucciones que pueden captarse y ejecutarse al mismo tiempo
 (número de cauces paralelos) y de la velocidad y sofisticación de
       los mecanismos que usa el procesador para localizar
                   instrucciones independientes.
El procesador además tiene que ser capaz de identificar el
  paralelismo en las instrucciones y organizar la captación,
 decodificación y ejecución de las instrucciones en paralelo.

 En general, se puede decir que la emisión de una instrucción
tiene lugar cuando ésta pasa de la etapa de decodificación del
            cauce a la primera etapa de ejecución.
Esencialmente, el procesador intenta localizar instrucciones más allá del
punto de ejecución en curso que puedan introducirse en el cauce y
ejecutarse. Con respecto a esto, hay tres ordenaciones importantes:




        El orden en que se captan las instrucciones.
        El orden en que se ejecutan las instrucciones.
        El orden en que las instrucciones actualizan los contenidos de
        los registros y de las posiciones de memoria.
Emisión en orden y Finalización
Para optimizar la utilización de los                  en orden.
diversos elementos del cauce, el
procesador tendrá que alterar uno o más
de estos órdenes con respecto al orden
que se encontraría en una ejecución         Emisión en orden y Finalización
secuencial estricta.                                desordenada.
En términos generales, podemos agrupar
las políticas de emisión de instrucciones
de los procesadores superescalares en
las siguientes categorías:
                                               Emisión desordenada y
                                              Finalización desordenada.
La política de emisión de instrucciones más
sencilla es emitir instrucciones en el orden exacto
en que lo haría una ejecución secuencial (emisión
en orden) y escribir los resultados en ese mismo
orden (finalización en orden). Ni siquiera los
cauces escalares siguen una política ingenua. No
obstante, es útil considerar esta política como
base con la cual comparar otras aproximaciones
más sofisticadas.
Suponemos un cauce superescalar capaz de captar y decodificar dos
instrucciones a la vez, con tres unidades funcionales independientes, y con
dos copias de la etapa de escritura del cauce. El ejemplo supone las
siguientes restricciones para un fragmento de código de seis instrucciones:

• I1 necesita dos ciclos para ejecutarse.
• I3 e I4 compiten por la misma unidad funcional.
• I5 depende de un valor producido por I4.
• I5 e I6 compiten por una unidad funcional.
La finalización desordenada se usa en los
procesadores RISC escalares para mejorar la
velocidad de las instrucciones que necesitan
ciclos.
Con la finalización desordenada, puede haber
cualquier número de instrucciones en la
etapa de ejecución en un momento dado,
hasta alcanzar el máximo grado de
paralelismo de la máquina ocupando todas
las unidades funcionales. La emisión de
instrucciones se para cuando hay una pugna
por un recurso, una dependencia de datos o
una dependencia relativa al procedimiento.
Aparte de las limitaciones anteriores, surge una nueva dependencia, a la
cual nos referimos anteriormente como dependencia de salida. El
siguiente fragmento de código ilustra esta dependencia (op representa
cualquier operación):

                 I1:     R3               R3 op R5
                 I2:     R4               R3 + 1
                 I3:     R3              R5 + 1
                 I4:     R7              R3 op R4
La finalización desordenada necesita una lógica de emisión de
instrucciones más compleja que la finalización en orden.
Además, es más difícil ocuparse de las interrupciones y
excepciones. Cuando ocurre una interrupción, la ejecución de
instrucciones se suspende en el punto actual, para reanudarse
posteriormente. El procesador debe asegurar que la reanudación
tiene en cuenta que, en el momento de la interrupción, algunas
interrupciones posteriores a la instrucción que provocó dicha
interrupción pueden haber finalizado ya.
Para permitir la emisión desordenada, es necesario desacoplar las
etapas del cauce de decodificación y ejecución. Esto se hace mediante
un buffer llamado ventana de instrucciones. Con esta organización,
cuando un procesador termina de decodificar una instrucción, la coloca
en la ventana de instrucciones. Mientras el buffer no se llene, el
procesador puede continuar captando y decodificando nuevas
instrucciones. Cuando una unidad funcional de la etapa de ejecución
queda disponible, se puede emitir una instrucción desde la ventana de
instrucciones a la etapa de ejecución.



    Necesite la unidad funcional
   particular que está disponible.

                                           Ningún conflicto ni
                                        dependencia la bloqueen.
La política de emisión desordenada y finalización desordenada está sujeta a las
mismas restricciones descritas anteriormente. Una instrucción no puede
emitirse si viola una dependencia o tiene un conflicto. La diferencia es que
ahora hay más instrucciones dispuestas a ser emitidas, reduciendo la
probabilidad de que una etapa del cauce tenga que pararse. Además surge una
nueva dependencia, a la que nos referimos antes como antidependencia. El
fragmento de código considerado antes, ilustra esta dependencia:

                    I1:        R3              R3 op R5
                    I2:        R4              R3 + 1
                    I3:        R3              R5 + 1
                    I4:        R7              R3 op R4
Un método para hacer frente a este tipo de
conflictos de almacenamiento se basa en una
solución tradicional para los conflictos en los
     recursos: la duplicación de recursos




                        Básicamente, el hardware del procesador
                     asigna dinámicamente los registros que están
                       asociados con los valores que necesitan las
                     instrucciones en diversos instantes de tiempo.
Esto indica que si la ventana de instrucciones es
  demasiado pequeña, las dependencias de datos
   impiden la utilización efectiva de las unidades
    funcionales adicionales; es importante que el
  procesador pueda mirar hacia delante bastante
lejos en busca de instrucciones independientes que
       permitan aprovechar más el hardware
PREDICCIÓN DE SALTOS


  Con el desarrollo de las máquinas superescalares, la estrategia de
     salto retardado ha perdido interés. El motivo es que hay que
    ejecutar múltiples instrucciones en el ciclo de retardo, lo que
  plantea varios problemas relacionados con las dependencia entre
                            instrucciones.



           Por ello, las máquinas superescalares han regresado a las
          técnicas de predicción de saltos anteriores a las de los RISC.
          Algunas, como el PowerPC 601, usan una técnica sencilla de
        predicción de saltos estática. Los procesadores más sofisticados,
        como el PowerPC 620 y el Pentium 4, usan predicción dinámica
            de saltos basada en el análisis de la historia de los saltos
EJECUCIÓN SUPERESCALAR


                        Encolamiento de    Emisión de
                         instrucciones    instrucciones

                   Captación de                     Ejecución de
      Programa    instrucciones y                  instrucciones
       Estático    predicción de                                   Reordenación y
                       datos                                          entrega de
                                                                    instrucciones
IMPLEMENTACIÓN SUPERESCALAR

Estrategias de captación de instrucciones que capten
 simultáneamente múltiples instrucciones, a menudo
   prediciendo los resultados de las instrucciones de
 salto condicional y captando más allá de ellas. Estas
funciones requieren la utilización de múltiples etapas
 de captación y decodificación, y lógica de predicción
                       de saltos.



                                 Lógica para determinar dependencias
                                 verdaderas entre valores de registros, y
                                 mecanismos para comunicas esos valores a
                                 donde sean necesarios durante la ejecución
Mecanismos para iniciar o emitir múltiples
instrucciones en paralelo.



                         Recursos para la ejecución en paralelo de múltiples
                         instrucciones, que incluyan múltiples unidades
                         funcionales segmentadas y jerarquías de memoria
                         capaces de atender múltiples referencias a
                         memoria.



Mecanismos para entregar el estado del
procesador en el orden correcto.
PowerPC 604:
                 6 unidades de ejecución independientes (1 unidad
                 de procesamiento de saltos, 1 unidad de carga
                 almacenamiento, 3 unidades de enteros, 1 unidad
                 de punto flotante), emisión en orden.
                 Renombrado de registros.

Ejemplos
Superescalares   PowerPC620:

                 Idem con emisión desordenada.


                 Pentium:
                 Emisión en orden y 3 unidades de ejecución
                 independientes (2 unidades de enteros, 1 unidad
                 de punto flotante).
CONCLUSIONES
Conclusiones.
 Un procesador superescalar es aquél que usa múltiples
 cauces de instrucciones independientes. Cada cauce
 consta de múltiples etapas, de modo que puede tratar
 varias instrucciones a la vez. El hecho de que haya varios
 cauces introduce un nuevo nivel de paralelismo,
 permitiendo que varios flujos de instrucciones se procesen
 simultáneamente.




                Un procesador superescalar saca provecho de lo que se
                conoce como paralelismo en las instrucciones, que hace
                referencia al grado en que las instrucciones de un
                programa pueden ejecutarse en paralelo.
Procesamiento superescalar
Procesamiento superescalar

Más contenido relacionado

La actualidad más candente

Qué son las colas de prioridad
Qué son las colas de prioridadQué son las colas de prioridad
Qué son las colas de prioridadRodrigo Avendaño
 
Comunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de ProcesosComunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de ProcesosLorena Ramos
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedioGuillermo
 
Maximo comun divisor
Maximo comun divisorMaximo comun divisor
Maximo comun divisoredilectro
 
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...Micael Gallego
 
Planificacion de CPU FCFS (First Come, First Served)
Planificacion de CPU FCFS (First Come, First Served)Planificacion de CPU FCFS (First Come, First Served)
Planificacion de CPU FCFS (First Come, First Served)Rodrigo Saraguro
 
Extracción de Requerimientos
Extracción de RequerimientosExtracción de Requerimientos
Extracción de Requerimientoscamposer
 
Modelos de arquitecturas de computo
Modelos de arquitecturas de computoModelos de arquitecturas de computo
Modelos de arquitecturas de computoYESENIA CETINA
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepcionesJorge Gamez
 
Estructura y funcionamiento del procesador
Estructura y funcionamiento del procesadorEstructura y funcionamiento del procesador
Estructura y funcionamiento del procesadorJose Diaz Silva
 
Autómatas de Pila
Autómatas de PilaAutómatas de Pila
Autómatas de PilaPablo Guerra
 
Algoritmo congruencial aditivo
Algoritmo congruencial aditivoAlgoritmo congruencial aditivo
Algoritmo congruencial aditivoEwing Ma
 
Aplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes FormalesAplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes FormalesMoises Benzan
 

La actualidad más candente (20)

Computadores RISC
Computadores RISCComputadores RISC
Computadores RISC
 
Qué son las colas de prioridad
Qué son las colas de prioridadQué son las colas de prioridad
Qué son las colas de prioridad
 
Comunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de ProcesosComunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de Procesos
 
Round robin
Round robinRound robin
Round robin
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
Maximo comun divisor
Maximo comun divisorMaximo comun divisor
Maximo comun divisor
 
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
Concurrencia y asincronía: Lenguajes, modelos y rendimiento: GDG Toledo Enero...
 
Risc Cisc
Risc   CiscRisc   Cisc
Risc Cisc
 
Planificacion de CPU FCFS (First Come, First Served)
Planificacion de CPU FCFS (First Come, First Served)Planificacion de CPU FCFS (First Come, First Served)
Planificacion de CPU FCFS (First Come, First Served)
 
Extracción de Requerimientos
Extracción de RequerimientosExtracción de Requerimientos
Extracción de Requerimientos
 
Modelos de arquitecturas de computo
Modelos de arquitecturas de computoModelos de arquitecturas de computo
Modelos de arquitecturas de computo
 
Sjf srtf
Sjf   srtfSjf   srtf
Sjf srtf
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepciones
 
computación paralela
computación paralelacomputación paralela
computación paralela
 
Estructura y funcionamiento del procesador
Estructura y funcionamiento del procesadorEstructura y funcionamiento del procesador
Estructura y funcionamiento del procesador
 
Autómatas de Pila
Autómatas de PilaAutómatas de Pila
Autómatas de Pila
 
Algoritmo congruencial aditivo
Algoritmo congruencial aditivoAlgoritmo congruencial aditivo
Algoritmo congruencial aditivo
 
Aplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes FormalesAplicaciones de Autómatas y Lenguajes Formales
Aplicaciones de Autómatas y Lenguajes Formales
 
Pram
PramPram
Pram
 

Similar a Procesamiento superescalar (17)

Seti7 ocw
Seti7 ocwSeti7 ocw
Seti7 ocw
 
Lab5 guia
Lab5 guiaLab5 guia
Lab5 guia
 
Atix23
Atix23Atix23
Atix23
 
Atix23
Atix23Atix23
Atix23
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Hilo de ejecución
Hilo de ejecuciónHilo de ejecución
Hilo de ejecución
 
Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación
 
Sistemas operativos 05 2010
Sistemas operativos 05   2010Sistemas operativos 05   2010
Sistemas operativos 05 2010
 
Resumen Ejecutivo1.2
Resumen Ejecutivo1.2Resumen Ejecutivo1.2
Resumen Ejecutivo1.2
 
Introducción a Celery y las colas de tareas asíncronas
Introducción a Celery y las colas de tareas asíncronasIntroducción a Celery y las colas de tareas asíncronas
Introducción a Celery y las colas de tareas asíncronas
 
Vega_NoAnimation.pptx
Vega_NoAnimation.pptxVega_NoAnimation.pptx
Vega_NoAnimation.pptx
 
Diseño Agile
Diseño AgileDiseño Agile
Diseño Agile
 
Tema 3: Procesadores VLIW y procesadores vectoriales.
Tema 3: Procesadores VLIW y procesadores vectoriales.Tema 3: Procesadores VLIW y procesadores vectoriales.
Tema 3: Procesadores VLIW y procesadores vectoriales.
 
Lemoncode kubernetes
Lemoncode   kubernetes Lemoncode   kubernetes
Lemoncode kubernetes
 
Diapositivas Spring Framework- Javier Oliver Fulguera
Diapositivas Spring Framework-  Javier Oliver FulgueraDiapositivas Spring Framework-  Javier Oliver Fulguera
Diapositivas Spring Framework- Javier Oliver Fulguera
 
Eclipse
EclipseEclipse
Eclipse
 
Programaci un+concurrente+en+java
Programaci un+concurrente+en+javaProgramaci un+concurrente+en+java
Programaci un+concurrente+en+java
 

Más de Jairo Quiroz Cabanillas (20)

COMPUTACIÓN EVOLUTIVA
COMPUTACIÓN EVOLUTIVACOMPUTACIÓN EVOLUTIVA
COMPUTACIÓN EVOLUTIVA
 
ROBOTICA
ROBOTICAROBOTICA
ROBOTICA
 
Algoritmo voraces
Algoritmo voracesAlgoritmo voraces
Algoritmo voraces
 
Sistemas raid
Sistemas raidSistemas raid
Sistemas raid
 
Sql dataadapter
Sql dataadapterSql dataadapter
Sql dataadapter
 
Sql connection
Sql connectionSql connection
Sql connection
 
ADO
ADOADO
ADO
 
ACCIDENTES DE TRABAJO
ACCIDENTES  DE TRABAJOACCIDENTES  DE TRABAJO
ACCIDENTES DE TRABAJO
 
Segmentación
Segmentación Segmentación
Segmentación
 
Discos duros
Discos durosDiscos duros
Discos duros
 
Evolucion web
Evolucion webEvolucion web
Evolucion web
 
Buses de arquitectura
Buses de arquitecturaBuses de arquitectura
Buses de arquitectura
 
MRP y ERP
MRP y ERPMRP y ERP
MRP y ERP
 
Planeacion de produccion
Planeacion de produccionPlaneacion de produccion
Planeacion de produccion
 
Sistema justo a tiempo
Sistema justo a tiempoSistema justo a tiempo
Sistema justo a tiempo
 
Administración del mantenimiento y fiabilidad
Administración del mantenimiento y fiabilidadAdministración del mantenimiento y fiabilidad
Administración del mantenimiento y fiabilidad
 
Mantenimiento y confiabiliadad
Mantenimiento y confiabiliadadMantenimiento y confiabiliadad
Mantenimiento y confiabiliadad
 
Nivel red
Nivel redNivel red
Nivel red
 
Capa de transporte nivel enrutamiento - pat - nat
Capa de transporte   nivel enrutamiento - pat - natCapa de transporte   nivel enrutamiento - pat - nat
Capa de transporte nivel enrutamiento - pat - nat
 
Buses de arquitectura INFORME
Buses de arquitectura INFORMEBuses de arquitectura INFORME
Buses de arquitectura INFORME
 

Procesamiento superescalar

  • 1.
  • 2. La CDC 6600 de Seymour Cray, construida La inmensa mayoría de las CPUs en 1965, es la primera arquitectura superescalar, siendo llevado1998 desarrolladas desde son el concepto a superescalares. las microcomputadoras en las CPUs RISC.
  • 3. El procesamiento superescalar es la última de una serie de innovaciones tendientes a producir procesadores cada vez más rápidos. Explotando el paralelismo a nivel de instrucción. Los procesadores superescalares son capaces de ejecutar más de una instrucción por ciclo de reloj .
  • 4. Lo esencial del enfoque superescalar es su habilidad para ejecutar instrucciones en diferentes cauces de manera independiente y concurrente. El concepto puede llevarse más lejos permitiendo que las instrucciones se ejecuten en un orden diferente al del programa.
  • 5. Banco de Registros de Banco de Registros de Enteros Coma Flotante Unidades Funcionales Segmentadas Memoria Hay múltiples unidades funcionales, cada una de las cuales está implementada como un cauce segmentado, que admiten la ejecución en paralelo de varias instrucciones. En el ejemplo, dos operaciones enteras, dos de coma flotante y una de memoria (carga o almacenamiento) pueden estar ejecutándose en el mismo instante.
  • 6. Dependencia de Datos Verdadera La aproximación superescalar depende Dependencia Relativa al de la habilidad para ejecutar múltiples Procedimiento instrucciones en paralelo. Para maximizar el paralelismo en las Conflicto en los Recursos instrucciones, se puede usar una combinación de optimizaciones realizadas por el compilador y de técnicas de hardware. Dependencia de Salida Antidependencia
  • 7. Consideremos la siguiente secuencia: add r1, r2 ; Cargar el registro r1 con el contenido de r2 más el contenido de r1. move r3, r1 ; Cargar el registro r3 con el contenido de r1. La segunda instrucción se puede captar y decodificar, pero no se puede ejecutar hasta que finalice la ejecución de la primera instrucción. El motivo es que la segunda instrucción necesita un dato producido por la primera instrucción. Esta situación es conocida como “dependencia de datos verdadera” (también llamada dependencia de flujo o dependencia escritura - lectura).
  • 8. Clave: Ejec. Capt. Decod. Escr. i0 i1 Sin dependencia Dependencia de datos(i1 usa i0 datos calculados por 10) i1 i0 Dependencia relativa al procedimiento i1/salto i2 i3 i4 i5 i0 Conflicto en los recursos (i0 e i1 usan i1 la misma unidad funcional) 0 1 2 3 4 5 6 7 8 9 Tiempo en ciclos base.
  • 9. Consideraremos la siguiente secuencia, en la cual una de las cargas se hace desde la memoria y no desde un registro: load r1, ef ; cargar el registro r1 con el contenido de la dirección de memoria efectiva ef. move r3, r1 ; carga el registro r3 con el contenido de r1. Este esquema es menos efectivo en el caso de un cauce superescalar: las instrucciones independientes que se ejecutan durante la carga lo hacen probablemente en el primer ciclo de esta, dejan al procesador sin nada que hacer hasta que concluya la carga.
  • 10. Clave: Ejec. Capt. Decod. Escr. i0 i1 Sin dependencia Dependencia de datos(i1 i0 usa datos calculados por La figura anterior i1 10) i0 Dependencia relativa al i1/salto procedimiento i2 La presencia de saltos en una secuencia i3 i4 de instrucciones complica el i5 funcionamiento del cauce. Las instrucciones que siguen a una i0 Conflicto en los recursos (i0 e i1 i1 bifurcación (en la que se puede saltar o usan la misma unidad funcional) no) tienen una dependencia relativa al 0 1 2 3 4 5 6 7 8 9 procedimiento en esa bifurcación y no pueden ejecutarse hasta que se ejecute el Tiempo en ciclos base. salto. Ilustra el efecto de un salto en un cauce superescalar de grado 2. Si se usan instrucciones de longitud variable, surge otro tipo de dependencia relativa al procedimiento.
  • 11. Clave: Ejec. Capt. Decod. Escr. Un conflicto en un recurso es una pugna de dos o más i0 i1 Sin dependencia instrucciones por el mismo recurso al mismo tiempo. Desde el punto de vista del cauce segmentado,datos(i1conflicto en i0 Dependencia de un usa datos calculados por los recursos presenta el mismo comportamiento que una i1 10) dependencia de datos (figura anterior). No obstante, hay i0 Dependencia relativa al algunas diferencias. i1/salto procedimiento i2 i3 i4 i5 i0 Conflicto en los recursos (i0 e i1 i1 usan la misma unidad funcional) 0 1 2 3 4 5 6 7 8 9 Tiempo en ciclos base.
  • 12. Una instrucción S2 presenta una dependencia de salida respecto de S1 si y solo si S1 y S2 modifican el mismo recurso y S1 precede a S2 en el orden de ejecución. El siguiente ejemplo muestra una dependencia de salida: S1 x := 10 S2 x := 20
  • 13. Una instrucción S2 es antidependiente de S1 si y solo si S2 modifica un recurso que S1 lee y S1 precede a S2 en el orden de ejecución. El siguiente ejemplo muestra una antidependencia: S1 x := y + c S2 y := 10
  • 14. Una solución alternativa para alcanzar mayores prestaciones es la llamada supersegmentación, un término acuñado Una solución alternativa para en 1988. La supersegmentación aprovecha alcanzar mayores prestaciones el hecho de que muchas etapas del cauce es la llamada realizan tareas que requieren menos de supersegmentación, un término medio ciclo de reloj. De este modo, acuñado en 1988. doblando la velocidad de reloj interna se permite la realización de dos tareas en un ciclo de reloj externo.
  • 15. Clave: Ejec. Capt. Decod. Escr. Cauce sencillo de 4 Instrucciones Sucesivas etapas Supersegmentada Superescalar 0 1 2 3 4 5 6 7 8 9 Tiempo en ciclos base.
  • 16. Las dos realizaciones, supersegmentada y superescalar, ejecutan el mismo número de instrucciones en el mismo tiempo cuando funcionan de forma interrumpida. El procesador supersegmentado se queda atrás con respecto al procesador superescalar al comienzo del programa y en cada destino de un salto.
  • 17. Existe paralelismo en las instrucciones cuando las instrucciones de una secuencia son independientes y por tanto pueden ejecutarse en paralelo solapándose.
  • 18. Como ejemplo del concepto de paralelismo en las instrucciones, consideremos los dos siguientes fragmentos de código: Load R1  R2 Add R3  R3, “1” Add R3  R3, “1” Add R4  R3, R2 Add R4  R4, R2 Store [R4]  R0 Las tres instrucciones de la izquierda son independientes, y en teoría las tres podrían ejecutarse en paralelo. Por el contrario, las tres instrucciones de la derecha no pueden ejecutarse en paralelo porque la segunda instrucción usa el resultado de la primera, y la tercera instrucción usa el resultado de la segunda.
  • 19. El paralelismo en las instrucciones depende de la frecuencia de dependencias de datos verdaderas y dependencias relativas al procedimiento que haya en el código. Estos factores dependen a su vez de la arquitectura del repertorio de instrucciones y de la aplicación.
  • 20. El paralelismo de la máquina es una medida de la capacidad del procesador para sacar partido al paralelismo en las instrucciones. El paralelismo de la máquina depende del número de instrucciones que pueden captarse y ejecutarse al mismo tiempo (número de cauces paralelos) y de la velocidad y sofisticación de los mecanismos que usa el procesador para localizar instrucciones independientes.
  • 21. El procesador además tiene que ser capaz de identificar el paralelismo en las instrucciones y organizar la captación, decodificación y ejecución de las instrucciones en paralelo. En general, se puede decir que la emisión de una instrucción tiene lugar cuando ésta pasa de la etapa de decodificación del cauce a la primera etapa de ejecución.
  • 22. Esencialmente, el procesador intenta localizar instrucciones más allá del punto de ejecución en curso que puedan introducirse en el cauce y ejecutarse. Con respecto a esto, hay tres ordenaciones importantes: El orden en que se captan las instrucciones. El orden en que se ejecutan las instrucciones. El orden en que las instrucciones actualizan los contenidos de los registros y de las posiciones de memoria.
  • 23. Emisión en orden y Finalización Para optimizar la utilización de los en orden. diversos elementos del cauce, el procesador tendrá que alterar uno o más de estos órdenes con respecto al orden que se encontraría en una ejecución Emisión en orden y Finalización secuencial estricta. desordenada. En términos generales, podemos agrupar las políticas de emisión de instrucciones de los procesadores superescalares en las siguientes categorías: Emisión desordenada y Finalización desordenada.
  • 24. La política de emisión de instrucciones más sencilla es emitir instrucciones en el orden exacto en que lo haría una ejecución secuencial (emisión en orden) y escribir los resultados en ese mismo orden (finalización en orden). Ni siquiera los cauces escalares siguen una política ingenua. No obstante, es útil considerar esta política como base con la cual comparar otras aproximaciones más sofisticadas.
  • 25. Suponemos un cauce superescalar capaz de captar y decodificar dos instrucciones a la vez, con tres unidades funcionales independientes, y con dos copias de la etapa de escritura del cauce. El ejemplo supone las siguientes restricciones para un fragmento de código de seis instrucciones: • I1 necesita dos ciclos para ejecutarse. • I3 e I4 compiten por la misma unidad funcional. • I5 depende de un valor producido por I4. • I5 e I6 compiten por una unidad funcional.
  • 26. La finalización desordenada se usa en los procesadores RISC escalares para mejorar la velocidad de las instrucciones que necesitan ciclos. Con la finalización desordenada, puede haber cualquier número de instrucciones en la etapa de ejecución en un momento dado, hasta alcanzar el máximo grado de paralelismo de la máquina ocupando todas las unidades funcionales. La emisión de instrucciones se para cuando hay una pugna por un recurso, una dependencia de datos o una dependencia relativa al procedimiento.
  • 27. Aparte de las limitaciones anteriores, surge una nueva dependencia, a la cual nos referimos anteriormente como dependencia de salida. El siguiente fragmento de código ilustra esta dependencia (op representa cualquier operación): I1: R3  R3 op R5 I2: R4  R3 + 1 I3: R3  R5 + 1 I4: R7  R3 op R4
  • 28. La finalización desordenada necesita una lógica de emisión de instrucciones más compleja que la finalización en orden. Además, es más difícil ocuparse de las interrupciones y excepciones. Cuando ocurre una interrupción, la ejecución de instrucciones se suspende en el punto actual, para reanudarse posteriormente. El procesador debe asegurar que la reanudación tiene en cuenta que, en el momento de la interrupción, algunas interrupciones posteriores a la instrucción que provocó dicha interrupción pueden haber finalizado ya.
  • 29. Para permitir la emisión desordenada, es necesario desacoplar las etapas del cauce de decodificación y ejecución. Esto se hace mediante un buffer llamado ventana de instrucciones. Con esta organización, cuando un procesador termina de decodificar una instrucción, la coloca en la ventana de instrucciones. Mientras el buffer no se llene, el procesador puede continuar captando y decodificando nuevas instrucciones. Cuando una unidad funcional de la etapa de ejecución queda disponible, se puede emitir una instrucción desde la ventana de instrucciones a la etapa de ejecución. Necesite la unidad funcional particular que está disponible. Ningún conflicto ni dependencia la bloqueen.
  • 30. La política de emisión desordenada y finalización desordenada está sujeta a las mismas restricciones descritas anteriormente. Una instrucción no puede emitirse si viola una dependencia o tiene un conflicto. La diferencia es que ahora hay más instrucciones dispuestas a ser emitidas, reduciendo la probabilidad de que una etapa del cauce tenga que pararse. Además surge una nueva dependencia, a la que nos referimos antes como antidependencia. El fragmento de código considerado antes, ilustra esta dependencia: I1: R3  R3 op R5 I2: R4  R3 + 1 I3: R3  R5 + 1 I4: R7  R3 op R4
  • 31. Un método para hacer frente a este tipo de conflictos de almacenamiento se basa en una solución tradicional para los conflictos en los recursos: la duplicación de recursos Básicamente, el hardware del procesador asigna dinámicamente los registros que están asociados con los valores que necesitan las instrucciones en diversos instantes de tiempo.
  • 32. Esto indica que si la ventana de instrucciones es demasiado pequeña, las dependencias de datos impiden la utilización efectiva de las unidades funcionales adicionales; es importante que el procesador pueda mirar hacia delante bastante lejos en busca de instrucciones independientes que permitan aprovechar más el hardware
  • 33. PREDICCIÓN DE SALTOS Con el desarrollo de las máquinas superescalares, la estrategia de salto retardado ha perdido interés. El motivo es que hay que ejecutar múltiples instrucciones en el ciclo de retardo, lo que plantea varios problemas relacionados con las dependencia entre instrucciones. Por ello, las máquinas superescalares han regresado a las técnicas de predicción de saltos anteriores a las de los RISC. Algunas, como el PowerPC 601, usan una técnica sencilla de predicción de saltos estática. Los procesadores más sofisticados, como el PowerPC 620 y el Pentium 4, usan predicción dinámica de saltos basada en el análisis de la historia de los saltos
  • 34. EJECUCIÓN SUPERESCALAR Encolamiento de Emisión de instrucciones instrucciones Captación de Ejecución de Programa instrucciones y instrucciones Estático predicción de Reordenación y datos entrega de instrucciones
  • 35. IMPLEMENTACIÓN SUPERESCALAR Estrategias de captación de instrucciones que capten simultáneamente múltiples instrucciones, a menudo prediciendo los resultados de las instrucciones de salto condicional y captando más allá de ellas. Estas funciones requieren la utilización de múltiples etapas de captación y decodificación, y lógica de predicción de saltos. Lógica para determinar dependencias verdaderas entre valores de registros, y mecanismos para comunicas esos valores a donde sean necesarios durante la ejecución
  • 36. Mecanismos para iniciar o emitir múltiples instrucciones en paralelo. Recursos para la ejecución en paralelo de múltiples instrucciones, que incluyan múltiples unidades funcionales segmentadas y jerarquías de memoria capaces de atender múltiples referencias a memoria. Mecanismos para entregar el estado del procesador en el orden correcto.
  • 37. PowerPC 604: 6 unidades de ejecución independientes (1 unidad de procesamiento de saltos, 1 unidad de carga almacenamiento, 3 unidades de enteros, 1 unidad de punto flotante), emisión en orden. Renombrado de registros. Ejemplos Superescalares PowerPC620: Idem con emisión desordenada. Pentium: Emisión en orden y 3 unidades de ejecución independientes (2 unidades de enteros, 1 unidad de punto flotante).
  • 39. Conclusiones. Un procesador superescalar es aquél que usa múltiples cauces de instrucciones independientes. Cada cauce consta de múltiples etapas, de modo que puede tratar varias instrucciones a la vez. El hecho de que haya varios cauces introduce un nuevo nivel de paralelismo, permitiendo que varios flujos de instrucciones se procesen simultáneamente. Un procesador superescalar saca provecho de lo que se conoce como paralelismo en las instrucciones, que hace referencia al grado en que las instrucciones de un programa pueden ejecutarse en paralelo.