Posts Tagged ‘CPU’

General, Informática Núcleo OpenSPARC T1

0 Comments

El núcleo o “core” OpenSPARC T1 forma parte del procesador OpenSPARC T1.

Diagrama de bloques de alto nivel del núcleo

Diagrama de bloques de alto nivel del núcleo

El núcleo OpenSPARC contiene el hardware necesario para soportar cuatro hilos de ejecución. Este soporte consiste en un conjunto de todos los registros (con ventanas de 8 registros) por hilo, con la mayoría de los identificadores de espacio de direcciones (ASI), registros de estado auxiliares (ASR) y registros privilegiados replicados por hilo. Los cuatro hilos comparten las cachés de instrucción y de datos y los TLBs. Cada caché de instrucción es de 16 Kbytes con un tamaño de 32 bits por línea. Los TLB incluyen una funcionalidad de automapeo que permite a los múltiples hilos actualizar la TLB sin bloquear.

Cada núcleo SPARC tiene solo un tipo de pipeline de seis fases o etapas.

También dispone de las siguientes unidades:

1. La unidad Fech-Instruction (lectura de instrucción) (IFU), que incluye un sistema de cache de instrucción (Se encarga de gestionar los pc´s de los procesos, la cache L1).

2. La unidad de ejecución (EXU) incluye las fases de ejecución del pipeline.

3. La unidad Load/store (LSU) incluye etapas de memoria, write-back, y un sistema de cache de datos.

4. La unidad lógica Trap (TLU).

5. La unidad de procesamiento de flujo (o “stream”) (SPU) es usada para funciones de aritmética modular para criptografía.

6. La unidad de gestión de memoria (MMU).

7. La unidad frontend Floating- point (FFU).

Aquí explicaremos cada una de ellas.

1. IFU – Unidad de búsqueda de instrucción (Instruction Fetch Unit)

La política de selección de hilos (o “threads”) es como sigue: una elección entre los hilos disponibles cada ciclo siguiendo la prioridad del hilo menos reciente ejecutado. Los hilos se vuelven no disponibles debido a las largas latencias de operaciones como cargas, multiplicaciones, divisiones, ramas, fallos de caché, excepciones y conflictos. Las  cargas son estimadas como fallos de caché y los hilos pasan a tener baja prioridad.

La Unbidad de búsqueda de instrucción tiene una matriz de la caché de instrucción tiene 16Kb, 4 vías, líneas de 32 bytes de tamaño con un solo tag de instrucción portado.  También tiene un vector dual (1R/ 1W) de bit de validez para mantener la línea de validez de la caché con su estado (válido / inválido). La invalidación accede a este vector y no al tag de instrucción. Un algoritmo pseudo-aleatorio es el encargado de elegir las instrucciones inválidas para reemplazarlas.

Hay una TLB asociativa total de instrucción con 64 entradas. El buffer soporta los siguientes tamaños de página: 8K, 64K, 4M y 256M La TLB usa un algoritmo de tipo pseudo LRU (primero el menos recientemente usado) para los reemplazos.

Dos instrucciones son buscadas en cada ciclo, aunque sólo una es usada, lo que reduce la actividad en la caché. Sólo puede haber un fallo por hilo y 4 por núcleo. Fallos duplicados no cusan búsquedas en la caché de nivel 2.

El fichero de registros de enteros (IRF – “Integer Register File”) del núcleo, tiene 5K con 3 puertos de lectura, 2 de escritura y 1 de transporte. Hay 640 registros de 64 bits con código de corrección de errores (ECC). Sólo 32 registros de la ventana actual pueden ser vistos por el hilo. La ventana cambia en segundo plano mientras se hace la seleccion del hilo. El IRF proporciona un acceso de lectura / escritura por ciclo.

2. EXU – Unidad de Ejecución (Execution Unit)

Esta unidad tiene una unidad aritmética lógica (ALU) simple y un cambiador. La ALU es reutilizada para el cálculo de las direcciones de rama y virtuales. Hay un multiplicador de enteros por núcleo. El multiplicador de enteros es compartido por el EXU y el SPU basándose en el algoritmo de round-robin. Hay un divisor simple (sin resto) por núcleo. Un hilo usando MUL / DIV será desecha su operación (roll-back) y desactivado si otro hilo está ocupando las unidades de MUL / DIV.

3. LSU – Unidad de carga / almacén (Load / Store Unit)

La caché de datos tiene 8K de datos, 4 vías y un tamaño de linea de 16 bits. También se almacena la validación de los datos con un vector dual 1R/1W. Un algoritmo pseudoaleatorio es usado para el reemplazamiento de los datos. El TLB de datos opera como el TLB de instrucción.

La LSU tiene 8 búferes de entrada para almancén, uniendose en un array de 32 entradas. Sólo una carga es permitida por hilo. Cargas de líneas duplicadas no son enviadas a la caché de nivel 2.

La LSU tiene un interfaz lógico con el crossbar de la caché de la CPU (CCX). Este interfaz permite:

  • priorizar las peticiones de operaciones en coma flotante, de streaming, salvados (stores) e interrupciones.
  • pedir prioridad
  • ensamblar paquetes provinientes de la caché del procesador (PCX)

La LSU mantiene los retornos de la PCX y el orden de las actualizaciones y las  invalidaciones de la caché.

4. FFU – Unidad frontend de coma flotante (Floating-point Frontend Unit)

Esta unidad decodifica las instrucciones de coma flotante e incluye un fichero de registros de coma flotante (FRF). Algunas operaciones de coma flotante como “mover”, “valor absoluto” y “negativo” están implementadas aquí, mientras otras lo están en la FPU.

Cuando la FFU detecta una operación de coma flotante (Fpop) hace lo siguiente:

  • El hilo se desactiva.
  • La Fpop es decodificada y leído el FRF.
  • Se empaqueta la operación y los operanados y se envía a la FPU a través del crossbar.
  • La computación se termina cuando el resultado es retornado a través del crossbar.
  • Se actualiza el FRF y se reinicia el hilo.

5. TLU – Unidad Lógica de Interrupcioes (Trap Logic Unit)

Soporta seis niveles de interrupciones. Las interrupciones causan el flush del pipeline y el thread cambia hasta que el contador de programa de interrupción está disponible. La TLU tambiénn tiene capacidad hasta 64 interrupciones pendientes por hilo.

6. SPU – Unidad de Procesamiento de Cadenas (Stream Processing Unit)

La SPU incluye una unidad aritmética modular (MAU) para criptografía (una por núcleo), y soporta criptografía asimétrica (RSA de clave pública) de clave de hasta 2048 bytes. Comparte un multiplicador de enteros para las operaciones artiméticas modulares. La MAU pues ser usada sólo por un hilo a la vez. La operación de la MAU es configurada por lo guardado en el registro de control, y el hilo retorna al procesamiento normal. La MAU inicia operacioes de lectura y guardado de cadenas en la caché de nivel 2 a través del crossbar, y computa operaciones en el multiplicador. La finalización de la MAU puede ser comprobada por votación o usando una interrupción.

Tags: , , , , , , , , , , , , , , , , , ,

General, Informática OpenSPARC T1

0 Comments

1. Introcucción

El procesador OpenSPARC T1 es el primer chip multiprocesador que implementa completamente la iniciativa de Computación de Rentimiento de Sun (”Sun Throughput Computing Initiative”). El procesador OpenSPARC T1 es un procesador altamente integrado que implementa la arquitectura SPARC V9 de 64 bits. Este procesador apunta a las aplicaciones comerciales como a servidores de aplicación y servidores de bases de datos.

El procesador OpenSPARC T1 contiene ocho núcleos del procesador SPARC, y cada uno tiene soporte hardware para cuatro hilos de ejecución. Cada núcleo SPARC tiene una cache de instrucción, una cache de datos, y una instrucción completamente asociativa más un TLB. Los ocho núcleos SPARC están conectados a la cache de nivel 2 en el mismo chip (on-chip), L2-Cache. Los cuatro controladores on-chip de acceso a la memoria dinámica (DRAM) directamente interconectan a los datos DRAM (DDR2 SDRAM).

Adicionalmente, hay un controlador de J-Bus on-chip que provee una intercomunicación entre el procesador OpenSPARC T1 y el subsistema de E/S.

2. Características

  • CPU
    • Arquitectura SPARC v9 de 64 bits
    • Caché de nivel 2 en el mismo chip
    • Espacio de 48 bits de direcciones virtuales y 40 bits de direcciones físicas.
  • Cachés
    • 16 Kbytes para el cache de instrucciones primario L1 por núcleo
    • 8 Kbytes para el cache de datos primario L1 por núcleo
    • 3 Mbytes para el cache secundario L2, bancos de 4 bias y cada uno con 12 bias asociativo compartido por todos los núcleos
  • Integración
    • 8 núcleos SPARC
    • 4 hilos por núcleo (ejecución total de 32 hilos)
    • 4 controladores DDR-2 DRAM con una interfaz de 144 bits por canal
    • Interfaz externa J-BUS para entrada salida (I/O) con un ancho de banda pico total de 2,5Gbytes/sec con un bus de 128bits multiplexado entre datos y direcciones

3. Descripción Funcional

La figura 1 muestra un diagrama de bloques del procesador OpenSPARC T1 ilustrando las diversas interfaces y los componentes integrados del chip.

Figura 1: Diagrama de bloques OpenSPARC T1

Las funciones y capacidades de este procesador son las siguientes:

    • 8 núcleos SPARC V9 CPU
    • 4 hilos de ejecución por núcleo
    • 64 bits
    • Espacio de 48 bits de direcciones virtuales y 40 bits de direcciones físicas.
    • Controlador J-Bus
    • 16 KBytes de cache primaria de instrucción (Level 1) por núcleo CPU.
    • 8 KBytes de cache primaria de datos (Level 1) por núcleo CPU.
    • MBytes de cache secundaria (Level 2) unificada.
    • 4 controladores DRAM para interfaz DDR2 SDRAM

3.1. Núcleo SPARC (SPARC Core)

El núcleo OpenSPARC contiene el hardware necesario para soportar cuatro hilos de ejecución. Este soporte consiste en un conjunto de todos los registros (con ventanas de 8 registros) por hilo, con la mayoría de los identificadores de espacio de direcciones (ASI), registros de estado auxiliares (ASR) y registros privilegiados replicados por hilo. Los cuatro hilos comparten las cachés de instrucción y de datos y los TLBs. Cada caché de instrucción es de 16 Kbytes con un tamaño de 32 bits por línea. Los TLB incluyen una funcionalidad de automapeo que permite a los múltiples hilos actualizar la TLB sin bloquear.

Cada núcleo SPARC tiene solo un tipo de pipeline de seis fases o etapas.

También dispone de las siguientes unidades:

1. La unidad Fech-Instruction (lectura de instrucción) (IFU), que incluye un sistema de cache de instrucción (Se encarga de gestionar los pc´s de los procesos, la cache L1).

2. La unidad de ejecución (EXU) incluye las fases de ejecución del pipeline.

3. La unidad Load/store (LSU) incluye etapas de memoria, write-back, y un sistema de cache de datos.

4. La unidad lógica Trap (TLU).

5. La unidad de procesamiento de flujo (o “stream”) (SPU) es usada para funciones de aritmética modular para criptografía.

6. La unidad de gestión de memoria (MMU).

7. La unidad frontend Floating- point (FFU).

3.1.1 Pipeline

Las fases del Pipeline son:
1. Lectura (Fetch)
2. Selección del hilo de ejecución (Thread Selectio)
3. Decodificación (Decode)
4. Ejecución (Execute)
5. La memoria (Memory)
6. Escritura retardada (Write Back)

Figura 2: Fases del Pipeline del núcleo SPARC

3.2. Unidad de Coma Flotante (FPU)

La Unidad de Coma Flotante es simple y compartida por los ocho núcleos SPARC. Esta unidad compartida es suficiente para la mayoría de las aplicaciones comerciales en las que típicamente menos del 1% de las instrucciones son operaciones con coma flotante.

3.3. Caché de nivel 2 (L2)

La caché de nivel 2 está organizada en 4 bancos, y el banco es elegido basándose en los bits 7 y 6 de la dirección física de memoria. La caché tiene 3 Mb, de 12 vias asociativas, con un algoritmo de reemplazo siguiento un algoritmo pseudo más antiguo usado (LRU). El tiempo de descarga para un fallo en la caché de nivel 1 para intrucciones es de 22 ciclos y para datos de 23 ciclos.

3.4. Controlador DRAM

El controlador DRAM del procesaros OpenSPARC T1 está organizado en 4 bancos (también hay versiones más económicas con 2 bancos para utilizar con menos memoria). Cada banco de la caché de nivel 2 interactúa exáctamente con un banco controlador DRAM. Los bancos son seleccionados basándose en los bits 7 y 6 de la dirección física, entonces cada banco del controlador debe tener módulos de memoria DIMM (Dual In-line Memory Module) idénticos instalados.
El procesador OpenSPARC T1 usa memorias DIMM DDR2 y puede uno o dos rangos de pilas de memorias DIMM. Cada banco/puerto de DRAM tiene un ancho del doble de un módulo de memoria DIMM (128 bit + 16 bit ECC). Todos los módulos deben ser idénticos, y el mísmo número de módulos (cada grupo se le llama rango)  deben ser instalados en cada puerto de los controladores DRAM. La frecuencia del controlador DRAM depende directamente de la frecuencia del núcleo, donde la frecuencia del núcleo debe ser al menos tres veces la del controlador. Los buses de datos de DDR (Double Data Rate) transiferen a una frecuencia el doble de la del controlador DRAM.

3.5. El puente de entrada/salida (IOB)

El puente de entrada / salida realiza una decodificación de direcciones en transacciones de entrada / salida y las dirige al bloque interno apropiado o al interfaz externo apropiado (J-Bus o interfaz del sistema serie). Adicionalmente, el IOB mantiene el estado de los registros para interrupciones externas.

3.6. El Interfaz J-Bus (JBI)

El interfaz J-Bus (JBI) is la interconexión entre el procesado OpenSPARC T1 y el subsistema de entrada / salida. J-Bus es un bus de datos y direeciones de 200 MHz y 128 bits de ancho de banda, usado sobretodo para el trafico del acceso directo a memoria (DMA), admás del tráfico de entrada/salida programable (PIO) para controlarlo.
El interfaz J-Bus es el bloque que recibe y responde las peticiones del DMA, enrutandolas a los bancos L2 apropiados, y también usando transacciones PIO en el tratamiento de hilos de procesador y redireccionando las respuestas.

3.7. Interfaz del Sistema en Serie (SSI)

El procesador OpenSAPRC T1 tiene un interfaz del sistema en serie de 50 Mbytes/sec que conecta con un circutio integrado específico de aplicación (ASIC) externo, que se relaciona con la memoria de sólo lectura (ROM) de arranque. Además, el SSI soporta accesos PIO, para permitir registros de estado de control (CSR) opcionales u otras interfaces dentro del ASIC.

3.8. Fundido electrónico (e-Fuse)

El bloque Fundido electrónico (e-Fuse) contiene información de la configuración que es grabada electrónicamente como parte de la manufactura, incluyendo parte del número de serie e información disponible del núcleo.

3.9. CPU-Cache Crossbar (CCX)

El CPU cache crossbar maneja la comunicación entre los ocho núcleos de la CPU, los cuatro bancos de L2-Cache, el puente de E/S, y la unidad de coma flotante (FPU). Estas unidades funcionales se comunican con cada una enviando paquetes, y el CCX arbitra el reparto del paquete.

Información extraida del Datasheet de OpenSPARC T1 (www.opensparc.net).
Tags: , , , , , , , , , , , ,