sparc

11
SPARC Y PARALELISMO SPARC (del inglés Scalable Processor ARChitecture) es una arquitectura RISC big-endian. Es decir, una arquitectura con un conjunto reducido de instrucciones. 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. 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. Unidad de Punto Flotante (UPF o FPU) 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. 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

Upload: francisco-reina

Post on 28-Dec-2015

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sparc

SPARC Y PARALELISMO

SPARC (del inglés Scalable Processor ARChitecture) es una arquitectura RISC big-endian. Es decir, una arquitectura con un conjunto reducido de instrucciones.

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.

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.

Unidad de Punto Flotante (UPF o FPU)

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.

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.

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

Page 2: Sparc

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

Concepto de Thread

Un Thread (que de una forma un poco 'basta' se puede traducir como hilo) es la unidad básica de ejecución. Cualquier programa que se ejecute consta de, al menos, un thread.

Un thread se puede considerar como la agrupación de un trozo de programa junto con el conjunto de registros del procesador que utiliza y una pila de máquina. El conjunto de los registros y de la pila de cada thread se denomina contexto. Como sabemos, en un Sistema Operativo multitarea, la CPU se reparte entre cada programa a ejecutar. Para ser más precisos, el S.O. reparte la CPU entre todos los threads a ejecutar en cada momento (pues un programa puede contener varios threads), simplemente adueñándose de esta y saltando al siguiente.

¿Qué es Multihilo simultaneo SMT?

Simultaneous Multithreading (SMT)

Multihilo simultáneo (SMT) es una técnica para mejorar la eficiencia global de las CPUs superescalares con multihilo de hardware. SMT permite múltiples hilos de ejecución independientes para utilizar mejor los recursos proporcionados por las modernas arquitecturas de procesador.

Multithreading es similar en concepto a multitarea, pero se implementa a nivel de hilo de ejecución en procesadores superescalares modernos.Multithreading simultáneo (SMT) es una de las dos implementaciones principales de Multithreading, la otra forma de ser Multithreading temporal. En multihilo temporal, sólo un hilo de instrucciones puede ejecutar en cualquier

Page 3: Sparc

etapa de canalización determinada en un momento. En Multithreading simultáneo, instrucciones de más de un hilo puede estar ejecutando en cualquier fase de canalización dada en un momento. Esto se hace sin grandes cambios en la arquitectura básica del procesador: las principales adiciones necesarias son la capacidad para ir a buscar instrucciones de múltiples hilos en un ciclo, y un archivo de registro grande para contener los datos de varios subprocesos. El número de subprocesos simultáneos puede ser decidido por los diseñadores de chips, pero las restricciones prácticas sobre la complejidad de chips han limitado el número a dos para la mayoría de las implementaciones de SMT.

Debido a que la técnica es realmente una solución de eficiencia y hay un aumento de los conflictos inevitables en los recursos compartidos, la medida o ponerse de acuerdo sobre la eficacia de la solución puede ser difícil.

Algunos investigadores han demostrado que los temas adicionales se pueden utilizar para sembrar de manera proactiva un recurso compartido como un caché para mejorar el rendimiento de otro hilo único, y afirman que esto demuestra que SMT no es sólo una solución de eficiencia. Otros utilizan SMT para proporcionar computación redundante, para un cierto nivel de detección de errores y recuperación.

Sin embargo, en la mayoría de los casos actuales, SMT es acerca de cómo ocultar la latencia de memoria, aumentar la eficiencia y aumentando el rendimiento de los cálculos por cantidad de hardware que se utiliza.

Desde el punto de vista del hardware, implementación SMT requiere la duplicación de todas las partes del procesador que almacenan el "Estado de ejecución" de cada hilo - cosas como el contador de programa, los registros arquitectónicamente visibles (pero no los registros de cambio de nombre), la memoria asignaciones a cabo en el TLB, y así sucesivamente. Por suerte, estas piezas constituyen sólo una pequeña fracción de hardware del procesador general. Las piezas muy grandes y complejos, como los decodificadores y la lógica de despacho, las unidades funcionales y los cachés, son compartidos entre los hilos.

Por supuesto, el procesador también debe llevar un registro de lo que las instrucciones y que cambie el nombre de los registros pertenecen a la que se enrosca en un momento dado en el tiempo, pero resulta que esto sólo agrega una pequeña cantidad a la complejidad de la lógica de la base. Así, para el coste de diseño relativamente barato de alrededor de 10% más lógica en el núcleo (y un aumento de casi insignificante en cuenta del transistor total y coste de producción final), el procesador puede ejecutar varios hilos simultáneamente, es de esperar que resulta en un aumento sustancial de la unidad funcional utilización y instrucciones por ciclo de reloj (y rendimiento por lo tanto en general).

El flujo de instrucciones de un procesador SMT se ve algo como

Page 4: Sparc

¿Qué es un procesador CMT?

Los procesadores CMT (Chip Multithreading Technology) son el resultado de la implementación de la estrategia de paralelización de las instrucciones en un procesador. Hasta ahora los procesadores implementaban una técnica de paralelización llamada ILP (Instruction level Parallelism), los procesadores CMT dan un paso más al paralelizar los hilos de ejecución, lo que supone que varios procesos estarán ejecutando instrucciones, que no tienen dependencias, al mismo tiempo, esta técnica se llama TLP (thread Level Parallelism).El TLP se basa en utilizar los tiempos de espera del procesador para ejecutar instrucciones de otros hilos, al ser hilos independientes, no existe dependencia en la ejecución de las instrucciones, produciéndose una paralelización real, frente a la técnica de ILP que está sujeta a las dependencias que existan entre las instrucciones que se intentan paralelizar.Cuando un procesador CMT ejecuta una instrucción que requiere un dato de memoria, el procesador lanza la petición a memoria, la mayoría de los procesadores estarían esperando hasta que la memoria devolviese el dato, pero un procesador CMT no se queda en un estado de espera, sino que la unidad de control de instrucción switchea a la instrucción de otro proceso y lanza una instrucción de este segundo proceso, dependiendo del número de threads que pueda manejar el procesador, podremos tener más o menos threads ejecutándose simultáneamente. Como podemos ver, los procesadores que implementen TLP, utilizan de forma más eficiente el tiempo de procesador.

El TLP Puede ser dividido en múltiples hilos de grano fino o de múltiples hilos de grano grueso dependiendo de la frecuencia de problemas intercalados. De grano fino - Multithreading, como en un barril de procesador - da instrucciones para los diferentes procesos después de cada ciclo, mientras que el Multithreading de grano grueso sólo cambia para dar instrucciones desde otro subproceso cuando el subproceso de ejecución actual hace que algunos eventos de latencia (como error de página, etc.). Sun UltraSPARC T1 utiliza Multithreading de grano fino.

CMT no es la solución para todos nuestros problemas.

Todo no van a ser ventajas en los procesadores CMT, también presentan algunos inconvenientes, el más importante, es el posible cuello de botella en el acceso a la memoria, los distintos cores que forman el procesador estarán compitiendo por el acceso a la memoria. Un buen diseño en la jerarquía de

Page 5: Sparc

caches permitirá un aumento en el número de aciertos y por lo tanto una reducción del tiempo empleado para acceder a la memoria.El problema del cuello de botella en el acceso a la memoria se acentúa en aplicaciones que realizan un uso intensivo de la memoria, como pueden ser las BBDD, en este tipo de aplicaciones, los cores del procesador estarían constantemente intentando acceder a memoria, ya que los aciertos de cache serían demasiado bajos.

UltraSPARC-T1 ("Niagara") que proporciona 8 núcleos cada uno con SMT 4 hilos, para un total de 32 threads en un solo chip. Esto se aumentó posteriormente a 8 hilos por núcleo en UltraSPARC-T2, y luego 16 núcleos en UltraSPARC-T3, por la friolera de 128 hilos!

UltraSPARC T1

Cores 8Threads/core 4FPU 1:8L1 inst. 16KBL1 datos 8KBL2 3MB, 12-wayL3 NAi-TLB 64 FAd-TLB 64 FA

El procesador UltraSPARC T1 es el primero de la familia de procesadores T, los cuales se basan en tecnología CMT. El US T1 tiene hasta 8 cores, cada uno de los cuales puede trabajar con 4 threads, lo que hacen un total de 32

Page 6: Sparc

threads en ejecución. Presenta dos inconvenientes, el primero es que todos los cores comparte una única unidad de coma flotante lo que puede suponer un problema para entornos científicos o aplicaciones que hagan uso de este tipo de operaciones. El segundo inconveniente es que el procesador US T1, únicamente está montado en máquinas monoprocesadoras, esto nos obliga a que el crecimiento de la infraestructura sea únicamente en horizontal.

UltraSPARC T2

Cores 8Threads/core 8FPU 1:1L1 inst. 16KBL1 datos 8KBL2 4MB, 16-wayL3 NAi-TLB 64 FAd-TLB 128 FA

El UltraSPARC T2, es la segunda generación de la familia de procesadores US T, como mejoras frente a su antecesor el US T1podemos destacar, que se ha aumentado el número de threads con lo que puede trabajar un core, se ha pasado de 4 a 8 threads. También podemos destacar que cada core tiene su propia unidad de coma flotante, esto permite eliminar la limitación del US T1 con respecto a las operaciones de coma flotante. El US T2 presenta un rendimiento muy bueno para aplicaciones en coma flotante. También se ha aumentado el tamaño de la memoria cache L2, ahora es de 4MB y se ha duplicado el tamaño de la d-TLB, hasta las 128 posiciones.Como inconvenientes podemos comentar que el procesador US T2 solo se monta en máquinas monoprocesadoras, lo que limita el tipo de crecimiento HW a un crecimiento horizontal, esta limitación provoca que sea un procesador para entornos de entrada, tales como servidores web, servidores de correo, etc. Puede funcionar para la capa de aplicación, siempre que las aplicaciones permitan crecer horizontalmente. Podemos descartar a este procesador, sobre todo por su limitación de crecimiento horizontal, para entornos de BBDD.Nivel Entrada Aplicación Datos

Page 7: Sparc

Valoración Muy Buena Muy Buena Regular

UltraSPARC T2 plus

Cores 8Threads/core 8FPU 1:1L1 inst. 16KBL1 datos 8KBL2 4MB, 16-wayL3 NAi-TLB 64 FAd-TLB 128 FA

El procesador UltraSPARC T2+ es una evolución del US T2 hacia un procesador que pueda ser utilizado en arquitecturas SMP. La única diferencia que hay entre el US T2+ y el US T2, es que el US T2+ dispone de un elemento entre la cache L2 y el controlador de memoria llamado Coherence Unit que permite conectar varios procesadores US T2+.

Coherence Unit

El Coherence Unit se encarga de mantener coherencia entre las caches L2 de varios procesadores UltraSPÂRC T2+. Su función es sencilla, cuando se realiza una petición al controlador de memoria, lanza esta misma petición contra el CU del otro procesador, para comprobar si el segundo procesador tiene almacenado el dato en su cache L2, si el dato está en la cache L2 de segundo procesador, la CU lo envía al primer procesador, evitando de esta forma, tener que esperar a que el dato venga de la memoria principal, mucho más lenta que la memoria L2.

Datos de UltraSparc T2+

Page 8: Sparc

Cada grupo de hilos tiene su propio ALU privada, que también se utiliza tanto para la generación de direcciones y más cálculo. Casi todas las instrucciones que se emiten directamente a la ALU, pero las operaciones de punto flotante y la memoria fluirán a través de sus respectivas unidades de ejecución. Cada uno comparte un solo núcleo y una FPU LSU entre los 8 hilos. La FPU es alimentada por un banco de registros de 64 bits 256 de entrada, con 32 registros por hilo. 

El SPU es un coprocesador criptográfico que opera a la frecuencia del núcleo completo. El SPU maneja algoritmos criptográficos comunes tales como SHA, MD5, AES, DES, etc Contiene una unidad aritmética modular (MAU), una unidad de cifrado y un motor DMA para acceder a la memoria. El MAU comparte multiplicador de la FPU y se utiliza para RSA y cálculos de la curva binarios y enteros modulares polinomicos elípticos. La MAU utiliza una entrada 160 bloc de 64 bits que pueden sostener dos lecturas y una escritura por ciclo para el almacenamiento. El ancho de banda de la unidad y el hash cifrado se ha diseñado para que coincida con 10 controladores Ethernet Gigabit duales de Niagara II, lo que permite "libre de cifrado". 

El T2 centra el paralelismo a nivel de la memoria, la parte más importante es el subsistema de memoria, sobre todo la unidad de carga Store (LSU), caché L1D, la caché L2 y la memoria principal. Niagara II mantiene hasta 4 tablas de páginas, cada una de ellas el apoyo a 8K, 64KB, 4 MB o 256 MB de páginas, todo lo cual puede ser almacenado en caché por el ITLB y DTLB. Traducción de direcciones de memoria para la LSU es manejado por la entrada 128, por tanto la instrucción y la TLB de datos son accesibles en la página de hardware tabla walker, que es otra nueva adición a la microarquitectura de T2. La tabla de la página andador puede buscar las 4 tablas de páginas en tres modos diferentes; secuencialmente, en paralelo, o de acuerdo con una predicción basada en la dirección virtual de los datos solicitados.