Archive for the ‘General’ Category

General IFU – Unidad de Búsqueda de Instrucción

0 Comments

1. El pipeline del núcleo SPARC

Hay seis etapas en el pipeline del núcleo SPARC:

  1. Búsqueda – Etapa F
  2. Selección de hilo – Etapa S
  3. De-codificación - Etapa D
  4. Ejecución – Etapa E
  5. Memoria – Etapa M
  6. Contestación – Etapa W

El acceso de la caché de Instrucción y el acceso ITLB tienen lugar en la etapa F. La selección del hilo (hardware) se realiza en la etapa S. La decodificación de la instrucción y el acceso a los registros suceden en la etapa D. La evaluación de la rama se hace en la etapa E. El acceso a memoria y la respuesta se realiza en las etapas M y W. La figura siguiente ilustra el pipeline y las estructuras involucradas.

Core Pipeline

Core Pipeline

La Cola de Llenado de Instrucción (IFQ) alimenta la caché de instrucción. La Lista de Instrucciones perdidas (MIL) guarda las direcciones que fallaron la caché de instrucción (I-Cache) y la ITLB,  y la MIL alimenta la Unidad de Almacén de Carga (LSU) para futuros procesamientos. El búfer de instrucción es de dos niveles de profundidad, e incluye la Unidad de Instrucción de Hilo (TIR) y la de Próxima Instrucción (NIR). La Selección del Hilo y el Planificador (etapa S) resuelve el arbitraje entre el TIR, el NIR, el PC de la rama, el PC de interrupciones para coger un hilo y mandarlo a la etapa de decodificación (D). La siguiente figura muestra la porción del pipeline del hilo:

2. Búsqueda de Instrucción

La Unidad de Búsqueda de Instrucción (IFU) mantiene los contadores de programa (PC) y los próximos contadores de programa (NPC) de todas las instrucciones vivas ejecutadas en el procesador. Por cada ciclo de reloj del núcleo, dos instrucciones son buscadas por cada instrucción usada. Esta relación de dos búsquedas por cada uso tiene la intención de reducir el acceso a la I-Cache para llenar la I-Cache de forma oportunista. A cada hilo le está permitido tener un fallo de I-Cache pendiente, y el núcleo SPARC permite un total de cuatro fallos de I-cache. Fallos duplicados de I-cache no inducen la carga redundante al nivel 2 de caché (L2-caché).

3. Registros de instrucción y registros de Contador de Programa

En el búfer de instrucción, hay dos registros de instrucción por hilo: el registro de instrucción del hilo (TIR) y el registro de próxima instrucción del hilo (NIR). El TIR contiene el la instrucción actual del hilo el la etapa de selección del hilo (etapa S), y el NIR contiene la siguiente instrucción. Un fallo en la carga de la I-cache, evita la I-cache y escribe directamente a la TIR, pero nunca escribe en la NIR.

El planificador de hilos selecciona una instrucción válida del TIR. Después de la selección de un instrucción válida, ésta será movida del NIR al TIR. Si no hay una instrucción válida en el TIR, una istrucción de No Operación (NOP) es insertada.

Hay un registro de contador de programa (PC) por hilo. El contador de próximo programa (NPC) puede venir de una de las siguientes fuentes:

1. Rama

2.  PC de interrupción

3. NPC de interrupción

4. Rollback (un hilo revertido debido a un fallo de carga)

5. PC + 4

La IFU rastrea  el PC y el NPC a través de la etapa W. El último PC retirado es guardado in la unidad lógica de interrupción (TLU), y si ocurre una interrupción, también sera guardada en la pila de la interrupción.

4. La caché de instrucción de nivel 1

La caché de instrucción es nombrada comunmente como caché de instrucción de nivel 1 (L1I).

[Artículo sin terminar]

Tags: , , , , , , , , ,

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: , , , , , , , , , , , , , , , , , ,