martes, 29 de abril de 2008
1.1.- INTRODUCCIÓN
En 1En 1987, Sun Microsystems anunció una arquitectura RISC abierta denominada SPARC (Scalable Processor ARChitecture, o en español Arquitectura de Procesador Escalable), la cual sería la base de futuros productos de la empresa.
Alrededor de media docena de distribuidores de SPARC obtuvieron la licencia para fabricar pastillas SPARC usando diferentes tecnologías (CMOS, ECL, GaAs, Arreglos de compuertas, VLSI, etc.). La intención fue alentar la competencia entre los distribuidores de pastillas, a fin de mejorar en el desempeño, reducir precios y hacer el intento de establecer la arquitectura SPARC como estándar en la industria.
La tecnología Sun, con respecto al SPARC, comenzó con una arquitectura de 32 bits, la cual es la que usan la mayoría de los procesadores fabricados actualmente, pero luego se expandió a una tecnología de 64 bits, lo cual significa el doble de tamaño de los registros y de bus de datos. Nosotros nos centraremos en la arquitectura inicial de Sun de 32 bits.
En primer lugar veremos como funciona el CPU SPARC, desde la longitud de sus buses hasta la codificación de sus instrucciones, haciendo referencia a sus registros y a la manera en que el Procesador accede a los mismos.
Luego estudiaremos cada una de sus instrucciones en detalle, y sus modos de direccionamiento, explicaremos como se distribuyen los bits en las mismas para los distintos modos de direccionar las instrucciones.
También veremos y daremos una breve explicación de cada una de las partes que compone al CPU SPARC.
1.1.1OBJETIVOS
Conocer la estructura y las partes de un CPU SPARC.
Comprender el funcionamiento del CPU SPARC.
Observar las diferencias que presenta el CPU SPARC, respecto con otros CPUs.
Conocer sus instrucciones y la estructura de las mismas
Observar las aplicaciones y usos del CPU SPARC.
Conocer las características mas relevantes de la arquitectura SPARC–V9
Conocer los soportes para procesadores superescalares de la arquitectura SPARC-V9
Conocer la tolerancia a fallas de la arquitectura
2.1.- SUN SPARC
SPARC (del inglés Scalable Processor ARChitecture) es una arquitectura RISC big-endian. Es decir, una arquitectura con un conjunto reducido de instrucciones.
ESPECIFICACIONES DE LOS MICROPROCESADORES SPARC
TABLA DE ESPECIFICACIONES DEL SUN ULTRA SPARCII
Core Frequency: 300 MHz |
Board Frequency: 100 MHz |
Clock Multiplier: 3.0 |
Data bus (ext.): 64 Bit |
Core Frequency: 300 MHz |
Board Frequency: 100 MHz |
Clock Multiplier: 3.0 |
Data bus (ext.): 64 Bit |
Address bus: 64 Bit |
Transistor: 5, 400,000 |
Circuit Size: 0.35 µ |
Voltage: 2.5 V |
Introduced: 1997 |
Manufactured: week 50/1999 |
Made in: USA |
L1 Cache: 16+16 KB |
L2 Cache: 4 MB ext. |
CPU Code: Blackbird |
Package Type: Ceramic |
Heat Spreader |
LGA-787 |
La empresa Sun Microsystems diseñó esta arquitectura y la licenció a otros fabricantes como Texas Instruments, Cypress Semiconductor, Fujitsu, LSI Logia entre otros.
SPARC es la primera arquitectura RISC abierta y como tal las especificaciones de diseño están publis, 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 en las instrucciones load/restore en relación con otras arquitecturas RISC. Las ventajas se aprecian sobre todo en programas grandes.
La cpu SPARC esta compuesta de una unidad entera, UI (Integer Unit) que procesa la ejecución básica y una FPU (Floating-Point Unit) que ejecuta las operaciones y cálculos de reales. La IU y la FPU pueden o no estar integradas en el mismo chip.
La arquitectura SPARC se ha definido con mucho cuidado para permitir la implantación de procesamiento en serie muy avanzado. Entre otros aspectos, define retardos en carga y almacenamiento, bifurcaciones, llamadas y retornos. La implantación típica tiene un procesamiento en serie de cuatro etapas (como se muestra en la siguiente figura). Durante el primer ciclo se extrae de la memoria la palabra de la instrucción; en el segundo se decodifica; durante el tercero se ejecuta; por último en el cuarto ciclo se escribe el resultado otra vez en la memoria.
Arquitectura Sparc de procesamiento en serie.
2.1.1.- PRINCIPALES CARACTERISTICAS
Su característica distintiva es utilizar ventanas de registros.
32 registros de enteros de 32 bits.
16 registros de punto flotante de 64 bits (para el caso de doble precisión) que se pueden utilizar como 32 registros de 32 bits (para precisión simple).
Modos de direccionamiento:
Inmediato, (constantes de 13 bits).
Directo, (offset de 13 bits).
Indirecto, (registro + offset de 13 bits o registro + registro).
Utiliza instrucciones retardadas (saltos, load y store).
Manejo de memoria:
Espacio virtual de 4 Gigabytes.
Unidad de manejo de memoria (MMU) que trabaja con páginas de tamaño configurable.
Otra característica importante de los procesadores SPARC es que son procesadores RISC (Computadora con reducido conjunto de instrucciones). Para que un procesador sea considerado RISC debe cumplir, entre otras cosas, que el tamaño de sus instrucciones no sea variable, y que en consecuencia estas se completen en un solo ciclo (entendiendo por ciclo la extracción de los operando de un registro, colocarlos en el bus, ejecutarlos en la ALU, y guardar el resultado en un registro).
2.1.2.- DESCRIPCIÓN DE SUS PARTES
Componentes
Un procesador SPARC comprende una Unidad de Enteros (UE), una Unidad de Punto Flotante (UPF) y un Co-Procesador opcional, cada uno de ellos con sus propios registros. Ésta organización permite una máxima coordinación entre la ejecución de instrucción de enteros, de punto flotante y de co-procesador. Todos los registros, con la posible excepción de los del co-procesador, tienen una longitud de 32 bits.
El procesador puede estar en uno de dos modos: usuario o supervisor. En el modo supervisor el procesador puede ejecutar cualquier instrucción, incluyendo aquellas privilegiadas (sólo-supervisor). En el modo de usuario, un intento de ejecutar una instrucción privilegiada causaría una trap (señal) al software supervisor.
Programas de tipo “Aplicación de usuario” son aquellos que se ejecutan mientras el procesador está en modo de usuario.
Diagrama de un procesador SPARC
A continuación se describen cada una de las partes que conforman a un procesador SPARC
Unidad de Enteros (UE)
La UE contiene los registros de propósito general y controla todas las operaciones del procesador. La UE ejecuta instrucciones aritméticas de enteros y computa direcciones de memoria para cargas y almacenamientos. También mantiene el contador de programa y controla la ejecución de instrucciones de la UPF y el CP. Una UE puede contener desde 40 hasta 520 registros r de propósito general de 32 bits cada uno. Esto corresponde a una agrupación de los registros en 8 registros r globales, más un stack circular de entre 2 y 32 sets de 26 registros cada uno, conocido como ventanas de registros.
Unidad de Punto Flotante (UPF)
La UPF tiene 32 registros de punto flotante de 32 bits cada uno. Para almacenar valores de doble precisión se utilizan 2 registros, y valores de cuádruple precisión ocupan un grupo de 4 registros adyacentes. En consecuencia, los registros de punto flotante pueden contener un máximo de 32 valores de simple precisión, 16 de doble precisión, u 8 de cuádruple precisión.
Las instrucciones de carga y almacenamiento en punto flotante son usadas para mover datos entre la UPF y la memoria. La dirección de memoria es calculada por la UE.
Co-Procesador (CP)
El Co-Procesador tiene su propio set de registros de normalmente 32 bits. Instrucciones de carga/almacenamiento del Co-Procesador son las que se usan para mover datos entre los registros del Co-Procesador y la memoria. Para cada instrucción de carga/almacenamiento de punto flotante, hay una instrucción de carga/almacenamiento del Co-Procesador análoga.
2.1.3.- CATEGORÍAS DE INSTRUCCIONES
La arquitectura SPARC tiene cerca de 50 instrucciones enteras, unas pocas más que el anterior diseño RISC, pero menos de la mitad del número de instrucciones enteras del 68000 de Motorola.
Las instrucciones de SPARC se pueden clasificar en cinco categorías:
LOAD y STORE (La única manera de acceder a la memoria). Estas instrucciones usan dos registros o un registro y una constante para calcular la dirección de memoria a direccionar.
Instrucciones Aritméticas/Lógicas/Shift. Ejecutan operaciones aritméticas, lógicas y operaciones de cambio. Estas instrucciones calculan el resultado si es una función de 2 operandos y guardan el resultado en un registro.
Operaciones del Coprocesador. La IU extrae las operaciones de punto flotante desde las instrucciones del bus de datos y los coloca en la cola para la FPU. La FPU ejecuta los cálculos de punto flotante con un número fijo en unidad aritmética de punto flotante, (el número es dependiente de la aplicación). Las operaciones de punto flotante son ejecutadas concurrentemente con las instrucciones de la IU y con otras operaciones de punto flotante cuando es necesario. La arquitectura SPARC también especifica una interfaz para la conexión de un coprocesador adicional.
Instrucciones de Control de Transferencia. Estas incluyen jumps, calls, traps y branches. El control de transferencia es retardado usualmente hasta después de la ejecución de la próxima instrucción, así el pipeline no es vaciado porque ocurre un control de tiempo. De este modo, los compiladores pueden ser optimizados por ramas retardadas.
Instrucciones de control de registros Read/Write. Estas instrucciones se incluyen para leer y grabar el contenido de varios registros de control. Generalmente la fuente o destino está implícito en la instrucción.
De este modo existen instrucciones para cargar y almacenar cantidades de 8, 16 ,32 y 64 bits, en los registros de 32 bits, usando en este último caso dos registros consecutivos.
Una diferencia de los procesadores CISC (Computadora con complejo conjunto de instrucciones) a los procesadores RISC es que una gran parte no poseen “stack”.
Dado que una de las características que se desea en un procesador es rapidez, debe tenerse en cuenta que las instrucciones que extraen sus operandos de los registros y almacenan los resultados también en ellos, se pueden manejar en un solo ciclo. Sin embargo, aquellas que cargan información desde la memoria o almacenan en ésta consumen demasiado tiempo. Es por ello que los procesadores RISC, incluyendo el SPARC, poseen una alta cantidad de registros internos de tal manera que las instrucciones ordinarias tienen operandos provenientes de los mismos
2.2.- VENTANAS DE REGISTROS
Un rasgo único caracteriza al diseño SPARC, es la ventana de overlapping de registros. El procesador posee mucho más que 32 registros enteros, pero presenta a cada instante 32. Una analogía puede ser creada comparando la ventana de registros con una rueda rotativa. Alguna parte de la rueda siempre está en contacto con el suelo; así al girarla tomamos diferentes porciones de la rueda, (el efecto es similar para el overlap de la ventana de registros). El resultado de un registro se cambia a operando para la próxima operación, obviando la necesidad de una instrucción Load y Store extras.
Se acordó para la especificación de la arquitectura, poder tener 32 registros "visibles" divididos en grupos de 8.
De r0 a r7, Registros GLOBALES.
De r7 a r15, Registros SALIDA.
De r15 a r23, Registros LOCALES.
De r24 a r31, Registros ENTRADA.
Los registros globales son "vistos" por todas las ventanas, los locales son solo accesibles por la ventana actual y los registros de salida se solapan con los registros de entrada de la ventana siguiente (los registros de salida para una ventana deben ponerse como registros de entrada para la próxima, y deben estar en el mismo registro).
El puntero de ventana mantiene la pista de cual ventana es la actualmente activa. Existen instrucciones para "abrir" y "cerrar" ventanas, por ejemplo para una instrucción "call", la ventana de registros gira en sentido anti horario; para el retorno desde una instrucción "call", esta gira en sentido horario.
Una interrupción utiliza una ventana fresca, es decir, abre una ventana nueva. La cantidad de ventanas es un parámetro de la implementación, generalmente 7 u 8.
La alternativa más elaborada para circundar lentamente la ventana de registros es colocar los registros durante el tiempo de compilación. Para lenguajes como C, Pascal, etc., esta estrategia es difícil y consume mucho tiempo. Por lo tanto, el compilador es crucial para mejorar la productividad del programa.
"Recientes investigaciones sugieren que la ventana de registros, encontradas en los sistemas SPARC pero no en otras máquinas RISC comerciales, están en condiciones de proveer excelente rendimiento para lenguajes de desarrollo como Lisp y Smalltalk." (R. Blau, P.Foley, etc. 1984).
2.2.1.- INSTRUCCIONES
Se puede utilizar LOAD y STORE en cualquiera de los dos formatos 1a y 1b, en los que DEST sería el registro a cargar o almacenar, los 19 bits de orden inferior de la instrucción determinan cómo se realiza el calculo de la dirección efectiva de memoria. Se proporcionan dos modos de direccionamiento (formatos 1a y 1b):
1- Dirección de memoria = ORG1 + ORG2
2- Dirección de memoria = ORG1 + constante de 13 bits con signo codificado en complemento a dos, perteneciente al rango de intervalo cerrado –4096, 4095.
Los 32 registros se pueden usar tanto como registros de origen o como de destino (ORG1 u ORG2)
Volviendo al problema sobre cómo colocar en cualquiera de ellos un valor de 32 bits si cualquier instrucción utiliza como máximo 32 bits, suponiendo que se desea colocar en el registro %4 el valor FFFF0000h. La instrucción debería utilizar algunos bits para codificar el 'móv.' y qué registro quiero utilizar con lo cual quedan menos de 32 bits para almacenar el CPU SPARC – 5 valores inmediatos FFFF0000h. La respuesta a la pregunta es claramente que no se puede realizar con una sola instrucción.
Dijimos que para realizar esta tarea el procesador SPARC provee una instrucción especial llamada SETHI que permite colocar un valor de hasta 22 bits en los 22 bits más significativos de algún registro. Y que utilizando la instrucción OR es posible colocar los 10 bits menos significativos de la constante en los 10 bits menos significativos del registro.
La forma de direccionar memoria utilizada por los procesadores SPARC es a través de registros y tiene la siguiente sintaxis: #desp13 (registro) o (1) (registro) (registro) (2).
Aquí desp13 es un número de 13 bits con signo codificado en complemento a 2, es decir que pertenece al rango [-4096,4095] y registro es cualquiera de los 32 registros del procesador.
La semántica de la expresión (1), es decir a qué dirección representa, está dada por:
(Registro)+desp13 y la semántica de la expresión (2) es (registro1) + (registro2) (registro) es el valor almacenado en el registro
2.2.2.- TRAPS Y EXCEPCIONES
El diseño SPARC soporta un set total de traps o interrupciones. Ellos son manejados por una tabla que soporta 128 interrupciones de hardware y 128 traps de software. Sin embargo las instrucciones de punto flotante pueden ejecutarse concurrentemente con las instrucciones enteras, los traps de punto flotante deben ser exactos porque la FPU provee (desde la tabla) las direcciones de las instrucciones que fracasan.
2.2.3.- PROTECCIÓN DE MEMORIA
Algunas instrucciones SPARC son privilegiadas y pueden ser ejecutadas únicamente mientras el procesador esta en modo supervisor. Estas instrucciones ejecutadas en modo protegido aseguran que los programas de usuario no sean accidentalmente alterados por el estado de la máquina con respecto a sus periféricos y viceversa. El diseño SPARC también proporciona protección de memoria, que es esencial para las operaciones multitarea.
El SPARC tiene muchas similitudes con el diseño de Berkeley, el RISC II. Semejante al RISC II, él usa una ventana de registros para reducir el número de instrucciones Load y Store.
2.3.-SPARC SEGÚN SUN MICROSYSTEMS
"Hasta hace poco, las arquitecturas RISC tenían una pobre rendimiento con respecto a los cálculos de punto flotante. Por ejemplo, el IBM 801 implementaba las operaciones de punto flotante por software. Los proyectos de Berkeley, RISC I y RISC II, dejaban fuera a una VAX 11/780 en cálculos enteros pero NO en aritmética de punto flotante.
Esto también es cierto para el procesador de Stanford, el MIPS. Los sistemas SPARC, en cambio, son diseñados para un rendimiento óptimo en los cálculos de punto flotante y soportan precisión simple, doble y extendida en los operandos y en las operaciones como lo especifica la norma 754 del ANSI/IEEE del estándar sobre punto flotante."
"El alto rendimiento en los cálculos de punto flotante resulta de la concurrencia de la IU y la FPU. La IU (Integer Unit) hace los "load" y "store" mientras la FPU (Floating Point Unit) ejecuta las operaciones y cálculos."
"Los sistemas SPARC consiguen obtener velocidades elevadas como resultado del perfeccionamiento en las técnicas de fabricación de los chips."
"El sistema SPARC entrega muy altos niveles de rendimiento. La flexibilidad de la arquitectura hace a los futuros sistemas capaces de obtener muchos mejores tiempos que el de la implementación inicial. Además, la arquitectura abierta hace esto posible por absorber los avances tecnológicos casi tan pronto como estos ocurren."
2.3.1.- IMPLEMENTACIONES
SPARC
Primera generación liberada en 1987.
Frecuencias de reloj de 16 a 50 Mhz.
Diseño escalar.
SUPER SPARC
Segunda generación liberada en 1992.
Frecuencias de reloj de 33 a 50 Mhz.
Diseño súper escalar.
ULTRA SPARC II
Lanzado a mediados de 1996.
Arquitectura súper escalar de 4 etapas y de 64 bits.
Cinco unidades de punto flotante.
Velocidades entre 250 y 300 Mhz.
Advanced Product Line (APL)
Lanzado a mediados de 2004.
Acuerdo comercial entre Sun Microsystems y Fujitsu
Arquitectura súper escalar compatible con en el diseño SPARC V9 de 64 bits.
Velocidades entre 1,35 y 2,7 GHz.
Utilizado por Sun Microsystems, Cray Research, Fujitsu / ICL y otros.
2.3.2.- Características Relevantes
Ultra SPARC IV a 1 GHz, 1.2 GHz
Diseño Chip MultiThreading
– Dual thread
– Subsistema de memoria mejorado
– Mayores características RAS a Actualización
– Pin-compatible con UltraSPARC III
Tecnología 130 nm, próxima generación UIV+90 nm a Hasta 2x mayor throughput que UltraSPARC-III
UltraSPARC III a 1 GHz, 1.2 GHz
Proceso de fabricación
– 29 millones de transistores
– L1 64 KB 4-way data cache, asociativa por conjuntos
– L1 32 KB 4-way instruction cache, asociativa por conjuntos
– Transistores de puerta de 100 nm
– 0.13u CMOS 6 Layer metal, cobre
a Controlador de memoria dentro del chip
– 2.4 GB/SEC ancho de banda a memoria por proc.
Etiquetas de caché externa L2 dentro del proc
– Chequeo de coherencia ejecutando a la veloc.
– 9.6 GB/sec ancho de banda de coherencia
Sun® UltraSPARC IV Processor
Tipo de arquitectura:
_ Chip multithreading (CMT) procesador con dos threads por procesador
_ Basado en dos UltraSPARC III popelines
_ Arquitectura de 64-Bit SPARC con Set de Instrucciones VIS
_ 66 millones de transistores
_ 4-vías superescalar
_ 14-stage nonstalling pipeline
Tecnología de procesos:
_ CMOS .13 micrones de procesos
_ 1368-pin flip-chip cerámico Land Grid Array (LGA)
Interconexión:
_ Sun Fireplane interconectado corriendo a 150 MHz.
Frecuencia:
_ Frecuencia Clock: 1.05 - 1.2 GHz
Cache:
_ L1 Cache (por pipeline): 64 KB 4-vías datos
32 KB 4-vías instrucciones
2 KB Write, 2 KB Prefetch
_ L2 Cache: 16 MB externos (exclusivo acceso a 8 MB por pipeline)
Controlador On-chip y tags de direcciones
Escalabilidad:
_ Escalabilidad de multiprocesamiento con soporte de arquitectura para más de 1000 procesadores/sistema.
Memoria:
_ Memoria Máxima: Subsistema de 16GB de memoria por procesador.
_ Controlador de Memoria: Controlador de memoria On-chip capaz de direccionar hasta 16 GB de memoria principal a 2.4 GB/s.
I/O:
_ Interfaz de Bus: Interconexión Sun Fireplane.
Alimentación:
_ Consumo de energía: Un máximo de 108 watts a 1.2 GHz, 1.35 volts.
Sistemas:
_ Desarrollado en:
Servidores Sun FIRE High-End
Servidor Sun FIRE E25K
Servidor Sun FIRE E20K
Servidores Sun FIRE Midframe
Servidor Sun FIRE E2900
Servidor Sun FIRE E4900
Servidor Sun FIRE E6900
Diagrama a bloques de la arquitectura UltraSPARC
3.1.- Arquitectura SPARC-V9
SPARC-V9 supuso un cambio realmente significativo a la arquitectura SPARC desde su lanzamiento en 1987 [1], poniendo a esta arquitectura en la cima del altamente competitivo mundo de los microprocesadores RISC [2]. SPARC-V9 extiende el espacio de direcciones a 64 bits, añade nuevas instrucciones, e incorpora algunas mejoras realmente significativas.
Se han implementado procesadores SPARC (Scalable Processor ARChitecture) usados en un amplio rango de computadores que abarca desde pequeñas consolas a supercomputadores [1]. SPARC-V9 mantiene la compatibilidad binaria para las aplicaciones software desarrolladas para implementaciones anteriores de SPARC, incluyendo microSPARC y SuperSPARC.
SPARC-V9, como su predecesor SPARC-V8, es una especificación de microprocesador creada por The SPARC Architecture Committee de SPARC International, por lo que cualquiera puede realizar una implementación del microprocesador y obtener una licencia de SPARC International. SPARC International es un consorcio de fabricantes de computadores, que permite la asociación a cualquier compañía del mundo.
SPARC-V9 mejora la versión 8, proporcionando soporte explícito para:
Direcciones y datos enteros de 64 bits.
Prestaciones de sistema mejoradas.
Compiladores optimizantes avanzados.
Implementaciones superescalares.
Sistemas operativos avanzados.
Tolerante a fallos.
Cambios de contexto y manejo de traps extremadamente rápido.
Admite ordenación de bytes big-endian y little endian.
SPARC-V9 soporta directamente direcciones virtuales de 64 bits y tamaños de datos enteros de hasta 64 bits, incorporando varias instrucciones que manejan de forma explicita valores de 64 bits. Por ejemplo, las instrucciones LDX y STX cargan y almacenan respectivamente valores de 64 bits.
3.1.1.- CARACTERISTICAS MAS RELEVANTES
A pesar de estos cambios, los microprocesadores de 64-bits SPARC-V9 podrán ejecutar programas compilados para procesadores SPARC-V8 de 32 bits. Esto se logra asegurando que las antiguas instrucciones continuan generando el mismo resultado en los 32 bits de menor orden de los registros. No obstante, y para aprovechar mejor la extensión de dirección y las capacidades avanzadas de SPARC-V9, es recomendable recompilar los programas escritos para SPARC-V8.
Para aumentar las prestaciones, el juego de instrucciones ha sido mejorado introduciendo las siguientes características:
Instrucciones de división y multiplicación enteras.
Instrucciones de LOAD y STORE de cuádruples palabras en coma flotante.
Predicción de saltos establecidos por software, lo que da al hardware una gran probabilidad de mantener el pipeline del procesador lleno.
Saltos condicionales en función del contenido de un registro, lo que elimina la necesidad de ejecutar una instrucción de enteros que actualice dicho código de condición. De esta forma, se elimina un cuello de botella potencial y se crean mayores posibilidades de paralelismo.
Instrucciones de move condicionales, que ayudan a minimizar saltos en el código de las aplicaciones.
SPARC-V9 contiene instrucciones específicas que permiten al hardware detectar solapamiento de punteros, ofreciendo al compilador una solución sencilla para este complejo problema. Pueden compararse dos punteros, y almacenar en un registro de enteros el resultado de la comparación. La instrucción FMOVRZ podría mover condicionalmente un registro de coma flotante basandose en el resultado de la comparación anterior.
Esta instrucción puede ser usada para corregir problemas de solapamiento, permitiendo adelantar las instrucciones LOAD tras los STORES. Todo esto supone una diferencia significativa en las prestaciones globales de los programas.
Se ha añadido un registro TICK que es incrementado una vez por cada ciclo de máquina. Este registro puede ser leido por una aplicación de usuario para realizar medidas simples y precisas de las prestaciones de un programa.
3.1.2.- SOPORTE PARA PROCESADORES SUPERESCALARES
En este apartado desarrollaremos todos aquellos puntos relacionados con las características superescalares de la arquitectura. SPARC sólo supone una serie de especificaciones a nivel arquitectural, pero no presupone una implementación determinada. De igual forma que SPARC-V8 incluye soporte para implementaciones segmentadas (aunque existen versiones sin segmentar), SPARC-V9 incluye soporte para el diseño de procesadores superescalares avanzados. La arquitectura SPARC-V9 esta eventualmente preparada para ejecutar de ocho a diesiseis instrucciones simultaneamente.
Muchos de los cambios añadidos para suportar más eficientemente la ejecución superscalar provienen de la experiencia ganada en la implementación del SuperSPARC&trade de Texas Instrument, y del HyperSPARC de Ross Technologie [1]. Ambos procesadores fueron implementaciones superescalares. Como resultado, SPARC-V9 incluye soporte para una decodificación sencilla, instrucciones de longitud fija, y unidades de enteros y coma flotante separadas, cosas que llevan por si mismas a tecnologías superescalares. Ademas, para el sistema de memoria, ha sido añadido una sofisticada instrucción de memoria que permite a los programadores especificar la mínima sincronización necesaria para
3.2.- UNIDAD DE PUNTO FLOTANTE (FPU)
La nueva arquitectura contiene 16 registros de coma flotante y doble precisión adicionales, lo que hace un total de 32 registros. Además, el soporte proporcionado por SPARC-V9 para el formato en coma flotante de 128 bits, es único en la implementación de microprocesadores.
SPARC-V9 soporta cuatro regisros de códigos de condición de coma flotante, tres más que SPARC-V8. Estos registros proporcionan el paralelismo necesario para procesadores superescalares que pueden ejecutar varias instrucciones de manera simultanea. Con un solo registro de códigos de condición, como en el caso del SPARC-V8, las instrucciones tenían serias dependencias, teniendo que esperar a que el único registro de códigos de condición se actualizase. Los nuevos registros de código de condición permiten a los procesadores SPARC-V9 iniciar hasta 4 comparaciones en coma flotante de manera simultanea.
3.3.- COMPILADORES OPTIMIZANTES AVANZADOS
El software de SPARC-V9 puede explicitamente realizar prebusqueda de datos e instrucciones [1] reduciendo la latencia de la memoria y en consecuencia acelerando ejecución de las aplicaciones. En lo casos en que los compiladores puedan generar código para realizar prebusqueda de datos e instrucciones con la suficiente anticipación, el dato estará disponible tan pronto como el programa lo necesite, lo que reducirá considerablemente las perdidas de cache y las paradas del pipeline.
SPARC-V9 también soporta LOADs sin fallos, lo que permite a los compiladores mover instrucciones LOAD antes de estructuras de control condicionales que vigilan su uso. La semántica de estos LOADs sin fallos es la misma que la de los otros LOADs, excepto que cuando ocurre un fallo no recuperable como pueda ser un error de ``dirección fuera de rango´´. Entonces, estos fallos son ignorados, y el hardware y el software del sistema operativo cooperan para aparentar una ejecución normal, retornando el valor cero.
Esta optimización es particularmente útil cuando se optimiza para procesadores superescalares. Por ejemplo, consideremos el siguiente fragmento de un programa en C:
if(p != NULL) x= *p + y;
Con LOADs sin fallos, la carga de *p puede ser desplazada hacia arriba por el compilador antes del chequeo de p!=NULL, permitiendo ejecuciones solapadas. En contraste, un LOAD normal habría abortado el programa en el caso de haberse realizado esta optimización y p ser igual a NULL. El efecto global es equivalente a esta transformación:
temp_register= *p;
if(p != NULL) x= temp_register + y;
Supongamos un procesador superescalar que pueda ejecutar cuatro instrucciones por ciclo, pero que sólo una de ellas pueda ser un LOAD o un STORE. En un bucle de ocho instrucciones que contenga dos LOADs, puede verse que sin esta transformación no sería posible distribuir ninguno de los LOADs en el primer grupo de cuatro instrucciones. En este caso, un tercer o posiblemente cuarto ciclo de reloj podría ser necesario para cada iteración del bucle, en lugar de los dos ciclos mínimos. Mejorar las oportinidades para una mejor distribución de las instrucciones podría haber mejorado las prestaciones en un factor de dos para este ejemplo. Una buena planificación (scheduling) de las intrucciones es un factor crítico en el rendimiento de las aplicaciones.
3.4.- SISTEMAS OPERATIVOS AVANZADOS
La interface con el sistema operativo ha sido completamente rediseñada en el SPARC-V8 para soportar mejor el desarrollo de nuevos sistema operativos. Los registros privilegiados o de supervisor proporcionan una estructura única, lo que simplifica el acceso a información de control importante del procesador. Es por esto por lo que un cambio en el interface del sistema operativo no tendrá efecto en el software de la aplicación. Los programas a nivel de usuario no verían estos cambios, y por lo tanto mantienen la compatibilidad binaria sin tener que ser recompilados.
Con el objetivo de soportar un nuevo estilo de microkernel, SPARC-V9 proporciona niveles de traps anidados que permiten una estructuración del código más modular, también proporciona un soporte mejorado para cambios de contexto más rapidos que los de la arquitectura SPARC anterior. Esto permite una estructura de ventanas de registros más flexible que en los primeros SPARC, ta que el kernel puede proporcionar un banco de registros separados a cada proceso que se esté ejecutando. Como resultado, el procesador puede realizar un cambio de contexto sin practicamente ninguna sobrecarga. Esta nueva implementación de las ventanas de registros también proporciona un mejor soporte para sistemas operativos orientados a objeto, ya que acelera la comunicación de procesos entre dominios diferentes.
Existe también un mecanismo que proporciona accesos a servidor eficientes a través de espacios de direcciones de clientes usando identificadores de espacio de direcciones de usuarios. La definición de un núcleo de espacio de direcciones permite al sistema operativo existir en un espacio de direcciones diferente que el del programa de usuario.
Las primeras implementaciones de SPARC soportaban multiproceso; este soporte ha sido ahora extendido a multiproceso a muy alta escala. Esta estensión incluye una nueva instrucción de memoria y un nuevo modelo de memoria llamado Relax Memory Order (RMO). Con estas nuevas capacidades, los procesadores SPARC-V9 pueden planificar las operaciones de memoria para alcanzar mayores prestaciones al tiempo que mantienen la sincronización y el bloqueo de operaciones necesario para el multiproceso con memoria compartida.
Finalmente, se ha añadido soporte arquitectural para ayudar al sistema operativo a proporcionar ventanas de registros ``limpias´´ a sus procesos. Se ha de garantizar que una ventana limpia contenga inicialmente ceros y, durante su periodo de vida, sólo datos y direcciones generadas por el proceso. De esta forma se facilita la implementación de un sistema operativo seguro que pueda proporcionar un aislamiento completo entre sus procesos.
3.5.- TOLERANCIA A FALLOS
La mayoria de las arquitecturas de procesadores existentes no proporcionan soporte explicito para fiabilidad y tolerancia a fallos. Aunque los diseñadores de sistemas pueden construir una máquina segura y tolerante a fallos, si se proporciona dicho soporte a nivel del procesador se simplifica el diseño y se obtiene un menor coste global del sistema
Para alcanzar este objetivo se ha añadido una instrucción de ``compara-y-cambia-el-contexto´´ que tiene unas propiedades de tolerancia a fallos bien conocidas. Asimismo también posee el beneficio añadido de proporcionar un modo eficiente de conseguir sincronización multiprocesador.
La incorporación de múltiples niveles de traps anidados permiten a los sistemas recobrarse limpiamente de varias clases de fallos, ademas de soportar más eficientemente diversos manejadores de interrupciones.
Finalmente, SPARC-V9 incluye un nuevo estado de procesador especial llamado RED_state (Reset Error and Debug state). Su propio nombre define el comportamiento esperado cuando el sistema se enfrenta a errores graves, o durante el proceso de reset cuando esta volviendo a dar servicio. Este nivel de robustez es una necesidad absolutamente necesaría cuando construimos sistemas tolerantes a fallos.
3.6.- RAPIDEZ EN LOS CAMBIOS DE CONTEXTO Y TRATAMIENTO DE LOS TRAPS
El mecanismo de entrada de los traps ha sido rediseñado para transferir rapidamente el control al manejador de traps. Se han añadido ocho nuevos registros llamados ``globales alternativos´´ que suministran al manejador de traps registros disponibles para ser usados de forma inmediata. Más aún, el software manejador de traps no necesita registros de almacenamiento antes de empezar su ejecución. Esto permite una emulación muy rapida de instrucciones y un tiempo de respuesta a interrupciones extremadamente corto.
Como ya se ha comentado, SPARC-V9 soporta multiples niveles de traps anidados, lo que permite al manejador de traps generar a su vez un nuevo trap. Algunos manejadores de traps han visto reducido su código de cien instrucciones a poco menos de veinte (los manejadores de traps del SPARC-V8 no podían generar a su vez otros traps). Esta característica, ademas de mejorar notablemente el rendimiento, permite el diseño de sistema operativos mucho más simples.
El número de registros almacenados y restaurados entre la ejecución de procesos también ha sido reducido, proporcionando un cambio de contexto más rápido. La arquitectura proporciona bits de ``usado´´ separados para los registros de coma flotante originales (los bajos) y los nuevos (los superiores). Si un programa no ha modificado ningún registro en alguno de estos conjuntos, no habrá necesidad de salvar dicho conjunto durante el cambio de contexto.
3.7.- Ordenaciones big y little-endian
Recordando que la familia SPARC es tradicionalmente big-endian, también se ha dado soporte para datos creados en procesadores littel-endian tales como los de la familia 80x86. La arquitectura permite tanto al código de usuario como al de supervisor acceder explícitamente a datos con ordenamiento littel-endian. También es posible cambiar el ordenamiento de bytes por defecto a littel-endian, sólo en modo usuario, sólo en modo supervisor, o en ambos modos. Esta capacidad permite al SPARC-V9 soportar sistemas mixtos de ordenamiento de bytes.
CONCLUSIÓN
En general la arquitectura Sparc esta diseñada por la empresa Sun Microsystems y sus especificaciones están abiertas para que cualquier otro fabricante realice su propio diseño.
Una de las ventajas de esta arquitectura es que con la ventana de registros se pueden realizar compiladores de alto rendimiento y reducir la memoria en intrucciones load/restore, ademas esta arquitectura cuenta con cerca de 50 instrucciones enteras que son :
Load y store
Instrucciones Aritméticas/Lógicas/Shift
Operaciones del Coprocesador
Instrucciones de Control de Transferencia
Instrucciones de control de registros Read/Write.
En cuanto a la empresa Sun Microsystems a parte de ser la diseñadora de la arquitectura SPARC, a dado licencia a otros fabricantes como Texas Instruments, Cypress Semiconductor, Fujitsu, LSI Logic entre otros. Esta empresa ha dividido su estrategia de desarrollo en tres áreas; diseño de procesadores, tecnología de procesos y arquitectura de conjunto de instrucciones.
Finalmente, la arquitectura sparc-v9 fue la que coloco a la arquitectura sparc en general en la cima del mundo competitivo de los microprocesadores extendiendo el espacio de direcciones a 64 bits, con nuevas instrucciones, etc.
A pesar de que el espacio de direcciones de esta arquitectura sea de 64 bits puede ejecutar programas compilados para microprocesadores de 32 bits
APÉNDICE A
CREDITO DE LAS IMÁGENES.
La imagen Sun Ultra SPARCII Microprocessor
A continuación se presentan los datos de Sun Ultra SPARCII Microprocessor en las que se mencionan su origen y licencia.
Éste es un fichero de Wikimedia Commons, un depósito de contenido libre hospedado por la Fundación Wikimedia.
Más abajo se reproduce su página de descripción con la información sobre su origen y licencia.
Descripción: Sun Ultra SPARCII Microprocessor
Source: http://www.cpu-collection.de/?l0=i&i=1999&sd=1 (own website)
Photographer: Dirk Oppelt
BIBLIOGRAFÍA.
www.sun.com
www.monografías.com
http://web.frm.utn.edu.ar/arquitectura2
http://www.dcc.uchile.cl/~rbaeza/cursos/proyarq/mroco/page3.htm
http://www.alegsa.com.ar/Dic/sparc.php
TANENBAUM, Andrew. Organización de Computadoras: Un Enfoque Estructurado.
Editorial Prentice Hall, 1992, Tercera Edición
Suscribirse a:
Entradas (Atom)