Técnica 2 (Procesador con predicción de saltos)

Anuncio
Práctica 1 (AC) – Modelado de la arquitectura MIPS con técnicas de Paralelismo de Instrucciones
Ejercicio 3 - Técnica 2 – Procesador “DLX32btb”
Objetivo de Diseño
Diseñar e implementar un procesador con Unidad de Predicción de Saltos en el que se incluye una BTB para la determinación de la dirección del destino del salto, así como un predictor de saltos condicionales de tipo (2,2). El principal objetivo de esta técnica consiste en
disminuir el número de ciclos de penalización producidos por las dependencias de control
ocasionadas por las instrucciones de salto, tanto condicionales como incondicionales, cuya
dirección destino del salto se codifica en el campo inmediato del formato de instrucción. En
particular, la BTB anticipará la dirección destino del salto para las instrucciones: J, JAL,
TRAP, BEQZ.
Características Generales del Procesador DLX32btb
En la Figura T2-1 se muestran los cambios más relevantes que son necesarios introducir en
el procesador DLX32p para implementar la Técnica 2. A continuación, se describen los
nuevos elementos microarquitecturales de las Etapas IF e ID.
MUX2_BTB
DLX32btb
NPC_ID
CONTROL BTB
IPC
IF/ID
RS1
Reg File
4
Condición?
NPC_BTB
PC+4
(Técnica 2)
Zero
MUX2
PC
Adder
PC
IPC
BTB
PC_ID
Salto_ID
NPC
NPC_ID
PC
Instr
Inm
Adder
Cache
Instruccciones
NPC
PC_ID
Salto_ID
COP
Figura T2-1. Microarquitectura del Procesador DLX32btb
Etapa IF
Al multiplexor de selección (MUX2) del nuevo valor de PC (IPC) se le añade dos entradas
que corresponden a una de las salidas del módulo BTB (NPC_BTB), y la dirección de la
3
Práctica 1 (AC) – Modelado de la arquitectura MIPS con técnicas de Paralelismo de Instrucciones
siguiente instrucción cuando exista fallo de predicción en la BTB en la que se consideraba
que el salto se tomaba. El módulo BTB detecta la existencia de una instrucción de salto
(condicional o incondicional) y predice tanto la dirección PC de la instrucción situada en el
destino del salto como si el salto se va a tomar o no cuando el salto es de tipo condicional.
El módulo BTB requiere un módulo de control denominado “Control BTB” que gestionará
tanto su contenido como la selección de la salida del multiplexor MUX2
(MUX2_BTB[1..0]). El algoritmo de gestión lo denominamos “Algoritmo BTB” y se describe más adelante.
Etapa ID
En esta etapa es donde se resuelve el salto. Es decir, se calcula la condición de los saltos
condicionales (Zero), así como se obtiene la dirección PC verdadera del destino del salto
(Salto_ID) en el caso de que el salto se tome y se haya predecido que no se salta. En el caso
de que la predicción que realizara la BTB en el ciclo anterior fuera incorrecta, se ha introducido una instrucción en la etapa IF que no debería haberse introducido. Por ello, en
NPC_ID se guarda la dirección PC+4 relativa a la dirección (PC) de la instrucción de salto
que se especula. NPC_ID sería el nuevo valor que se tendría que inicializar en PC al finalizar el ciclo en el que la instrucción de salto se encuentra en la etapa ID.
Algoritmo BTB
En la Figura T2-2 se puede observar el algoritmo de gestión del módulo BTB, de lo cual se
encargará la unidad de control denominada “Control BTB”. A continuación se describen
los distintos pasos del algoritmo asociándolos a las etapas de segmentación del procesador
DLX32btb donde se puede encontrar una instrucción de salto.
Enviar PC a Cache
Instruc. y BTB
Algoritmo
BTB
IF
NO
Inicializar PC = PC + 4
NO
Predicción
correcta:
actualizar
BTB y
Predictor
(2,2)
¿Salto
tomado?
SI
¿Está en
BTB?
Inicializar PC dependiendo
de Especulación
SI
Predicción incorrecta:
actualizar BTB, actualizar
Predictor (2,2) en saltos
condicionales + búsqueda
instrucción correcta +
eliminar IF
NO
Predicción
incorrecta:
eliminar IF +
actualiza
Predictor (2,2) +
búsqueda
instrucción
correcta
¿Especulación
Correcta?
SI
Predicción correcta:
actualizar Predictor
(2,2) en saltos
condicionales
Figura T2-2. Algoritmo de gestión del módulo BTB
4
ID
Práctica 1 (AC) – Modelado de la arquitectura MIPS con técnicas de Paralelismo de Instrucciones
Etapa IF: el PC actual se utiliza para direccionar la BTB. Si se detecta que ha entrado en el
cauce una instrucción de salto (J, JAL, o BEQZ) y se encuentra caracterizada en la BTB
(Hit=1), se analiza su predicción (P). Si P=1, la predicción establece que el salto condicional va a ser tomado y el PC en el próximo ciclo de reloj se inicializa con la dirección destino incluida en la BTB para ese salto. Si P=0, la predicción establece lo contrario. En este
caso, el PC se inicializa con el valor “PC+4”.
Etapa ID: durante esta etapa se analiza si el salto se toma o no a través de su código de operación y la condición de salto. En el caso de que se haya acertado en la predicción o si el
salto no se encontraba en la BTB pero es Salto No Tomado, no existe penalización de ciclos de reloj. La instrucción que está actualmente en IF se está ejecutando correctamente.
En el caso de que la predicción no sea correcta, o el salto no esté en la BTB y sea Salto
Tomado, la instrucción que está en IF se está ejecutando incorrectamente. En caso de fallo
de predicción, es en este ciclo donde se elimina la instrucción que se ejecutó en el ciclo
anterior en la etapa IF, e ir a buscar la instrucción correcta. Adicionalmente, se debe actualizar la BTB (dirección destino y predicción).
Módulo de Control de la BTB
En la Figura T2-3 se puede observar detalladamente la interconexión entre Control BTB y
el módulo BTB.
clk
MUX2_BTB
Interconexión BTB y su control
WE_BTB
clk
Res_Salto_ID
Corr
Hit
Zero
CONTROL BTB
Hit
P
P
COP
BTB
WE_Pre
Registro Desplazamiento 2 bits
Figura T2-3. Interconexión de los módulos BTB y Control BTB
5
Práctica 1 (AC) – Modelado de la arquitectura MIPS con técnicas de Paralelismo de Instrucciones
El módulo Control BTB debe disponer de un Registro de Desplazamiento de 2 bits donde
se almacene si los dos últimos saltos fueron tomados o no tomados. Estos 2 bits (Corr) se
utilizan para seleccionar una de las cuatro posibles predicciones que se ofrecen para un salto determinado dentro del Predictor (2,2) que se encuentra en la BTB. El registro de desplazamiento se actualiza cuando el salto se encuentre en la Etapa EX.
Por otro lado, el módulo de control genera las siguientes señales de salida:
⎯ WE_Pre: habilita la escritura en el Predictor (2,2)
⎯ WE_BTB: habilita la escritura en los restante campos de la BTB
⎯ Res_Salto_ID: indica si el salto fue realmente tomado o no en la etapa ID
⎯ MUX2_BTB: control de MUX2
Las señales de entrada al módulo de control son la siguientes:
⎯ clk: permite capturar los eventos producidos en la etapa ID del salto para que en el siguiente ciclo de reloj se pueda inicializar la BTB con la información correspondiente.
Como se puede observar, la BTB también requiere la señal “clk”. Esto es debido a que
se necesita para las escrituras en los campos de la BTB correspondientes.
⎯ COP: código de operación de la instrucción que se encuentra en la etapa ID. Dependiendo de si el salto es condicional o incondicional, se actualizan uno u otro campo.
⎯ Zero: indica la condición del salto en la etapa ID
⎯ Hit: Si Hit=1, indica que la instrucción que se encuentra actualmente en la Etapa IF es
un salto y se encuentra caracterizado en la BTB. Si Hit=0, el salto no está en la BTB.
⎯ P: valor de la predicción del salto. P=1 corresponde a Salto Tomado, y P=0 corresponde
a Salto No Tomado. En los saltos incondicionales que se encuentren en la BTB, ocurre
que siempre P=1.
Organización Interna de la BTB
Etiquetas
WE_BTB
Bit Validez
BTB
BTB
Res_Salto_ID
T(1)/NT(0)
Direcciones Destino
J? Predictor (2,2)
PC / PC_ID
WE_Pre
Etiqueta - Indice
Corr
Escritura
Lectura
=?
clk
Salto_ID
Hit
NPC_BTB Incondicional/ Predicción
Condicional
T(1)/NT(0)
(1/0)
J
OR
Acierto/Fallo (1/0)
P
Salta/NoSalta
(1/0)
Figura T2-4. Organización interna del módulo BTB
6
Práctica 1 (AC) – Modelado de la arquitectura MIPS con técnicas de Paralelismo de Instrucciones
En la Figura T2-4 se observa la organización interna de la BTB. Supondremos que para la
Práctica 1, existen 4 entradas. Su organización interna es parecida a una memoria cache de
correspondencia directa. Se diferencian 4 campos:
⎯ Bit de Validez (1 bit): indica que la información contenida en la línea corresponde a
algún salto que ya se ha ejecutado previamente.
⎯ Etiquetas (28 bits): aquí se guardan los 28 bits más significativos de la dirección de la
memoria cache de instrucciones donde se encuentra la instrucción de salto. Esta etiqueta se compara con el campo Etiqueta del PC actual. En el caso de que coincidan, se produce un acierto (Hit=1). En caso contrario Hit=0.
⎯ Direcciones Destino (30 bits): aquí se guarda la dirección destino del salto, donde se
encuentra almacenada la instrucción que se debe introducir en el cauce en el ciclo siguiente al de la introducción de la dirección de salto.
⎯ J? (1 bit): si J?=1, el salto es incondicional (JR, JAL, TRAP, J etc.). Si J?=0, el salto es
condicional
⎯ Predictor (2,2): indica una predicción de si el salto condicional va a ser Tomado o No
Tomado. Para cada entrada de la BTB, existe 4 posibles predicciones de 2 bits. La selección de una entre las cuatro posibles viene determinada por el contenido del Registro
de Desplazamiento de 2 bits (Corr) que se encuentra en el módulo Control BTB. Los 2
bits asociados a cada predicción corresponden a un Contador Saturado, el cual aumenta
o disminuye dependiendo de si la ejecución actual del salto es Tomado (el contador saturado aumenta en 1) o No Tomado (el contador saturado disminuye en 1).
En la Figura T2-5 se puede observar detalladamente la organización interna del Predictor
(2,2) de Saltos Condicionales. Se diferencian los cuatro conjunto de predictores para cada
entrada de la BTB. Para generar la predicción de 1 bit “Predicción T(1)/NT(0)”, los dos bits
de los correspondientes contadores seleccionados a través de “Indice” se pasan a través de
una “Tabla 2:1”. Posteriormente, se selecciona a través de “Corr” para luego combinarse
con “J?”.
7
Práctica 1 (AC) – Modelado de la arquitectura MIPS con técnicas de Paralelismo de Instrucciones
Predictor (2,2) de Saltos Condicionales
Res_Salto_ID
T(1)/NT(0)
Predictor (2,2)
Res_Salto_ID
T(1)/NT(0)
WE_Pre
Indice
Corr
Predicción
T(1)/NT(0)
WE_Pre
Indice
Corr
clk
WE_Pre
Indice
Tabla 2:1
clk
Res_Salto_ID
1(+1)/0(-1)
00 NT
00 NT
00 NT
00 NT
01 NT
01 NT
01 NT
01 NT
10 T
10 T
10 T
10 T
11 T
11 T
11 T
11 T
Corr
Contador Saturado
2-bits
MUX
Predicción
T(1)/NT(0)
Figura T2-5. Organización interna del Predictor (2,2)
En el proceso de escritura, cuando se produce la inicialización de cualquiera de los campos
del Predictor (2,2), se involucran las siguientes señales:
⎯
⎯
⎯
⎯
clk: uno de los flancos activa la escritura en los contadores
WE_Pre: indica que se produzca la escritura
Indice: selecciona un conjunto de 4 predictores
Corr: de los 4 predictores que selecciona Indice, esta señal de 2 bit selecciona uno de
ellos
⎯ Res_Salto_ID: da el valor del resultado del salto actual que es obtenido cuando el salto
condicional se encuentra en la etapa ID
8
Descargar