viernes, 7 de junio de 2013

Servidor Comercial de Alta Gama

SERVIDOR COMERCIAL DE ALTA GAMA
Sun Microsystems fue una empresa informática, proveedor multinacional de ordenadores software, hardware y servidores. Sun fue un defensor de los sistemas abiertos en general.
Sun fue adquirida en el año 2009 por Oracle Corporation, y desde entonces el hardware de Oracle y los ingenieros de software han trabajado codo con codo, para crear sistemas totalmente integrados y soluciones optimas diseñadas para alcanzar niveles de rendimiento altas que las industrias los requieran.
Oracle presento una serie de servidores desde las SPARC y la serie de SUN.
Los nuevos servidores SPARC nos entregan un máximo desempeño y valor extremos para las aplicaciones de base de datos y empresariales.
Servidores SPARC

SERVIDORES SPARC T5
Estos servidores están basados en procesadores SPARC T5, es actualmente el procesador más rápido del mundo. Estos nuevos servidores son las mejores plataformas del mundo para la informática, entrega el mejor valor para las aplicaciones de base de datos.
Los nuevos modelos comercializados son T5-1B, T5-2, T5-4, T5-8 y M5-32.
El procesador T5 está compuesto por 16 núcleos S3 fabricados a 28 nm, con capacidad para 8 hilos de ejecución. Estos 128 hilos a 3.6 Ghz por cada T5.

Los servidores SPARC T5 utiliza la arquitectura SPARC V9 (Scalable Processor Architecture) es una arquitectura que pertenece a RISC, es decir una arquitectura con un conjunto de instrucciones reducidas.     

Principales aplicaciones
·         Aplicaciones de negocios
·         Middleware (interactuar o comunicar entre con otras aplicaciones software, redes, etc).
·         Aplicaciones de seguridad
·         Servicios web
·         Base de datos y análisis

Arquitectura SPARC
La arquitectura SPARC (Arquitectura de Procesador Escalable) es una arquitectura RISC  big-edian, es decir una arquitectura con un conjunto reducido de instrucciones.
SPARC es la primera arquitectura RISC abierta, así otros fabricantes de microprocesadores pueden desarrollar su propio diseño.
Una de las ideas innovadoras de esta arquitectura es la ventana de registros que permite hacer fácilmente compiladores de alto rendimiento y una significativa reducción de memoria.   
La CPU SPARC compone de:
·         Unidad de Enteros (UE). Esta unidad contiene los registros de propósito general y a su vez controla todas las operaciones de procesador.
·         Unidad de punto flotante (UPF). Esta unidad tiene 32 registros de punto flotante de 32 bits, ahora para almacenar valores de doble o cuádruple  precisión utiliza 2 y 4 registros. una unidad entera, este es quien procesa la ejecución básica, y por otra parte una FPU (Floating Point Unit) que ejecuta las operaciones y cálculos.

Diagrama de un procesador SPARC


Principales características de la arquitectura SPARC:
·         Utiliza ventanas de registro
32 registros de “enteros” de 32 bits
16 registros de punto flotante de 64 bits para el caso de doble  precisión, también puede utilizar como 32 registros de 32 bits para el caso de precisión simple.  
·         Modos de direccionamiento: podemos mencionar los siguientes
Inmediato: constates de 13 bits
Directo: offset de 13 bits
Indirecto: registro + offset de 13 bits o registros + registro

·         Utiliza instrucciones retardadas
Saltos
Load
store
·         Manejo de memoria
Espacio de memoria de 4 Gigabytes
Unidad de manejo de memoria que trabaja con páginas de tamaño configurable.



Ventana de Registro SPARC

Arquitectura SPARC V9
Esta arquitectura SPARC V9 introdujo grandes cambios  relevantes a la arquitectura SPARC, ya que con este cambio puso a esta arquitectura en la a una altura altamente competitiva del mundo de los microprocesadores.
SPARC V9 extiende el espacio de direcciones a 64 bits, se añade nuevas instrucciones, compiladores optimizantés avanzados, implementaciones superescalares, Sistemas Operativos avanzados e incorpora otras mejoras significativas.
     

Ventajas de la arquitectura
·         Una de la ventajas que podemos mencionar es que con la ventana de registros se pueden realizar compiladores de alto rendimiento por otra parte reducir la memoria de instrucciones load store
·         Otra ventaja es que maneja esta arquitectura cerca de 50 instrucciones enteras que son:
Load y   Store
Instrucciones Aritméticas Lógicas
Operaciones del coprocesador
Instrucciones de control de transferencia
Instrucciones de control de registros Read/ Write

Descripción Técnica de la arquitectura SPARC
Características SPARC T5
·         SPARC T5 de Oracle utiliza el núcleo SPARC S3
·         10 Gigabit Ethernet
·         Microprocesadores SPARC T5 de 16 nucleos
·         Soportan hasta 128 hilos de ejecución
·         16 unidades de punto flotante por procesador SPARC T5
·         Configuración de Cache L2 es de 128KB
·         Cache L3 de 8 MB compartidos
·         Frecuencia desde 3.0 GHz a 3.60 GHz
·         4 controladores de memoria DDR3 con un ancho de banda de 12.8 GB/s cada uno soportando hasta 32 TB de memoria
·         Soporta el estándar  PCI Express 3.0 para funciones  I/O 
·         Núcleos del microprocesador fabricados en 28 nm.
·         Aceleración criptográfica integrada en el chip
·         Sistema operativo Oracle Solaris 10 y Oracle Solaris 11 


Microprocesador SPARC T5 de Oracle

Características RAS
·         Unidades de disco conectables en caliente
·         Fuentes de alimentación y ventilación redundantes intercambiables en caliente
·         El monitoreo ambiental
·         Correcciones de errores y comprobación de paridad de memoria

Medio ambiente
La temperatura en funcionamiento oscila entre 5 C a 35 C
La temperatura sin funcionamiento es de -40C a 65C
La humedad relativa de funcionamiento: 10% a 90%

Ruido Acústico
7.7 B en funcionamiento

Enfriamiento
4953 BTU/hr, 230 max cfm

Dimensiones y peso
Alto: 129,85 mm (5,11 in); 3U
Ancho: 436,5 mm (17,185 pulgadas)
Profundidad: 732 mm (28,82 pulgadas)
Peso: Aprox. 36,28 kg (80 libras). Máx., Sin kit de montaje en rack

Justificación
A diferencia de otros servidores el chip que gobiernan o controlan a estos nuevos servidores mejora la capacidad de procesos hasta cinco veces mayor con respecto a otros, por otra parte se puede mencionar que se reducen los costos entre un 50  a 70 por ciento.
Proporciona un escalamiento superior, rendimiento y tiempos de respuesta.
Brinda un alto nivel de seguridad donde no sacrifica el rendimiento de las aplicaciones.
Estos servidores SPARC  de la serie T entregan una mayor fiabilidad, disponibilidad y capacidad de servicio (RAS) de tipo mainframe



Servidor SPARC T5-4

lunes, 22 de abril de 2013

Arquitectura Vectorial vs RISC


Procesador vectorial.

Ventajas:
      - Disminuye el riesgo de dependencias de datos. El cálculo de resultados es independiente de los resultados anteriores, por lo que se puede aumentar en grado de segmentación sin generar dependencias de datos. La ausencia de riesgos es determinada por el compilador cuando decide usar instrucciones vectoriales.
      - Reducción del cuello de botella de Flynn. Una instrucción vectorial especifica una gran cantidad de trabajo (equivale a un bucle completo) por lo que ahorra ancho de banda de instrucciones.
     - Disminución de latencia en el acceso a memoria. Las instrucciones vectoriales que acceden a memoria tienen un patrón conocido (a menudo adyacentes). La alta latencia de iniciar un acceso a memoria principal se amortiza (en comparación con acceder a una caché) porque se inicia un acceso para el vector completo y no para un solo elemento del vector.
     - Disminución de las dependencias. Al sustituir todo un bucle por una operación vectorial, los riesgos de control que podrían surgir del salto del bucle son inexistentes.
      - Al vectorizar, cada dato es independiente del anterior, eso permite aumentar el pipeline y en consecuencia la frecuencia de reloj.




 Arquitectura Vectorial Básica

Máquina vectorial = Unidad escalar segmentada + unidad vectorial segmentada.
Existen dos tipos básicos:
1. Procesador vectorial memoria-memoria: (Ej: CDC)
Todas las operaciones vectoriales son de memoria a memoria (en desuso).
2. Procesador vectorial con registros. (Ej: CRAY-1, CRAY-2, X-MP, Y-MP, NEC SX/2, Fujitsu VP200, Hitachi S820, ConvexC1 y C2).
Todas las operaciones vectoriales (excepto las de load/store) operan con vectores en registros.







  
1º Registros Vectoriales: Cada registro vectorial es un banco de longitud fija que contiene un solo vector. DLXV tiene 8 registros vectoriales de 64 dobles palabras (32 bits). Dos accesos de lectura y uno de escritura para aumentar el grado de solapamiento.





2º Unidades funcionales vectoriales: Están totalmente segmentadas y pueden comenzar una operación nueva cada ciclo de reloj.
Hace falta una unidad de control para detectar riesgos:
-          Estructurales: conflictos en las unidades funcionales.
-          Dependencias de datos: conflictos sobre los accesos a registros.
3º Unidades load/store vectoriales: Carga y/o almacena vectores a/desde memoria. La unidad está segmentada para que las palabras puedan ser transferidas con un ancho de banda de una palabra por ciclo de reloj, después de una latencia inicial.
4º Registros escalares: Pueden proporcionar datos a las unidades vectoriales así como calcular direcciones para la unidad de load/store. En DLXV hay 32 de propósito general y 32 de coma flotante.




Tiempo de Arranque y Velocidad de Iniciación.

El tiempo de arranque depende de la latencia de las etapas de la operación vectorial. Es igual al número de etapas de la unidad funcional utilizada.
• Velocidad de iniciación es el tiempo por resultado una vez que la operación vectorial está en ejecución (normalmente uno).
• Tiempo total para completar la operación vectorial de longitud ‘n’ es:
ƒ tiempo de arranque + n · velocidad de iniciación


RISC


Computadoras con un conjunto de instrucciones reducido.

Arquitecturas RISC.

Buscando aumentar la velocidad del procesamiento se descubrió en base a experimentos que, con una determinada arquitectura de base, la ejecución de programas compilados directamente con microinstrucciones y residentes en memoria externa al circuito integrado resultaban ser mas eficientes, gracias a que el tiempo de acceso de las memorias se fue decrementando conforme se mejoraba su tecnología de encapsulado.
Debido a que se tiene un conjunto de instrucciones simplificado, éstas se pueden implantar por hardware directamente en la CPU, lo cual elimina el microcódigo y la necesidad de decodificar instrucciones complejas.
En investigaciones hechas a mediados de la década de los setentas, con respecto a la frecuencia de utilización de una instrucción en un CISC y al tiempo para su ejecución, se observó lo siguiente:
- Alrededor del 20% de las instrucciones ocupa el 80% del tiempo total de ejecución de un programa.
- Existen secuencias de instrucciones simples que obtienen el mismo resultado que secuencias complejas predeterminadas, pero requieren tiempos de ejecución más cortos.
Las características esenciales de una arquitectura RISC pueden resumirse como sigue:
Estos microprocesadores siguen tomando como base el esquema moderno de Von Neumann.
Las instrucciones, aunque con otras características, siguen divididas en tres grupos:
a)      Transferencia.
b)      Operaciones.
c)       Control de flujo.
Reducción del conjunto de instrucciones a instrucciones básicas simples, con la que pueden implantarse todas las operaciones complejas.
Arquitectura del tipo load-store (carga y almacena). Las únicas instrucciones que tienen acceso a la memoria son 'load' y 'store'; registro a registro, con un menor número de acceso a memoria.
Casi todas las instrucciones pueden ejecutarse dentro de un ciclo de reloj. Con un control implantado por hardware (con un diseño del tipo load-store), casi todas las instrucciones se pueden ejecutar cada ciclo de reloj, base importante para la reorganización de la ejecución de instrucciones por medio de un compilador.
Pipeline (ejecución simultánea de varias instrucciones). Posibilidad de reducir el número de ciclos de máquina necesarios para la ejecución de la instrucción, ya que esta técnica permite que una instrucción puede empezar a ejecutarse antes de que haya terminado la anterior.
El hecho de que la estructura simple de un procesador RISC conduzca a una notable reducción de la superficie del circuito integrado, se aprovecha con frecuencia para ubicar en el mismo, funciones adicionales:
Unidad para el procesamiento aritmético de punto flotante.
Unidad de administración de memoria.
Funciones de control de memoria cache.
Implantación de un conjunto de registros múltiples.
La relativa sencillez de la arquitectura de los procesadores RISC conduce a ciclos de diseño más cortos cuando se desarrollan nuevas versiones, lo que posibilita siempre la aplicación de las más recientes tecnologías de semiconductores. Por ello, los procesadores RISC no solo tienden a ofrecer una capacidad de procesamiento del sistema de 2 a 4 veces mayor, sino que los saltos de capacidad que se producen de generación en generación son mucho mayores que en los CISC.
Por otra parte, es necesario considerar también que:
La disponibilidad de memorias grandes, baratas y con tiempos de acceso menores de 60 ns en tecnologías CMOS.
Módulos SRAM (Memoria de acceso aleatorio estática) para memorias cache con tiempos de acceso menores a los 15 ns.
Tecnologías de encapsulado que permiten realizar más de 120 terminales.
Esto ha hecho cambiar, en la segunda mitad de la década de los ochentas, esencialmente las condiciones técnicas para arquítecturas RISC.

Principios de Diseño De Las Maquinas RISC

Resulta un tanto ingenuo querer abarcar completamente los principios de diseño de las máquinas RISC, sin embargo, se intentará presentar de una manera general la filosofía básica de diseño de estas maquinas, teniendo en cuenta que dicha filosofía puede presentar variantes. Es muy importante conocer estos principios básicos, pues de éstos se desprenden algunas características importantes de los sistemas basados en microprocesadores RISC.
En el diseño de una máquina RISC se tienen cinco pasos:
Analizar las aplicaciones para encontrar las operaciones clave.
Diseñar un bus de datos que sea óptimo para las operaciones clave.
Diseñar instrucciones que realicen las operaciones clave utilizando el bus de datos.
Agregar nuevas instrucciones sólo si no hacen más lenta a la máquina.
Repetir este proceso para otros recursos.
El primer punto se refiere a que el diseñador deberá encontrar qué es lo que hacen en realidad los programas que se pretenden ejecutar. Ya sea que los programas a ejecutar sean del tipo algorítmicos tradicionales, o estén dirigidos a robótica o al diseño asistido por computadora.
La parte medular de cualquier sistema es la que contiene los registros, el ALU y los 'buses' que los conectan. Se debe optimar este circuito para el lenguaje o aplicación en cuestión. El tiempo requerido, (denominado tiempo del ciclo del bus de datos) para extraer los operandos de sus registros, mover los datos a través del ALU y almacenar el resultado de nuevo en un registro, deberá hacerse en el tiempo mas corto posible.
El siguiente punto a cubrir es diseñar instrucciones de máquina que hagan un buen uso del bus de datos. Por lo general se necesitan solo unas cuantas instrucciones y modos de direccionamiento; sólo se deben colocar instrucciones adicionales si serán usadas con frecuencia y no reducen el desempeño de las más importantes.
Siempre que aparezca una nueva y atractiva característica, deberá analizarse y ver la forma en que se afecta al ciclo de bus. Si se incrementa el tiempo del ciclo, probablemente no vale la pena tenerla.
Por último, el proceso anterior debe repetirse para otros recursos dentro del sistema, tales como memoria cache, administración de memoria, coprocesadores de punto flotante, etcétera.
Una vez planteadas las características principales de la arquitectura RISC así como la filosofía de su diseño, podríamos extender el análisis y estudio de cada una de las características importantes de las arquítecturas RISC y las implicaciones que estas tienen.

Papel De Los Compiladores En Un Sistema Risc

El compilador juega un papel clave para un sistema RISC equilibrado.
Todas las operaciones complejas se trasladan al microprocesador por medio de conexiones fijas en el circuito integrado para agilizar las instrucciones básicas más importantes. De esta manera, el compilador asume la función de un mediador inteligente entre el programa de aplicación y el microprocesador. Es decir, se hace un gran esfuerzo para mantener al hardware tan simple como sea posible, aún a costa de hacer al compilador considerablemente más complicado. Esta estrategia se encuentra en clara contra posición con las máquinas CISC que tienen modos de direccionamiento muy complicados. En la práctica, la existencia en algunos modos de direccionamiento complicados en los microprocesadores CISC, hacen que tanto el compilador como el microprograma sean muy complicados.
No obstante, las máquinas CISC no tienen características complicadas como carga, almacenamiento y salto que consumen mucho tiempo, las cuales en efecto aumentan la complejidad del compilador.
Para suministrar datos al microprocesador de tal forma que siempre esté trabajando en forma eficiente, se aplican diferentes técnicas de optimización en distintos niveles jerárquicos del software.
Los diseñadores de RISC en la empresa MIP y en Hewlett Packard trabajan según la regla siguiente:
Una instrucción ingresa en forma fija en el circuito integrado del procesador (es decir, se alambra físicamente en el procesador) si se ha demostrado que la capacidad total del sistema se incrementa en por lo menos un 1%.
En cambio, los procesadores CISC, han sido desarrollados por equipos especializados de las empresas productoras de semiconductores y con frecuencia el desarrollo de compiladores se sigue por separado. Por consiguiente, los diseñadores de los compiladores se encuentran con una interfaz hacia el procesador ya definido y no pueden influir sobre la distribución óptima de las funciones entre el procesador y compilador.
Las empresas de software que desarrollan compiladores y programas de aplicación, tienden por razones de rentabilidad, a utilizar diferentes procesadores como usuarios de su software en lugar de realizar una optimización completa, y aprovechar así las respectivas características de cada uno. Lo cual también genera otros factores negativos de eficiencia. Esta limitación de las posibilidades de optimización del sistema, que viene dada a menudo por una obligada compatibilidad, se superó con los modernos desarrollos RISC.

domingo, 14 de abril de 2013

Algoritmo de Tomasulo


Algoritmo de Tomasulo

El algoritmo de Tomasulo es un algoritmo de planificación dinámica desarrollado en 1967 por Robert Tomasulo de IBM.
Se inventó para la IBM 360/91 cuando no existían las caches para permitir a un procesador ejecutar instrucciones fuera de orden. Este algoritmo difiere del algoritmo de la pizarra ("Scoreboard algorithm") en que este último no dispone de renombrado de registros. En su lugar, el algoritmo de Scoreboard (scoreboarding) resuelve los riesgos Escritura Después de Escritura (EDE o WAW) y Escritura Después de Lectura (EDL o WAR) deteniendo la ejecución, mientras que el algoritmo de Tomasulo permite el lanzamiento de dichas instrucciones. Además, el algoritmo de Tomasulo utiliza un bus de datos común en el que los valores calculados son enviados a todas las estaciones de reserva que los necesite. Esto permite mejorar la ejecución paralela de instrucciones en situaciones en las que el scoreboarding fallaría y provocaría la parada.
El algoritmo de Tomasulo está distribuido, y dividido en tres etapas:
  • Emisión: comprobación de riesgos estructurales por la estación de reserva
  • Ejecución: RAW, comprobación de riesgos estructurales por la UF
  • Escritura de resultados en el CDB: comprobación de riesgos estructurales por el CDB.

Etapas del Algoritmo Tomasulo



Tomasulo solo tiene que hacer frente a riesgos RAW porque evita los riesgos de nombre mediante el nombramiento de registro.

En la actualidad, gran parte de los procesadores hacen uso de variaciones de este algoritmo para la planificación dinámica de instrucciones.

Características:

  • Técnica de planificación dinámica de instrucciones con gestión distribuida. Inicialmente, en el IBM/360 (1967, Robert Tomasulo) era sólo para operaciones de FP. Hoy se aplica a todas las instrucciones, y la mayoría de procesadores avanzados llevan un algoritmo similar al clásico (estudiaremos el clásico pero para todo tipo de instrucciones, porque es el explicado en los libros generalmente).

  • Este algoritmo se puede aplicar a otro tipo de sistemas donde hay ciertos recursos compartidos por diversos agentes, y se quieren gestionar los recursos de forma distribuida. Evidentemente la implementación que veremos aquí es hardware.

  • Durante su ejecución provoca un reordenamiento dinámico en la ejecución (fase EX) de las instrucciones, aunque la emisión sigue siendo en el orden del código original.

  • Permite la ejecución de instrucciones no dependientes de otras anteriores (aunque estas últimas estén bloqueadas esperando por algún operando fuente).

  • Va a realizar un renombrado dinámico de registros para evitar riesgos por dependencias (WAR, WAW) entre instrucciones. Todos los registros de destino se renombran y el nuevo nombre que toman se llama etiqueta (tag)


Definiciones
En este algoritmo se ponen una serie de entradas en cada UF, llamadas estaciones de reserva RS. A éstas llegan las emisiones (IS) de instrucciones con toda la información de la misma, también llegan los valores de los operandos fuente, si han podido leerse, o  cierta información (etiqueta) que indica que operando falta (no se bloquea la cadena).

  • Estación de Reserva (Reservation Stations, R.S.): Lugar dónde esperan las instrucciones emitidas junto a las ALU’s (U.F.), hasta que pueden ejecutarse en la U.F. Esta espera se debe a la no disponibilidad de todos los operandos fuente (hay RAW: una instrucción anterior aún no ha generado algún operando). La R.S. tendrá una serie de campos para anotar el valor de los operandos fuente (y si es necesario el valor del resultado de la operación y la etiqueta asociada al registro destino).

  • Buffers de Memoria: Son las R.S. para instrucciones de carga/almacenamiento. Es el lugar dónde esperan los acceso a memoria emitidos hasta que disponen de todos sus operandos y el bus de memoria (caché) está libre. En el alg. clásico y en general, hay buffers separados para instrucciones de carga y para los de almacenamiento.


  • Bus Común de Datos (Common Data Bus, CDB): Une la salida de las unidades funcionales y la carga de memoria con el fichero de registros, las estaciones de reserva (y los buffers). Las UF mandan el dato de salida a través de él para que lo lean el resto de elementos de la CPU (es decir, se usa en la fase WB, produciéndose un bypass). Se trata de un recurso común por el que hay que competir. En general, las máquinas suelen tener más de un CDB (p.ej. uno para enteros y otro para FP) puesto que el número de WB por cada ciclo puede ser mayor que 1. Cualquier CDB tiene dos buses: uno para el resultado de una operación (32 líneas para INT/float, 64 para double) y otro para la etiqueta asociada al mismo (tamaño log2 del número de etiquetas).

  • Etiqueta (tag): Son identificadores que se asocian a los registros destino cada vez que se emite una instrucción.

Especificación de Arquitectura de Tomasulo

  • Campos de cada Estación de Reserva (según versión, algunos son prescindibles):
ü  Op: operación
ü  Qj, Qk: Etiqueta de los operandos j y k. Si está vacío, el operando está disponible.
ü  Vj, Vk: Valores de los operandos.
ü  Ocupado: Indica que la RS está en uso.
  • Buffer de LD:
ü  Dirección: para el acceso a memoria (etiqueta si oper. no disponible o valor oper.)
ü  Ocupado: Indica que el buffer está en uso.
  • Buffer de ST:
ü  Qi: Etiqueta de la RS que producirá el valor a almacenar en memoria.
ü  Dirección: para el acceso a memoria (etiqueta si oper. no disponible o valor oper.)
ü  Vi: valor a almacenar. Estará vacío cuando Qi esté lleno.
ü  Ocupado: Indica que el buffer está en uso.
  • Fichero de Registros FP. Cada registro tendrá la estructura:
ü  Qi: Etiqueta de la RS que producirá el valor a almacenar en el registro.
ü  Vi: valor del registro.
ü  Ocupado: Indica que el valor actual del registro no es válido (espera por el nuevo).

Tomasulo en procesadores actuales

En general los micros con planificación dinámica son capaces de emitir y ejecutar varias Instrucciones a la vez, y su arquitectura es muy potente.

  • Uno de los primeros microprocesadores con planificación dinámica fue Motorola PowerPC 620 (1995). Es un ejemplo muy bueno: su cadena (4 fases: IF ID IS EX) y arquitectura es muy similar al algoritmo clásico Tomasulo. Poseía unas pocas R.S. por cada UF.

Ø Dos unidades enteras simples (1 ciclo).
Ø Una unidad entera compleja (3 a 20 ciclos) para MULT y DIV enteras.
Ø Una unidad de carga-almacenamiento (1 ciclo si acierta en caché).
Ø Una unidad de punto flotante (31 ciclos DIVFP, 2 ciclos ADDFP y MULTFP).
Ø Y una unidad de saltos, que actualice BTB en caso de fallo de predicción.

  • Pentium Pro (su parte INT es idem que P.II, P.III y similar al P4). Su cadena es de 11 fases. Posee 40 R.S. comunes a todas las UF:
Ø  Dos unidades enteras (1 ciclo). Una de ellas se usan para saltos (actualiza BTB en caso de fallo de predicción). La otra se usa también para multiplicaciones y divisiones enteras.
Ø  Dos unidades FP para multiplicaciones y divisiones de punto flotante. Realmente solo puede empezar en el mismo ciclo una de ellas.
Ø  Una unidad de carga (1 ciclo).
Ø  Una unidad de almacenamiento más compleja (lleva un buffer MOB especial).

  • MIPS R10000 (similar a los actuales). Posee 16 R.S. para INT, 16 para FP y 16 para Ld-St:
Ø  Dos unidades enteras (una también sirve para saltos, y la otra para MULT INT).
Ø  Una unidad para cálculo de direcciones de acceso a memoria (para carga-almacenamiento).
Ø  Una unidad de punto flotante simple (sólo para ADDFP).
Ø  Una unidad de punto flotante compleja (DIV, MULT, SQRT-FP).

Ventajas Algoritmo Tomasulo

  • Disminución costes debido a dependencias de datos
  • Simplificación del compilador
  • Mismo código funciona bien en diferentes segmentaciones

Desventajas Algoritmo Tomasulo

  • Mayor complejidad hardware
  • Terminación fuera de orden à aparecen riegos WAR y WAW
  • Complica el tratamiento de las interrupciones 


Planificación Dinámica vs Estática

PLANIFICACION DINAMICA
PLANIFICACION ESTATICA
Complicación hardware
Menos hardware
Compilador no tiene que optimizar
Compilador más difícil
Trasparente al usuario
Posible problema de herencia (compilador debe conocer endoarquitectura)
El hardware extrae el rendimiento que puede en cada versión
Inconveniente: dependencia compilación – rendimiento
Tamaño de código estático no se toca
Tamaño de código estático puede crecer (mas fallos de cache)
Defecto: ventana de instrucciones limitada (Fase IF) (análisis local)
Ventaja: ventana de instrucciones infinita (análisis global )
En tiempo de ejecución se conoce más:
  • Valores de registro (dir: acceso)
  • Predicción dinámica, etc.
El compilador no puede conocer:
  • Valores de registros (dir acceso)
  • Predicción dinámica, etc.
No puede eliminar instrucciones
Puede eliminar instrucciones (de overhead u otras)
No necesita muchos registros de usuario
Puede necesitar muchos registros de usuario


Representantes comerciales de la arquitectura Superescalar

  • Nvidia (serie GeForce 6, )
  • Sun SPARC
  • AMD (AMD -K5-PR100)
  • INTEL (INTEL PENTIUM)


Bibliografía: