You are on page 1of 175

TIPO DE EXAMEN: 1ª SEMANA - NACIONAL – FEBRERO 2012

Apellidos: ........................................................................................... Nombre:.........................................DNI:....................................

INSTRUCCIONES: Complete sus datos personales en la cabecera de esta hoja, y ENTRÉGUELA junto con el resto del examen.
Lea atentamente todos los enunciados.

Problema 1 (3 puntos)
Utilizando el algoritmo de Tomasulo para realizar la ejecución del siguiente fragmento de código:
i1: MULTD F2, F2, F6
i2: MULTD F4, F2, F6
i3: ADDD F2, F4, F6
i4: ADDD F6, F2, F6

muestre la evolución de los registros en coma flotante (FR) y de las estaciones de reserva (RS) para todos los
ciclos que sean necesarios. Considere las siguientes hipótesis de partida:

 Para reducir el número de ciclos máquina se permite que la FLOS distribuya hasta dos instrucciones en
cada ciclo según el orden del programa.
 Una instrucción puede comenzar su ejecución en el mismo ciclo en que se distribuye a una estación de
reserva.
 La operación suma tiene una latencia de dos ciclos y la de multiplicación de tres ciclos.
 Se permite que una instrucción reenvíe su resultado a instrucciones dependientes durante su último ciclo
de ejecución. De esta forma una instrucción a la espera de un resultado puede comenzar su ejecución en
el siguiente ciclo si detecta una coincidencia.
 Los valores de etiqueta 01, 02 y 03 se utilizan para identificar las tres estaciones de reserva de la unidad
funcional de suma, mientras que 04 y 05 se utilizan para identificar las dos estaciones de reserva de la
unidad funcional de multiplicación/división. Estos valores de etiqueta son los ID de las estaciones de
reserva.
 Inicialmente, el valor de los registros es F0=2.0, F2=2.5, F4=4.0 y F6=3.0.

Problema 2 (4 puntos)

Dispone del siguiente fragmento de código intermedio:

Loop: LD F0,0(R1)
ADDD F4,F0,F2
SD 0(R1),F4
SUBI R1,R1,#8
BNEZ R1,Loop

y de un procesador VLIW con un formato de instrucción de 5 slots (4 bytes por slot) que admite dos
operaciones de carga/almacenamiento (2 ciclos de latencia), dos operaciones en coma flotante (3 ciclos de
latencia) y una operación entera/salto (1 ciclo de latencia). Sin considerar la existencia del hueco de retardo de
salto en la planificación, se pide que:

a) Transforme el código intermedio en código VLIW para el procesador indicado.


b) A partir del código anterior y mediante el desenrollamiento del bucle original, complete los slots
libres del código VLIW del apartado anterior.
c) Realice el desenrollamiento software del bucle original. Considere que un slot de operación en coma
flotante puede ejecutar restas enteras.
d) Calcule para los dos apartados anteriores el número de operaciones por ciclo reloj, el número de
ciclos consumidos para un vector de 800 elementos, el tamaño del código en memoria y el porcentaje de
espacio desaprovechado.

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 1/2


Problema 3 (3 puntos)

Dada una red con topología de hipercubo con dimensión d = 5, se pide que:

a) Dibuje los hipercubos de dimension d-1 que forman dicha red.


b) Calcule la distancia de Hamming para los procesadores 00000 y 11111. Dibuje y explique
razonadamente un esquema del camino mas corto para comunicar ambos procesadores.
c) Describa y calcule la conectividad de arco de dicha red.

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 2/2


Solución al problema 1

a)

Ciclo 1: Se distribuyen i1 e i2 en orden.


RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 04 (i1) 00 2.5 00 3 F0 2
02 05 (i2) 04 -- 00 3 F2 1 04 2.5
03 Mult/Div F4 1 05 4
Suma/Resta F6 3

Ciclo 2: Se distribuyen i3 e i4 en orden.

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 (i3) 05 -- 00 3 04 (i1) 00 2.5 00 3 F0 2
02 (i4) 01 -- 00 3 05 (i2) 04 -- 00 3 F2 1 01 2.5
03 Mult/Div F4 1 05 4
Suma/Resta F6 1 02 3

Ciclo 3: Al final del ciclo 3, la instrucción i1 finaliza su ejecución y emite su ID (04). En ese momento, todos
los campos etiquetados que contienen el valor 04 insertan el resultado emitido.

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 (i3) 05 -- 00 3 04 (i1) 00 2.5 00 3 F0 2
02 (i4) 01 -- 00 3 05 (i2) 04 -- 00 3 F2 1 01 2.5
03 Mult/Div F4 1 05 4
Suma/Resta F6 1 02 3

Ciclo 4:

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 (i3) 05 -- 00 3 04 F0 2
02 (i4) 01 -- 00 3 05 (i2) 00 7.5 00 3 F2 1 01 2.5
03 Mult/Div F4 1 05 4
Suma/Resta F6 1 02 3

Ciclo 5:

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 (i3) 05 -- 00 3 04 F0 2
02 (i4) 01 -- 00 3 05 00 7.5 00 3 F2 1 01 2.5
03 Mult/Div F4 1 05 4
Suma/Resta F6 1 02 3

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 3/2


Ciclo 6: Al final del ciclo 6 finaliza la ejecución de i2

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 (i3) 05 -- 00 3 04 F0 2
02 (i4) 01 -- 00 3 05 00 7.5 00 3 F2 1 01 2.5
03 Mult/Div F4 1 05 4
Suma/Resta F6 1 02 3

Ciclo 7:

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 (i3) 00 22.5 00 3 04 F0 2
02 (i4) 01 -- 00 3 05 F2 1 01 2.5
03 Mult/Div F4 22.5
Suma/Resta F6 1 02 3

Ciclo 8: Al final del ciclo 8 finaliza la ejecución de i3.


RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 (i3) 00 22.5 00 3 04 F0 2
02 (i4) 01 -- 00 3 05 F2 1 01 2.5
03 Mult/Div F4 22.5
Suma/Resta F6 1 02 3

Ciclo 9:

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 04 F0 2
02 (i4) 00 25.5 00 3 05 F2 25.5
03 Mult/Div F4 22.5
Suma/Resta F6 1 02 3

Ciclo 10: Al final del ciclo 10, i4 finaliza su ejecución.


RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 04 F0 2
02 (i4) 00 25.5 00 3 05 F2 25.5
03 Mult/Div F4 22.5
Suma/Resta F6 1 02 3

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 4/2


Ciclo 11

RS RS FR
ID Eti_1 Ope_1 Eti_2 Ope_2 ID Eti_1 Ope_1 Eti_2 Ope_2 ID Bit Ocu Etiq. Dato
01 04 F0 2
02 05 F2 25.5
03 Mult/Div F4 22.5
Suma/Resta F6 28.5

b) El siguiente diagrama ilustra todas las dependencias de datos existentes entre las instrucciones que
componen la secuencia.

i1
RAW
WAW
i2
WAR WAR
RAW RAW
WAR
WAR
i3
WAR
RAW

i4

c) A partir del gráfico con las dependencias verdaderas se puede establecer de forma sencilla el límite
máximo de flujo de datos. Se puede apreciar que la ruta crítica consta de 10 ciclos que es el límite que debe
alcanzar la ejecución aplicando el algoritmo de Tomasulo.

i1

i2

3 3

i3

i4

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 5/2


Solución al problema 2

a) Una solución válida aunque no óptima es la siguiente.

Carga/almacenamiento Carga/almacenamiento Operaciones FP Operaciones FP Enteras/saltos


1 LD F0,0(R1)
2
3 ADDD F4,F0,F2
4
5
6 SD 0(R1),F4
7
8 SUBI R1,R1,#8
9 BNEZ R1,Loop

Número de ciclos consumidos: 9


Número de operaciones realizadas: 5
Operaciones por ciclo: 0,555
Tamaño en memoria: 9 instrucciones * 20 bytes = 180 bytes
Espacio utilizado: 5 operaciones * 4 bytes = 20 bytes
% espacio desaprovechado: 88,89
Ciclos ejecutados para 800 elementos: 9 ciclos * 800 iteraciones : 7200 ciclos
Instrucciones procesadas: 9 * 800 iteraciones: 7200 instrucciones

Otra solución válida que mejora a la anterior es la que se muestra a continuación.

Carga/almacenamiento Carga/almacenamiento Operaciones FP Operaciones FP Enteras/saltos


1 LD F0,0(R1)
2
3 ADDD F4,F0,F2
4
5
6 SD 0(R1),F4 SUBI R1,R1,#8
7 BNEZ R1,Loop

Número de ciclos consumidos: 7


Número de operaciones realizadas: 5
Operaciones por ciclo: 0,71
Tamaño en memoria: 7 instrucciones * 20 bytes = 140 bytes
Espacio utilizado: 5 operaciones * 4 bytes = 20 bytes
% espacio desaprovechado: 85%
Ciclos ejecutados para 800 elementos: 7 ciclos * 800 iteraciones : 6300 ciclos
Instrucciones procesadas: 7 * 800 iteraciones: 6300 instrucciones

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 6/2


b) En base a la solución no óptima del apartado (a) se tendría:

Carga/almacenamiento Carga/almacenamiento Operaciones FP Operaciones FP Enteras/saltos


1 LD F0,0(R1) LD F6,-8(R1)
2 LD F10,-16(R1) LD F14,-24(R1)
3 LD F18,-32(R1) LD F22,-40(R1) ADDD F4,F0,F2 ADDD F8,F6,F2
4 ADDD F12,F10,F2 ADDD F16,F14,F2
5 ADDD F20,F18,F2 ADDD F24,F22,F2
6 SD 0(R1),F4 SD -8(R1),F8
7 SD -16(R1),F12 SD -24(R1),F16
8 SD -32(R1),F20 SD -40(R1),F24 SUBI R1,R1,#48
9 BNEZ R1,Loop

Número de ciclos consumidos: 9


Número de operaciones realizadas: 20
Operaciones por ciclo: 20/9=2,222
Tamaño en memoria: 9 instrucciones * 20 bytes = 180 bytes
Espacio utilizado: 20 operaciones * 4 bytes = 80 bytes
% espacio desaprovechado: 55 %
Ciclos ejecutados para 800 elementos: 9 ciclos * 134 iteraciones : 1206 ciclos
Instrucciones procesadas: 9 * 134 iteraciones: 1206 instrucciones

En base a la solución óptima del apartado (a) se tendría:

Carga/almacenamiento Carga/almacenamiento Operaciones FP Operaciones FP Enteras/saltos


1 LD F0,0(R1) LD F6,-8(R1)
2
3 ADDD F4,F0,F2 ADDD F8,F6,F2
4
5
6 SD 0(R1),F4 SD -8(R1),F8 SUBI R1,R1,#16
7 BNEZ R1,Loop

Número de ciclos consumidos: 7


Número de operaciones realizadas: 8
Operaciones por ciclo: 8/7=1,14
Tamaño en memoria: 7 instrucciones * 20 bytes = 140 bytes
Espacio utilizado: 8 operaciones * 4 bytes = 32 bytes
% espacio desaprovechado: 77%
Ciclos ejecutados para 800 elementos: 7 ciclos * 400 iteraciones : 2800 ciclos
Instrucciones procesadas: 7 * 400 iteraciones: 2800 instrucciones

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 7/2


c) Lo primero que hay que realizar es obtener el patrón de ejecución con el objeto de visualizar el prólogo, el
patrón que se repite y el epílogo.

Iteracción 1 Iteracción 2 Iteracción 3 Iteracción 4 Iteracción 5 Iteracción 6


LD F0,0(R1)
LD F0,-8(R1)
ADDD F4,F0,F2 LD F0,-16(R1)
ADDD F4,F0,F2 LD F0,-24(R1)
ADDD F4,F0,F2 LD F0,-32(R1)
SD 0(R1),F4 ADDD F4,F0,F2 LD F0,-40(R1)
SD -8(R1),F4 ADDD F4,F0,F2
SD -16(R1),F4 ADDD F4,F0,F2
SD -24(R1),F4
SD -32(R1),F4
SD -40(R1),F4

Tras visualizar el esquema, hay que trasladarlo a las instrucciones VLIW del procesador disponible.

Carga/almacenamiento Carga/almacenamiento Operaciones FP Operaciones FP Enteras/saltos


LD F0,0(R1)
LD F0,-8(R1)
LD F0,-16(R1) ADDD F4,F0,F2
LD F0,-24(R1) ADDD F4,F0,F2
LD F0,-32(R1) ADDD F4,F0,F2
LD F0,-40(R1) SD 0(R1),F4 ADDD F4,F0,F2 SUBI R1,R1,#8 BNEZ R1,Loop
SD -8(R1),F4 ADDD F4,F0,F2
SD -16(R1),F4 ADDD F4,F0,F2
SD -24(R1),F4
SD -32(R1),F4
SD -40(R1),F4

Dado que la instrucción de comparación realiza la comparación con 0, es necesario reajustar los
desplazamientos de las instrucciones de carga/almacenamiento y el contenido del registro R1 con el objeto de
que el último elemento almacenado lo sea en la posición de memoria M[8] tal y como sucede en el bucle
original (observe en el bucle escalar original que se almacena en M[0+R1] y tras decrementar se comprueba
que R1 sea cero, en caso afirmativo el bucle concluye).

En este caso, el valor inicial de R1 debe ser R1 = R1-48 se procede al proceder al ajuste de los
desplazamientos de las instrucciones de carga/almacenamiento. Se tiene así:

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 8/2


Carga/almacenamiento Carga/almacenamiento Operaciones FP Operaciones FP Enteras/saltos
LD F0,48(R1)
LD F0,40(R1)
LD F0,32(R1) ADDD F4,F0,F2
LD F0,24(R1) ADDD F4,F0,F2
LD F0,16(R1) ADDD F4,F0,F2
LD F0,8(R1) SD 48(R1),F4 ADDD F4,F0,F2 SUBI R1,R1,#8 BNEZ R1,Loop
SD 48(R1),F4 ADDD F4,F0,F2
SD 40(R1),F4 ADDD F4,F0,F2
SD 32(R1),F4
SD 24(R1),F4
SD 16(R1),F4

Número de ciclos consumidos: 1 ciclo


Número de operaciones realizadas: 5 operaciones
Operaciones por ciclo: 5 operaciones/ciclo
Tamaño en memoria: 11 instrucciones * 20 bytes = 220 bytes
Espacio utilizado: 20 operaciones * 4 bytes = 80 bytes
Espacio desaprovechado: 63 %
Ciclos ejecutados para 800 elementos: 5 del prólogo + 5 del epílogo + 795 iteraciones de 1 ciclo : 805 ciclos
Instrucciones procesadas: 805 instrucciones

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 9/2


Solución al problema 3

a)

b) La distancia de Hamming para los procesadores 00000 y 11111 se calcula utilizando la operación XOR. Así
00000 ⊕ 11111 = 11111, siendo la distancia el número de bits a 1 en el resultado de dicha operación, es decir,
5. El esquema del camino más corto será

00000 → 00001 → 00011 → 00111 → 01111 → 11111

Dado que todos los bits de la distancia de Hamming entre ambos procesadores tiene valor 1, el camino más
corto se realizará cambiando todos los bits del procesador inicial de 0 a 1, desde el menos significativo al más
significativo.

c) La conectividad de arco de una red hipercubo se describe como “el menor número de arcos que deben
eliminarse para obtener dos redes disjuntas”. Esta conectividad se puede calcular como el log2(p). Dado que un
hipercubo de dimensión 5 tiene 32 procesadores, log2(32) = 5.

1ª semana - Nacional - Febrero - curso 2011/12 – Ingeniería de Computadores II - UNED 10/2


TIPO DE EXAMEN: 2a SEMANA- NACIONAL Y UNIÓN EUROPEA- FEBRERO 2012
Apellidos: .............................................................................................Nombre: ......................................... DNI: ................................... .

INSTRUCCIONES: Complete sus datos personales en la cabecera de esta hoja, y ENTRÉGUELA junto con el resto del examen.
Lea atentamente todos los enunciados.

Problema 1 (2 puntos)

Un procesador sin segmentación necesita 150 nseg. para procesar una instrucción. Con respecto a este
procesador, calcule la aceleración que se obtiene en los dos siguientes casos:

a) Un procesador A dotado de una segmentación de 7 etapas, consumiendo cada etapa el mismo tiempo.
Cada etapa ocasiona una sobrecarga de 6 nseg., no existiendo ningún tipo de detención en la
segmentación.
b) Un procesador B con una segmentación de 7 etapas, consumiendo cada una de ellas 30 nseg., 30
nseg., 40 nseg., 50 nseg. y 50 nseg. respectivamente, y siendo la sobrecarga por cada etapa de 6 nseg. Un
33% de todas las instrucciones de la segmentación son detenidas durante un ciclo de reloj y un 8%
durante dos ciclos.

Problema 2 (3 puntos)

En un procesador vectorial con las siguientes características:

Registros con una longitud vectorial máxima de 64 elementos.


Una unidad de suma vectorial con tiempo de arranque de 6 ciclos.
Una unidad de multiplicación con tiempo de arranque de 7 ciclos.
Una unidad de carga/almacenamiento con tiempo de arranque de 12 ciclos.
La frecuencia de trabajo del procesador es 500 MHz.
Tbase de 1 O ciclos y Tbucle de 15 ciclos.

se pretende ejecutar el siguiente bucle:

for (i=l; i<=n; i++)


A(i) .- x*A(i) + y*A(i);
end for;

Escriba el código vectorial que realizaría las operaciones ubicadas en el interior del bucle y calcule T,, T;ooo,
R10oo y Roo en los siguientes casos:

a) Sin considerar encadenamiento de resultados.


b) Permitiendo encadenamientos.
e) Considerando encadenamientos y dos unidades de multiplicación.

2• semana- Nacional y Unión Europea- Febrero- curso 2011/12- Ingeniería de Computadores 11 - UNED 112
Problema 3 (3 puntos)

Se dispone de un sistema biprocesador (CPUs A y B) de memoria compartida que utiliza un protocolo snoopy
de coherencia de caché. Sabiendo que la CPU B tiene cargada en caché la variable X y que la CPU A realiza
una lectura sobre la variable X (read (X)), seguida de una escritura sobre la misma variable (wri te (X)). Se
pide que:

a) Describa la secuencia de acciones de coherencia y las etiquetas de las cachés de cada procesador para
la variable X durante las instrucciones ejecutadas.
b) ¿Qué problemas pueden ocurrir en caso de necesitar que las operaciones realizadas por la CPU A se
realicen de manera atómica, es decir, que su resultado sea independiente de las posibles acciones
realizadas por la CPU B mientras la CPU A está ejecutando sus acciones?
e) Describa la secuencia de acciones de coherencia y las etiquetas de las cachés de cada procesador para
la variable X en cada uno de los posibles problemas.

2• semana- Nacional y Unión Europea- Febrero- curso 2011/12- Ingeniería de Computadores 11 - UNED 2/2
Problema 1 Febrero 2012 2ª (2 puntos) – Igual que actividad 1.3 del libro de texto.

Un procesador sin seg mentación necesita 150 nseg. para procesar una instru cción. Con respecto a este
procesador, calcular la aceleración que se obtiene en los dos casos siguientes:

a) Un procesador A dotado de una segm entación de 7 etapas, consumiendo cada etapa el m ismo tiempo.
Cada etapa ocasiona una sobrecarga de 6 nse g. no existiendo ningún tipo de detención en la
segmentación.

De acuerdo con el enunciado el tiem po medio de ej ecución de un a instrucción en el p rocesador sin


segmentar es de 150 nseg. La segmentación de 7 etapas de este apartado se caracteriza por acortar el tiempo
medio de ejecución de una instrucción a 27,43 nseg.:

150 nseg
 6 nseg  27, 43 nseg
7 etapas

Por lo tanto, la aceleración obtenida por la máquina A con respecto a la máquina sin segmentar es 5,47:

150 nseg
 5, 47 veces más rápido
27, 43 nseg

b) Un procesador B con una segm entación de 7 etapas, consumiendo cada una de ellas 30 nseg., 30 nseg.,
40 nseg., 50 nseg. y 50 nseg. respectivamente, y siendo la sobrecarga por cada etapa de 6 nseg. Un 33%
de todas las instrucciones de la segmentación son detenidas durante un ciclo de reloj y un 8% durante
dos ciclos.

La etapa más lenta es la que dicta la velocidad de la s restantes etapas, por lo que cada etapa consumirá 56
nseg. (50 nseg. más los 6 nseg. de retardo).

El 8% ocasiona una detención de dos ciclos, por lo que consumen 168 nseg.  3 ciclos  56 nseg  .
El 33% ocasiona una detención de un ciclo, consumiendo 112 nseg.  2 ciclos  56 nseg 
El 59%, no provocan detenciones, empleando sólo un ciclo de reloj (56 nseg.).

De acuerdo con esto, el tiempo medio consumido por una instrucción es:

0,33  56  2 nseg  0, 08  56  3 nseg  0,59  56 1 nseg  83, 44 nseg .

Por lo tanto, la aceleración obtenida por la máquina B con respecto a la máquina sin segmentar es de 1,8:

150 nseg
 1,8 veces más rápido
83, 44 nseg
Problema 2 Febrero 2ª Semana 2012 (3 puntos) - Igual que actividad 3.12 del libro de texto.

En un procesador vectorial con las siguientes características:

 Registros con una longitud vectorial máxima 64 elementos.


 Una unidad de suma vectorial con tiempo de arranque de 6 ciclos.
 Una unidad de multiplicación con tiempo de arranque de 7 ciclos.
 Una unidad de carga/almacenamiento vectorial con tiempo de arranque de 12 ciclos.
 La frecuencia del trabajo del procesador es 500 MHz.
 Tbase de 10 ciclos y Tbucle de 15 ciclos.

Se pretende ejecutar el siguiente bucle:

for (i=1; i<n; i++)


A(i):= x*A[i]+ y*A[i]);
end for;

Escriba el código vectorial que realizaría las operaciones ubicadas en el interior del bucle y calcule Tn,
T1000, R1000 y R∞ en los siguientes casos:

a) Sin considerar encadenamiento de resultados.


b) Permitiendo encadenamientos.
c) Considerando encadenamientos y dos unidades de multiplicación

a) Analizando los riesgos estructurales se obtiene el siguiente código vectorial:

Convoy 1: LV V1, R1 // Carga de A en V1


Convoy 2: MULTSV V2, F0, V1 // B := x * A
Convoy 3: MULTSV V3, F2, V1 // C := Y * A
Convoy 4: ADDV V4, V3, V2 // A := B+C
Convoy 5: SV R1, V4 // Almacenamiento de A
La secuencia de ejecución de los cinco convoyes si se considera que VLR es 64 es la que se muestra en la
siguiente figura.

Telemento = 5 ciclos

12 64
7 64
LV MULTSV
7 64
MULTSV
6 64
ADDV 64 12
SV

Dado que hay cinco convoyes, Telemento es 5 ciclos y el Tarranque total es igual a la suma de los tiempos de
arranque visibles de los cinco convoyes. Esto es

Tarranque = Tarranque LV + 2*Tarranque MULTSV + Tarranque ADDV + Tarranque SV

Tarranque = (12 + 2*7 + 6 + 12) ciclos = 44 ciclos


Sustituyendo los valores conocidos de Tarranque y Telemento en la expresión que determina el tiempo de
ejecución de un bucle vectorizado para vectores de longitud n se tiene

n
Tn  10     15  44   n  5
 64 

que para el caso particular de n=1000 es

1000 
T1000  10    15  44   5 1000  10  16  15  44   5 1000  5954 ciclos
 64 
3 1000 3000
R1000    0,5039 FLOP ciclo
T1000 5954

El rendimiento expresado en FLOP/ciclo es

 
 3n   3n 
R  lim    lim  
 n  n   10   n   15  44   5n 
n  T
  64  
 

Para simplificar los cálculos, la expresión  n / 64  se puede reemplazar por una cota superior dada por
n/64 1. Sustituyendo esta cota en Ry teniendo en cuenta que el número de operaciones vectoriales que
se realizan en el bucle DAXPY son dos, una multiplicación y una suma, se tiene

 
 3n   3n 
R  lim    lim    0,5066 FLOP / ciclo
n 
 10   n  1  15  44  5n  n  69  5,9219n 
     
  64  

Para expresar R en FLOPS, habría que multiplicar el valor en FLOP/ciclo por la frecuencia del
procesador. Se tendría así

R 0,506 FLOP/ciclo  (500 Hz

R  253 MFLOPS
b) Dado que ahora es posible encadenar los resultados de las unidades, la organización del código
vectorial en convoyes quedaría de la siguiente forma:

Convoy 1: LV V1, R1 // Carga de A en V1


MULTSV V2, F0, V1 // B := x * A
Convoy 2: MULTSV V3, F2, V1 // C := y * A
ADDV V4, V3, V2 // A := B + C
SV R1, V4 //Almacenamiento de A

El Telemento ha pasado a ser de 2 ciclos dado que ahora se tienen dos convoyes. El Tarranque total se obtiene
de sumar los tiempos de arranque visibles de las unidades funcionales. Si se analiza la figura se tiene

Tarranque = Tarranque LV + 2* Tarranque MULTV + Tarranque ADDV + Tarranque SV

Tarranque = (12 + 2*7 + 6 + 12) ciclos = 44 ciclos

Con estos valores la expresión del tiempo total de ejecución queda

n
Tn  10     15  44   n  2
 64 

que para el caso particular de n=1000 es

1000 
T1000  10    15  44   2 1000  10  16  15  44   2 1000  2954 ciclos
 64 

3 1000 3000
R1000    1, 0156 FLOP ciclo
T1000 2954

En lo que respecta al rendimiento expresado en FLOP por ciclo

   
 3n   3n   3n 
R  lim    lim    lim  
 n  n  10   n   15  44   2n  n   10   n  1  15  44   2n 
n  T
  64      
    64  

 3n 
lim   1, 0267 FLOP / ciclo
n  69  2,9219n 
 

Claramente se aprecia la mejora en el rendimiento del procesador gracias al encadenamiento de los


resultados entre las unidades funcionales.
c) Ahora es posible encadenar los resultados de las unidades y se dispone de dos unidades de
multiplicación:
Convoy 1: LV V1, R1 // Carga de A en V1
MULTSV V2, F0, V1 // B := x * A
MULTSV V3, F2, V1 // C := y * A
ADDV V4, V3, V2 // A := B + C
Convoy 2: SV R1, V4 //Almacenamiento de A

El Telemento ha pasado a ser de 2 ciclos dado que ahora se tienen dos convoyes. El Tarranque total se obtiene de
sumar los tiempos de arranque visibles de las unidades funcionales. Si se analiza la figura se tiene

Tarranque = Tarranque LV + Tarranque MULTV + Tarranque ADDV + Tarranque SV

Tarranque = (12 + 7 + 6 + 12) ciclos = 37 ciclos

Con estos valores la expresión del tiempo total de ejecución queda

n
Tn  10     15  37   n  2
 64 

que para el caso particular de n=1000 es

1000 
T1000  10    15  37   2 1000  10  16  15  37   2 1000  2842 ciclos
 64 

3 1000 3000
R1000    1, 0555 FLOP ciclo
T1000 2842

En lo que respecta al rendimiento expresado en FLOP por ciclo

   
 3n   3n   3n 
R  lim    lim    lim  
n  T
 n n 
  n   n 
  n  
 10   64   15  37   2n   10   64  1  15  37   2n 
       

 3n 
lim   1,315 FLOP / ciclo
n  69  2,8125n 
 
Problema 3 (3 puntos) Febrero 2012 2ª

Se dispone de un sistema biprocesador (CPUs A y B) de memoria compartida que utiliza un protocolo snoopy
de coherencia de caché. Sabiendo que la CPU B tiene cargada en caché la variable X y que la CPU A realiza
una lectura sobre la variable X ( read(X)), seguida de una escritura sobre la misma variable ( write(X)). Se
pide que:

a) Describa la secuencia de acciones de coherencia y las etiquetas de las cachés de cada procesador para
la variable X durante las instrucciones ejecutadas.
b) ¿Qué problemas pueden ocurrir en caso de necesitar que las operaciones realizadas por la CPU A se
realicen de manera atómica, es decir, que su resultado sea independiente de las posibles acciones
realizadas por la CPU B mientras la CPU A está ejecutando sus acciones?
c) Describa la secuencia de acciones de coherencia y las etiquetas de las cachés de cada procesador para
la variable X en cada uno de los posibles problemas.

Solución

a) La secuencia de acciones y etiquetas se describe en la siguiente tabla:

CPU A CPU B

Instrucciones Etiquetas Acciones


Etiquetas Acciones

inválida(X)
A: read(X) compartida(X)
C_lectura(X) compartida(X)
A: write(X) sucia(X)
C_escritura(X) Inválida X)

b) Los posibles problemas son que la CPU B realice una escritura o una lectura sobre la variable X justo después de
la lectura de la CPU A sobre X y antes de la escritura de la CPU A.

El caso de la lectura de la CPU B sobre X no presenta problemas ya que el valor que tiene la CPU A no se modifica
y las operaciones realizadas siguen siendo atómicas.

CPU A CPU B

Instrucciones Etiquetas Acciones


Etiquetas Acciones

inválida(X)
A: read(X) compartida(X)
C_lectura(X) compartida(X)
B: read(X) compartida(X)
compartida(X)
A: write(X) sucia(X)
C_escritura(X) inválida (X)

c) Sin embargo, el caso de una escritura de la CPU B sobre X, sí presenta problemas. La escritura de CPU B sobre
X invalida la copia de caché de la CPU A. Cuando la CPU A quiera realizar la escritura, el dato será servido por la
caché de la CPU B en lugar de la copia local de A, dando un resultado diferente del esperado (a no ser que el valor
escrito por B sea igual al escrito por A).

1/2
CPU A CPU B

Instrucciones Etiquetas Acciones


Etiquetas Acciones

inválida(X)
A: read(X) compartida(X)
C_lectura(X) compartida(X)
B: write(X) inválida(X)
sucia(X) C_escritura(X)
A: write(X) sucia(X)
C_escritura(X) inválida (X)

2/2
TIPO DE EXAMEN: ORIGINAL- NACIONAL- SEPTIEMBRE 2012
Apellidos: .............................................................................................Nombre: .........................................DNI: ................................... .

INSTRUCCIONES: Complete sus datos personales en la cabecera de esta hoja, y ENTRÉGUELA junto con el resto del examen.
Lea atentamente todos los enunciados. SE PERMITE UN LIBRO Y CALCULADORA NO PROGRAMABLE.

Problema 1 (3 puntos)

Utilizando el algoritmo de Tomasulo, muestre la evolución de los registros en coma flotante (FR) y las
estaciones de reserva (RS) para todos los ciclos que sean necesarios en la ejecución del siguiente fragmento de
código:

il: AOOO F6,F4,F2


i2: MULTO FO,F4,F6
i3: MULTO F6,F6,F2
i4: AOOO F2,F6,FO

Considere las siguientes hipótesis de partida:

Á Para reducir el número de ciclos máquina se permite que la FLOS distribuya hasta dos instrucciones en
cada ciclo según el orden del programa.
Á Una instrucción puede comenzar su ejecución en el mismo ciclo en que se distribuye a una estación de
reserva.
Á La operación suma tiene una latencia de un ciclo y la de multiplicación de dos ciclos.
Á Se permite que una instrucción reenvíe su resultado a instrucciones dependientes durante su último ciclo
de ejecución. De esta forma,una instrucción a la espera de un resultado puede comenzar su ejecución en
el siguiente ciclo si detecta una coincidencia.
Á Los valores de etiqueta O 1, 02 y 03 se utilizan para identificar las tres estaciones de reserva de la unidad
funcional de suma, mientras que 04 y 05 se utilizan para identificar las dos estaciones de reserva de la
unidad funcional de multiplicación/división. Estos valores de etiqueta son los ID de las estaciones de
reserva.
Á Inicialmente,el valor de los registros es F0=8.0, F2=3.5, F4=2.0 y F6=3.0

Problema 2 (4 puntos)
Suponga que un salto tiene la siguiente secuencia de resultados efectivos (E) y no efectivos (N):

E,E,E,N,N,E,E,E,N,N,E,E,E,N,N

Á Muestre mediante una tabla la secuencia de predicciones utilizando un contador de saturación de 1 bit
(predictor de Smith) para la secuencia dada. Suponga que el estado inicial del contador es efectivo (T­
Taken) .

Á Muestre mediante una tabla la secuencia de predicciones utilizando un contador de saturación de 2 bits
(predictor de Smith) para la secuencia dada. Suponga que el estado inicial del contador es fuertemente
efectivo (ST - Strongly Taken) .

Á ¿Cuál es la precisión de la predicción que han obtenido ambos contadores para la secuencia de saltos?

Original- Nacional- Septiembre- curso 2011/12- Ingeniería de Computadores 11- UNED 112
Problema 3 (3 puntos)

l. Dibuje una red de tipo crossbar de 8 x 8 elementos y describa cada uno de los componentes que forman
la red.

2. ¿Cuáles son las principales diferencias entre la red dibujada y una red bidimensional de tipo mesh
cuadrada de tamaño equivalente,es decir,que forme una matriz de 8 x 8?

3. Explique de manera razonada el cálculo del máximo tiempo de transferencia de un mensaje de 10


palabras en ambas redes (crossbar y mesh), teniendo en cuenta que el tiempo de inicialización del
mensaje son lüms, el tiempo de salto es lms y el tiempo de transferencia por palabra son 3ms. El
algoritmo de enrutamiento utilizado es store-and-forward.

Original- Nacional- Septiembre- curso 2011/12- Ingeniería de Computadores 11- UNED 2/2
Centro Asociado Palma de Mallorca

Septiembre
pi b
2012
Problema 1
Tutor: Antonio Rivero Cuesta

Mostrar la evolución de los Registros en coma


flotante (FR) y las estaciones de Reserva (RS)
para todos los ciclos que sean necesarios en la
ejecución del siguiente fragmento de código
utilizando el algoritmo de Tomasulo.
Tomasulo

i1: ADDD F6,F4,F2


i2
i2: MULTD F0,F4,F6
F0 F4 F6
i3: MULTD F6,F6,F2
, ,
i4: ADDD F2,F6,F0
• Considere las siguientes hipótesis de partida:

• Para reducir el número de ciclos máquina se


permite que la FLOS distribuya hasta dos
i
instrucciones
i en cada
d ciclo
i l según
ú ell orden
d del
d l
p g
programa.

• Una instrucción puede comenzar su ejecución


en el mismo ciclo en que se distribuye a una
estación de reserva.

• La operación suma tiene una latencia de un


ciclo y la de multiplicación de dos ciclos.
ciclos

• Se permite que una instrucción reenvíe su


resultado
l d a instrucciones
i i d
dependientes
di
j
durante su último ciclo de ejecución. De esta
forma una instrucción a la espera de un
resultado puede comenzar su ejecución en el
siguiente ciclo si se detecta una coincidencia.
• Los valores de etiqueta 01, 02 y 03 se utilizan
para identificar las tres estaciones de reserva
de la unidad funcional de suma, mientras que
04 y 05 se utilizan para identificar las dos
estaciones de reserva de la unidad funcional
d multiplicación/división.
de l i li ió /di i ió Estos
E valores
l d
de
etiqueta son los ID de las estaciones de
reserva.

• Inicialmente, el valor de los registros es


F0=8.0, F2=3.5, F4=2.0 y F6=3.0.

FR
Ciclo 1: Se
Ciclo1: Sedistribuyei1ei2
distribuye i1 e i2 bi O
bitOc. etiqueta
i d
dato
i1: ADDDF6,F4,F2
i2: MULTD F0,F4,F6 F0 Si 04 8.0
SeejecutaRS011/1
/ F2 35
3.5
SeenvíaRS01:5.5alCDB F4 2.0
NoseejecutaRS04
j
F6 Si 01 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

i1: 01 00 2.0 00 3.5 i2: 04 00 2.0 01 xx


02 05
03
MULT/DIV
SUMA
FR
Ciclo 2: Se
Ciclo2: Sedistribuyei3ei4
distribuye i3 e i4 bi O
bitOc. etiqueta
i d
dato
i3:MULTDF6,F6,F2
i4: ADDDF2,F6,F0 F0 Si 04 8.0
Seactualizael valordeRS01:5.5 F2 Si 02 35
3.5
SevacíaRS01 F4 2.0
SeejecutaRS041/2
SeejecutaRS051/2 F6 Si 05 30
3.0
NOseejecutaRS02

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 i2: 04 00 2.0 00 5.5
i4: 02 05 xx 04 xx i3: 05 00 5.5 00 3.5
03
MULT/DIV
SUMA

FR
Ciclo 3: Se
Ciclo3: SeejecutaRS042/2
ejecuta RS 04 2/2 bi O
bitOc. etiqueta
i d
dato
SeejecutaRS052/2
SeenvíaRS04:11.0alCDB F0 Si 04 8.0
S
SeenvíaRS05:19.25alCDB
í RS 05 19 25 l CDB F2 Si 02 35
3.5
NOseejecutaRS02 F4 2.0
F6 Si 05 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 i2: 04 00 2.0 00 5.5
i4: 02 05 xx 04 xx i3: 05 00 5.5 00 3.5

MULT/DIV
SUMA
FR
Ciclo 4: Se
Ciclo4: Seactualizael
actualiza el valordeRS04:11.0
valor de RS 04: 11 0 bi O
bitOc. etiqueta
i d
dato
Seactualizael valordeRS05:19.25
SevacíaRS04 F0 11.0
S
SevacíaRS05
í RS 05 F2 Si 02 35
3.5
SeejecutaRS021/1 F4 2.0
SeenvíaRS02:30.25alCDB
F6 19 25
19.25

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
i4: 02 05 19.25 04 11.0 05

MULT/DIV
SUMA

FR
Ciclo 5:
Ciclo5: Seactualizael
Se actualiza el valordeRS02:30.25
valor de RS 02: 30 25 bi O
bitOc. etiqueta
i d
dato
SevacíaRS02
F0 11.0
F2 30 25
30.25
F4 2.0
F6 19 25
19.25

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05

MULT/DIV
SUMA
Problema 2 Septiembre 2012 Original
Suponga que un salto tiene la siguiente secuencia de resultados efectivos (E) y no efectivos (N):
E, E, E, N, N, E, E, E, N, N, E, E, E, N, N
 Muestre mediante una tabla la secuencia de predicciones utilizando un contador de sat uración de 1 bit
(predictor de Smith) para la secuencia dada. Suponga que el estado inicial del contador es efectivo (T-
Taken).
 Muestre mediante una ta bla la secuencia de predicciones utilizando un contador de saturación de 2 bit s
(predictor de Smith) para la secuencia dada. Suponga que el estado inicial del contador es fuertemente
efectivo (ST – Strongly Taken).
 ¿Cuál es la precisión de la predicción que han obtenido ambos contadores para la secuencia de saltos?

Solución

La siguientes tablas muestra la evolución del contador de saturación de 1 y 2 bits, la predicción del salto, el
resultado real del salto, si la predicción fue correcta o no y la transición al siguiente estado.

Contador Predicción Resultado real ¿Predicción correcta? Siguiente estado


T E E Sí T
T E E Sí T
T E E Sí T
T E N No NT
NT N N Sí NT
NT N E No T
T E E Sí T
T E E Sí T
T E N No NT
NT N N Sí NT
NT N E No T
T E E Sí T
T E E Sí T
T E N No NT
NT N N Sí T

Dado que de las 15 predicciones ha habido 10 predicciones correctas, la precisión del predictor de 1 bit ha sido
del 66,67%.

1/2
Contador de 2 Predicción Resultado real ¿Predicción correcta? Siguiente estado
bits
ST E E Sí ST
ST E E Sí ST
ST E E Sí ST
ST E N No WT
WT E N No WN
WN N E No WT
WT E E Sí ST
ST E E Sí ST
ST E N No WT
WT E N No WN
WN N E No WT
WT E E Sí ST
ST E E Sí ST
ST E N No WT
WT E N No WN

Dado que de las 15 pr edicciones ha ha bido 7 predicciones co rrectas, la precisión del p redictor ha sido del
46,67%.

2/2
Problema 3 (puntos) Septiembre 2012 Nacional
1. Dibuje una red de tipo crossbar de 8 x 8 elementos y describa cada uno de los componentes que forman
la red.
2. ¿Cuáles son las principales diferencias entre la red dibujada y una red bidimensional de tipo mesh
cuadrada de tamaño equivalente, es decir, que forme una matriz de 8 x 8?
3. Explique de manera razonada el cálculo del máximo tiempo de transferencia de un mensaje de 10
palabras en ambas redes (crossbar y mesh), teniendo en cuenta que el tiempo de inicialización del
mensaje son 10ms, el tiempo de salto es 1ms y el tiempo de transferencia por palabra son 3ms. El
algoritmo de enrutamiento utilizado es store-and-forward.
Solución

1. Los elementos de la red son los procesadores (representados por P1...P8), los elementos de memoria
(representados por M1...M8), los conmutadores (representados con círculos) y las líneas de conexión
entre conmutadores (representadas por líneas).

2. Las principales diferencias son el número de elementos conectados y el tipo de conexión entre ellos. En
el caso de la red crossbar se conectan 8 procesadores con 8 elementos de memoria (16 elementos en
total), y en el caso de la red mesh se conectan 64 elementos. Las conexiones de la red crossbar se
pueden considerar punto a punto, mientras que las conexiones de la red mesh dependen del número de
saltos que se deba realizar entre los elementos que se desea comunicar.

3. Utilizando el algoritmo de enrutamiento store-and-forward, el tiempo de transferencia de un mensaje


sigue la siguiente fórmula:
t = ts+(m* tw + th)*l

donde t es el tiempo de transferencia del mensaje, ts es el tiempo de inicialización, m es el tamaño del


mensaje, tw el tiempo de transferencia por palabra, th el tiempo de salto y l el número de saltos.

Para el caso de la red crossbar, sabemos que las comunicaciones entre cualquiera de los elementos
requieren de un único salto, por lo que la transferencia del mensaje será

10 + (10*3 + 1)*1 = 41ms.

En el caso de la red mesh, el máximo número de saltos corresponde al diámetro de la red que en este
caso es 14. Por tanto,
10 + (10*3 +1)*14 = 444ms
1/1
2012
Problema 1 septiembre 2012 reserva. Igual que actividad 1.2 del libro de texto

Tras añadir un nuevo procesador a un computador se logra un aumento de la velocidad de ejecución en


un factor 9. Se observa que tras aplicar esta m ejora, el 55% del tiem po de ejecución se está utilizando
el nuevo procesador. ¿Qué porcentaje del tiempo de ejecución original se ha reducido gracias a la
mejora?

El recurso utilizado mejora en 9 el rendimiento.

Porcentaje del tiempo de ejecución que se aplica la mejora = 55%

Suponiendo que norm alizamos el tiem po actual de ejec ución a 1 (esto es, apli cando la m ejora), el
tiempo total de ejecución antes de aplicar la mejora es:

Toriginal = 0.45 + (0.55*9) = 5.4

Por lo tanto, la ganancia obtenida aplicando la mejora es del 5,4.

Sustituyendo en la expresión de la ganancia:

p 9
Sp   5, 4   f  8,3%
1  f ( p  1) 1  f (9  1)

(f es la fracción del tiempo donde no se puede aplicar la mejora).

Por lo tanto, el porcentaje de tiempo que se ha convertido al modo rápido es:

(100%-8.3%) = 91.7%
Problema 2 Septiembre 2012 reserva

Considere un sencillo procesador superescalar dotado de un RRF con acceso indexado y con dos estaciones de
reserva de 4 entradas asociadas, respectivamente, a una unidad de multiplicación (3 ciclos, segmentada) y a dos
unidades funcionales de suma/resta (2 ciclos, ambas segmentadas). Suponga que las instrucciones siguientes:
i1: MULTD F3,F1,F2
i2: ADDD F2,F3,F1
i3: SUBD F3,F3,F1
i4: ADDD F5,F1,F2
se distribuyen, a razón de una por ciclo, a las dos estaciones de reserva y se emiten en cuanto sus operandos
están disponibles. Teniendo en cuenta que se pueden emitir y terminar dos instrucciones simultáneamente, se
pide:

a) Un cronograma con la secuencia temporal de ejecución de las instrucciones en el que, ciclo a ciclo, se puede
apreciar cuándo se distribuyen, cuándo se emiten y cuándo finaliza su ejecución en las unidades funcionales.

b) Dibuje, ciclo a ciclo, cómo evolucionan los contenidos del ARF y del RRF para esas instrucciones si,
inicialmente, F1=2.0 y F2=3.0. El ARF y el RRF constan de cinco entradas. La secuenciación de los ciclos
debe coincidir con la del apartado anterior.

Solución

a) La secuencia temporal de ejecución de las cuatro instrucciones es la siguiente:

0 1 2 3 4 5 6 7 8
i1:MULTD F3, F1, F2
i2: ADDD F2, F3, F1
i3: SUBD F3, F3, F1
i4: ADDD F5, F1, F2

Se considera que en el ciclo 0 se distribuya la primera instrucción a la estación de reserva. Observe que aunque
las instrucciones ya se encuentren en las estaciones de reserva listas para ser emitidas a las unidades
funcionales, deben esperar a que se generen los operandos con el fin de respetar las dependencias verdaderas.

1/3
b)

Ciclo 0: Llegada de i1 a la estación de reserva.


Renombramiento de F3 como Fr1.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 -- 0 1
F2 3 Fr2
F3 1 1 Fr3
F4 Fr4
F5 Fr5

Ciclo 1: Llegada de i2 a la estación de reserva.


Renombramiento de F2 como Fr2.
Emisión a la unidad funcional y comienzo de ejecución de i1.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 0 1
F2 3 1 2 Fr2 0 1
F3 1 1 Fr3
F4 Fr4
F5 Fr5

Ciclo 2: Llegada de i3 a la estación de reserva.


Nuevo renombramiento de F3 como Fr3.
Segundo ciclo de ejecución de i1.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 0 1
F2 3 1 2 Fr2 0 1
F3 1 3 Fr3 0 1
F4 Fr4
F5 Fr5

Ciclo 3: Llegada de i4 a la estación de reserva.


Renombramiento de F5 como Fr4.
Finalización de i1.
Escritura de resultado en Fr1 y copia a estaciones de reserva para emisión de i2 e i3.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 6 1 1
F2 3 1 2 Fr2 0 1
F3 1 3 Fr3 0 1
F4 Fr4 0 1
F5 1 4 Fr5

Ciclo 4: Emisión de i2 e i3.


Liberación de Fr1.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 6 1 0
F2 3 1 2 Fr2 0 1
F3 1 3 Fr3 0 1
F4 Fr4 0 1
F5 1 4 Fr5

2/3
Ciclo 5: Finalización de i2. Escritura de resultado en Fr2.
Finalización de i3. Escritura de resultado en Fr3.
Copia del valor de Rf2 en entrada de la instrucción i4 para poder emitirla.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 6 1 0
F2 3 1 2 Fr2 8 1 1
F3 1 3 Fr3 4 1 1
F4 Fr4 0 1
F5 1 4 Fr5

Ciclo 6: Emisión de i4.


Escritura de resultado de Fr2 en F2. Liberación de Fr2.
Escritura de resultado en Fr3 en F3. Liberación de Fr3.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 6 0 0
F2 8 0 2 Fr2 8 1 0
F3 4 0 3 Fr3 4 1 0
F4 Fr4 0 1
F5 1 4 Fr5

Ciclo 7: Finalización de i4.


Escritura de resultado en Fr4.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 Fr1 6 0 0
F2 8 0 2 Fr2 8 1 0
F3 4 0 3 Fr3 4 1 0
F4 Fr4 10 1 1
F5 1 4 Fr5

Ciclo 8: Escritura de Fr4 en F5. Liberación de Fr4.

Datos Ocupado Indice Datos Válido Ocupado


F1 2 0 Fr1 6 0 0
F2 8 0 2 Fr2 18 1 0
F3 4 0 3 Fr3 4 1 0
F4 0 Fr4 10 1 0
F5 10 0 4 Fr5

3/3
Problema 3 septiembre Reserva 2012. Igual que actividad 4.3 del libro de texto

1. Dibuje una red de tipo Omega de 16 entradas y 16 salidas.


2. Describa razonadamente el protocolo para enviar un mensaje desde el nodo de entrada 3 al nodo de
salida 9.
3. Suponiendo que el tercer conmutador de la segunda etapa no funciona correctamente (impidiendo de
esta manera cualquier tipo de conexión donde esté involucrado), indique el número y las conexiones
que quedan bloqueadas, y qué porcentaje representan respecto del total de la red.

0000 0000

0001 0001
0010 0010

0011 0011
0100 0100

0101 0101
0110 0110

0111 0111
1000 1000

1001 1001
1010 1010

1011 1011
1100 1100

1101 1101
1110 1110

1111 1111

Para ir del procesador 0011 al 1001:


Se coge el procesador de destino 1001 y desde el procesador origen 0011

1 INFERIOR
0 SUPERIOR
0 SUPERIOR
1 INFERIOR

Es lo que está en trazo grueso en ROJO en la figura.


2013
Centro Asociado Palma de Mallorca

Febrero
b
2013 – 1ª
Problema 1
Tutor: Antonio Rivero Cuesta

Mostrar la evolución de los Registros en coma


flotante (FR) y las estaciones de Reserva (RS)
para todos los ciclos que sean necesarios en la
ejecución del siguiente fragmento de código
utilizando el algoritmo de Tomasulo.
Tomasulo

i1:MULTDF0,F6,F2
i2: ADDD F4 F2 F6
i2:ADDDF4,F2,F6
i3:ADDDF6,F4,F0
i4:ADDDF2,F6,F0
• Considere las siguientes hipótesis de partida:

• Para reducir el número de ciclos máquina se


permite que la FLOS distribuya hasta dos
i
instrucciones
i en cada
d ciclo
i l según
ú ell orden
d del
d l
p g
programa.

• Una instrucción puede comenzar su ejecución


en el mismo ciclo en que se distribuye a una
estación de reserva.

• La operación suma tiene una latencia de un


ciclo y la de multiplicación de dos ciclos.
ciclos

• Se permite que una instrucción reenvíe su


resultado
l d a instrucciones
i i d
dependientes
di
j
durante su último ciclo de ejecución. De esta
forma una instrucción a la espera de un
resultado puede comenzar su ejecución en el
siguiente ciclo si se detecta una coincidencia.
• Los valores de etiqueta 01, 02 y 03 se utilizan
para identificar las tres estaciones de reserva
de la unidad funcional de suma, mientras que
04 y 05 se utilizan para identificar las dos
estaciones de reserva de la unidad funcional
d multiplicación/división.
de l i li ió /di i ió Estos
E valores
l d
de
etiqueta son los ID de las estaciones de
reserva.

• Inicialmente, el valor de los registros es


F0=2.0, F2=2.5, F4=8.0 y F6=4.0.

FR
i1: MULTDF0,F6,F2
MULTD F0 F6 F2 bi O
bitOc. etiqueta
i d
dato
i2: ADDDF4,F2,F6 F0 2.0
i3: ADDD F6 F4 F0
ADDDF6,F4,F0 F2 25
2.5
i4: ADDDF2,F6,F0 F4 8.0
F6 40
4.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05
03
MULT/DIV
SUMA
FR
Ciclo 1: Se
Ciclo1: Sedistribuyei1ei2
distribuye i1 e i2 bi O
bitOc. etiqueta
i d
dato
i1: MULTDF0,F6,F2
i2: ADDD F4,F2,F6 F0 Si 04 2.0
SeejecutaRS011/1 F2 25
2.5
SeejecutaRS041/2 F4 Si 01 8.0
SeenvíaRS01:6.5alCDB
Se e a S0 65a C
F6 40
4.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i2: 01 00 2.5 00 4.0 i1: 04 00 4.0 00 2.5
02 05
03
MULT/DIV
SUMA

FR
Ciclo 2:
Ciclo2: Sedistribuyei3ei4
Se distribuye i3 e i4 bi O
bitOc. etiqueta
i d
dato
i3:ADDD F6,F4,F0
i4: ADDD F2,F6,F0 F0 Si 04 2.0
Seactualizael valordeRS01:6.5 F2 Si 03 25
2.5
SevacíaRS01 F4 6.5
SeejecutaRS042/2
Se ejecuta S 0 /
F6 Si 02 40
4.0
SeenvíaRS04:10.0alCDB
NOseejecutaRS02,03

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 i1: 04 00 4.0 00 2.5
i3: 02 04 xx 00 6.5 05
i4: 03 02 xx 00 6.5
MULT/DIV
SUMA
FR
Ciclo 3: Se
Ciclo3: Seactualizael
actualiza el valordeRS04:10.0
valor de RS 04: 10 0 bi O
bitOc. etiqueta
i d
dato
SevacíaRS04
SeejecutaRS021/1 F0 10.0
SeenvíaRS02:16.5alCDB F2 Si 03 25
2.5
NOseejecutaRS03 F4 6.5
F6 Si 02 40
4.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
i3: 02 04 10.0 00 6.5 05
i4: 03 02 xx 00 6.5
MULT/DIV
SUMA

FR
Ciclo 4:
Ciclo4: Seactualizael
Se actualiza el valordeRS02:16.5
valor de RS 02: 16 5 bi O
bitOc. etiqueta
i d
dato
SevacíaRS02
SeejecutaRS031/1 F0 10.0
SeenvíaRS03:23.0alCDB F2 Si 03 25
2.5
F4 6.5
F6 16 5
16.5

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05
i4: 03 02 16.5 00 6.5
MULT/DIV
SUMA
FR
Ciclo 5: Se
Ciclo5: Seactualizael
actualiza el valordeRS03:23.0
valor de RS 03: 23 0 bi O
bitOc. etiqueta
i d
dato
SevacíaRS03
F0 10.0
F2 23 0
23.0
F4 6.5
F6 16 5
16.5

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05
03
MULT/DIV
SUMA
Problema 2 Febrero 2013 1ª Semana

Dado el siguiente código:

inicio: LD F0,0(R2) % i1
LD F2,0(R4) % i2
LD F4,0(R6) % i3
ADDD F0,F0,F2 % i4
ADDD F0,F0,F4 % i5
DIVD F0,F0,F8 % i6
SD 0(R1),F0 % i7
ADDI R2,R2,#8 % i8
ADDI R4,R4,#8 % i9
ADDI R6,R6,#8 % i10
ADDI R1,R1,#8 % i11
JUMP inicio % i12

a) Obtenga el diagrama de flujo de datos de la secuencia. Considere que todas las instrucciones tienen una
latencia de 2 ciclos.

b) Transforme la secuencia en instrucciones VLIW para que pueda ser ejecutada por un procesador con un
formato de instrucción que permite emitir simultáneamente operaciones a cualquiera de las cuatro unidades
funcionales (son polivalentes). Considere las mismas latencias que en el apartado anterior y que puede efectuar
los reordenamientos que crea oportunos, siempre que no afecten al resultado.

c) Desenrolle el bucle original 4 veces y planifíquelo en forma de instrucciones VLIW teniendo en cuentas las
características del procesador y las latencias. Utilice todos los registros que sean necesarios y compacte el
código VLIW lo máximo posible.

d) ¿Qué mejora en el rendimiento se ha obtenido si se compara el código del apartado b con el del c?

1/2
Solución

a)
i1 i2
2
2 2 2

i8 i4 i3 i9

2 2
2

i5 i10

2 2

i6 2 2

i7

i11

i12

b) Son posibles varias soluciones según se realice el ordenamiento de las operaciones en las instrucciones. En la
solución que se propone, se han agrupado las instrucciones de incremento de los índices con la salvedad de R1.
Si se optase por incrementar R1 antes de la instrucción de almacenamiento SD 0(R1), F0 sería necesario
realizar un decremento negativo para compensar, es decir, SD -8(R1), F0.

Unidad funcional 1 Unidad funcional 2 Unidad funcional 3 Unidad funcional 4


inicio: LD F0, 0(R2) LD F2, 0(R4) LD F4, 0(R6) ADDI R2, R2, #8
ADDI R4, R4, #8
ADDD F0, F0, F2 ADDI R6, R6, #8

ADDD F0, F0, F4

DIVD F0, F0, F8

SD 0(R1), F0 ADDI R1, R1, #8 JMP inicio

2/2
c) La secuencia de código que se obtiene tras desenrrollar 4 veces el bucle original es la siguiente:

inicio: LD F0,0(R2) // Iter 1


LD F2,0(R4) // Iter 1
LD F4,0(R6) // Iter 1
LD F10,8(R2) // Iter 2
LD F12,8(R4) // Iter 2
LD F14,8(R6) // Iter 2
LD F20,16(R2) // Iter 3
LD F22,16(R4) // Iter 3
LD F24,16(R6) // Iter 3
LD F30,24(R2) // Iter 4
LD F32,24(R4) // Iter 4
LD F34,24(R6) // Iter 4
ADDD F0,F0,F2 // Iter 1
ADDD F0,F0,F4 // Iter 1
DIVD F0,F0,F8 // Iter 1
ADDD F10,F10,F12 // Iter 2
ADDD F10,F10,F14 // Iter 2
DIVD F10,F10,F8 // Iter 2
ADDD F20,F20,F22 // Iter 3
ADDD F20,F20,F24 // Iter 3
DIVD F20,F20,F8 // Iter 3
ADDD F30,F30,F32 // Iter 4
ADDD F30,F30,F34 // Iter 4
DIVD F30,F30,F8 // Iter 4
SD 0(R1),F0 // Iter 1
SD 8(R1),F10 // Iter 2
SD 16(R1),F20 // Iter 3
SD 24(R1),F30 // Iter 4
ADDI R2,R2,#32
ADDI R4,R4,#32
ADDI R6,R6,#32
ADDI R1,R1,#32
JUMP inicio

Una transformación en código VLIW realizando la máxima compactación posible se muestra en la siguiente
tabla. Los colores representan: 1ª iteración (negro) e instrucciones auxiliares, 2ª iteración (rojo), 3ª iteración
(verde), 4ª iteración (morado).

Unidad funcional 1 Unidad funcional 2 Unidad funcional 3 Unidad funcional 4


inicio: LD F0, 0(R2) LD F2, 0(R4) LD F10, 8(R2) LD F12, 8(R4)
LD F20, 16(R2) LD F22, 16(R4) LD F30, 24(R2) LD F32, 24(R4)
ADDD F0, F0, F2 LD F4, 0(R6) ADDD F10, F10, F12 LD F14, 8(R6)
ADDD F20, F20, F22 LD F24, 16(R6) ADDD F30, F30, F32 LD F34, 24(R6)
ADDD F0, F0, F4 ADDD F10, F10, F14
ADDD F20, F20, F24 ADDD F30, F30, F34
DIVD F0, F0, F8 DIVD F10, F10, F8 ADDI R2, R2, #32
DIVD F20, F20, F8 DIVD F30, F30, F8 ADDI R4, R4, #32
SD 0(R1), F0 SD 8(R1), F10 ADDI R6, R6, #32
SD 16(R1), F20 ADDI R1, R1, #32 SD 24(R1), F30 JMP inicio

d) El código consume 10 instrucciones VLIW ocupando un total de 160 bytes (10 instrucciones * 16 bytes por
instrucción). En comparación con el código VLIW sin desenrrollar, el rendimiento, prácticamente, se ha
incrementado por 4 ya que el número de ciclos por iteración es de 11 en comparación con el caso sin
desenrrollar que es 10 ciclos pero procesando 1 único elemento, y no 4 como en el caso que nos ocupa.

3/2
Problema 3 Febrero 2013 1ª Semana

Considere el siguiente segmento de código que se ejecuta en el cuerpo principal de un bucle:


if (x es par) then // salto S1
incrementar a; // salto S1 tomado
if (x es múltiplo de 10) then // salto S2
incrementar b; // salto S2 tomado

y que la siguiente lista de 9 valores para la variable x es procesada en 9 iteraciones del bucle: 8, 9, 10, 11, 12,
20, 29, 30, 31. La máquina de estados situada a continuación representa una ligera variante de un predictor de
Smith de 2 bits de historial y se utiliza para predecir la ejecución de los saltos que hay en el código.

¿Cuál es la secuencia de predicciones para los salto S1 y S2 en cada iteracción del bucle? Tenga en cuenta que
el historial de cada salto es exclusivo de ese salto y no se debe mezclar con el historial del otro salto.

Solución

Para la resolución del ejercicio es fundamental entender el diagrama de estados que muestra el enunciado.
Básicamente, el diagrama indica en función del resultado del salto actual y del historial de los dos saltos
previos, la predicción de lo que va a ocurrir con el siguiente salto. Es clave separar los historiales de cada
instrucción de salto, es decir, la evolución de la predicción de cada salto es independiente del otro.

Páginas 227 y 228 y ejercicio 5.7 del texto base de la asignatura.

En la siguiente secuencia se puede apreciar la diferencia entre la predicción que se realiza de la efectividad o
no del salto S1 y S2 y la situación real que se produce.

8 9 10 11 12 20 29 30 31
Estado: NN NE EN NE EN NE EE EN NE
S1 predicho: N E E E E E E E E
S1 real: E N E N E E N E N

Estado: NN NN NN NE EN NN NE EN NE
S2 predicho: N N N E E N E E E
S2 real: N N E N N E N E N

Para el salto S1:


1/2
Inicialmente, el autómata se encuentra en el estado NN, es decir, predice que el siguiente salto no se tomará
(N). El primer valor de x es 8 (par) lo que provoca que el salto sea efectivo, con lo que se alimenta al
autómata con el valor E y se avanza al estado NE, indicando que la predicción para el próximo salto es que se
produzca (salida E). Estando en ese estado, el valor de x pasa a ser 9 por lo que no se produce el salto (entrada
N al autómata) y se pasa al estado EN que predice que el próximo salto sí se producirá (salida E). Así se sigue
hasta completar la secuencia de valores de x.

Para el salto S2:

Igual que en el caso anterior, el autómata se encuentra en el estado NN pero permanece en ese estado hasta que
x es 10; en ese momento salta al estado NE y…..

2/2
2013
Problema 1 Febrero 2ª Semana 2013 (3 puntos) - Igual que actividad 4.4 del libro de texto.

Dada la siguiente red estática:

1 2

3 4

a) ¿Qué tipo de red es?

Es una red estática hipercubo de dimensión 4.

b) Se desea transm itir un mensaje desde el p rocesador a = 0101 al pro cesador b = 1010. Si se
comienza a buscar el cam ino por el bit m enos significativo, explique razo nadamente cuál es el
camino que debe seguir el mensaje.

La distancia Hamming: 0101  1010  1111 . Es 4, porque tenemos cuatro unos. Por lo tanto:

Del nodo 0101 nos movemos a 0100


Del nodo 0100 nos movemos a 0110
Del nodo 0110 nos movemos a 0010
Del nodo 0010 nos movemos a 1010
c) Dibuje una red estática con los siguientes valores en sus parámetros:

Diámetro = 4; Conectividad de arco = 4; Coste = 50.

Se trata de una red bidimensional mesh cerrada.


Problema 2 Febrero 2013 2ª Semana

Dado el siguiente fragmento de código:

ADDI R5,R0,#1
LD R6,0(R5)
LD R8,8(R5)
LD R9,16(R5)
LD R7,24(R5)
ADD R1,R8,R9
ADD R8,R9,R7
SD 0(R8),R1
LD R8,0(R6)

a) Señale todas las dependencias de datos existentes en el fragmento.


b) ¿Existen dependencias de memoria? En caso afirmativo indique cuáles y a qué se deben.
c) Renombre el código e indique qué dependencias permanecen.
d) ¿Cómo se gestionan en un procesador superescalar las dependencias de datos y de memoria que
permanecen tras el renombramiento?

Solución

a) En el fragmento de código, las dependencias de datos existentes son:

i1: ADDI R5,R0,#1


i2: LD R6,0(R5) // dependencia RAW con i1 por R5
i3: LD R8,8(R5) // dependencia RAW con i1 por R5
i4: LD R9,16(R5) // dependencia RAW con i1 por R5
i5: LD R7,24(R5) // dependencia RAW con i1 por R5
i6: ADD R1,R8,R9 // dependencia RAW con i3 por R8
// dependencia RAW con i4 por R9
i7: ADD R8,R9,R7 // dependencia RAW con i4 por R9
// dependencia RAW con i5 por R7
// dependencia WAR con i6 por R8
// dependencia WAW con i3 por R8
i8: SD 0(R8),R1 // dependencia RAW con i6 por R1
// dependencia RAW con i3 por R8
// dependencia RAW con i7 por R8
i9: LD R8,0(R6) // dependencia RAW con i2 por R6
// dependencia WAW con i3 por R8
// dependencia WAW con i7 por R8
// dependencia WAR con i6 por R8
// dependencia WAR con i8 por R8

b) Existen dependencias ambiguas de memoria de las instrucciones i2, i3, i4 e i5 con i8. Las instrucciones
de carga i2, i3, i4 e i5 leen las posiciones de memoria M[0+R5], M[8+R5], M[16+R5], y M[24+R5],
respectivamente, mientras que la instrucción de almacenamiento i8 tiene que escribir en M[0+R8], lo que
implica la existencia de un riesgo WAR.

Entre la instrucción i8 e i9 existe otra dependencia ambigua de tipo RAW ya que se puede dar el caso de que
el contenido de R8 y R5 coincidan y, por lo tanto, el destino y fuente de ambas instrucciones.

1/2
c) El código con los registros renombrados y en el que han desaparecido las dependencias falsas de datos es:

i1: ADDI Rr1,R0,#1


i2: LD Rr2,0(Rr1) // dependencia RAW con i1 por Rr1
i3: LD Rr3,8(Rr1) // dependencia RAW con i1 por Rr1
i4: LD Rr4,16(Rr1) // dependencia RAW con i1 por Rr1
i5: LD Rr5,24(Rr1) // dependencia RAW con i1 por Rr1
i6: ADD Rr6,Rr3,Rr4 // dependencia RAW con i3 por Rr3
// dependencia RAW con i4 por Rr4
i7: ADD Rr7,Rr4,Rr5 // dependencia RAW con i4 por Rr4
// dependencia RAW con i5 por Rr5
i8: SD 0(Rr7),Rr6 // dependencia RAW con i6 por Rr6
// dependencia RAW con i7 por Rr7
i9: LD Rr9,0(Rr2) // dependencia RAW con i3 por Rr3
// dependencia RAW con i2 por Rr2

d) Las dependencias de datos RAW se elimina mediante el mecanismo que establecen las estaciones de reserva
y que obligan a que los operandos están disponibles para poder emitir una instrucción.

El renombramiento de registros no elimina ninguna de las dependencias de memoria ya que al emitirse la


instrucciones no es posible conocer si hay coincidencia en las direcciones. Para eliminar las dependencias de
memoria falsas se establece el mecanismo de terminación ordenada con el buffer de almacenamiento. Las
WAW se evitan, claramente, mediante un almacenamiento ordenado. Los riesgos WAR se evitan garantizando
que una instrucción de almacenamiento posterior en el código a una carga, no escribe antes en memoria gracias
al almacenamiento diferido.

Los riesgos de memoria RAW se gestionan mediante hardware adicional que permite la detección de la
coincidencia de memoria y el reenvío del dato del almacenamiento (origen) hacia la carga (destino).

2/2
Problema 3 Febrero 2013 2

En un procesador vectorial con las siguientes características:

 Registros con una longitud vectorial máxima de 64 elementos.


 Una unidad de suma vectorial con tiempo de arranque de 6 ciclos.
 Una unidad de multiplicación con tiempo de arranque de 7 ciclos.
 Una unidad de carga/almacenamiento con tiempo de arranque de 12 ciclos.
 La frecuencia de trabajo del procesador es 100 MHz.
 Tbase de 10 ciclos y Tbucle de 15 ciclos.

se pretende ejecutar el siguiente código vectorial para un vector con una longitud de 64 elementos:

LV V1,R1
MULTV V2,V1,V3
MULTSV V4,V2,F0
SV R2,V4

a) Suponiendo que no existe encadenamiento entre las unidades, calcule R100 , T100 y R∞ .

b) Una medida habitual del impacto de los costes adicionales es N1/ 2 que es la longitud del vector necesaria
para alcanzar la mitad del valor de R∞ . Calcule N1/ 2 .

c) Ahora dispone de encadenamiento entre las unidades funcionales y solapamiento entre convoyes dentro de la
misma iteración. ¿Cuál es el nuevo valor de ciclos por elemento?

Solución

a) Analizando los riesgos estructurales se obtiene el siguiente código vectorial:

Convoy 1: LV V1, R1
Convoy 2: MULTV V2, V1, V3
Convoy 3: MULTSV V4, V2, F0
Convoy 5: SV R2, V4

La secuencia de ejecución de los cuatro convoyes si se considera que VLR es 64 es la que se muestra en la
siguiente figura.

Telemento= 4 ciclos

12 64
LV
7 64
MULTV
7 64
MULTSV
64 12
SV

Dado que hay 4 convoyes, Telemento es 4 ciclos y el Tarranque total es igual a la suma de los tiempos de
arranque visibles de los cuatro convoyes. Esto es

Tarranque = Tarranque LV + 2*Tarranque MULTV + Tarranque SV

1/2
Tarranque = (12 + 2*7 + 12) ciclos = 38 ciclos

Sustituyendo los valores conocidos de Tarranque y Telemento en la expresión que determina el tiempo de
ejecución de un bucle vectorizado para vectores de longitud n se tiene

 n
Tn = 10 +   ⋅ (15 + 38) + 4 ⋅ n
 64 

que para el caso particular de n=100 es

 100 
T100 = 10 +  ⋅ (15 + 38) + 4 ⋅ 100
 64 
T100 = 10 + 2 ⋅ (15 + 38) + 4 ⋅ 100
T1000 = 516 ciclos
2 ⋅ 100 200
R100 = = = 0.3875 FLOP ciclo
T100 516

El R∞ expresado en FLOP/ciclo es

 2⋅ n 
R∞ = lim 
n→ ∞ T
 n 
 
 
2⋅ n
R∞ = lim 
n→ ∞   n 
 10 +  64  ⋅ (15 + 38) + 4 ⋅ n 
 

Para simplificar los cálculos, la expresión  n / 64 se puede reemplazar por una cota superior dada por
( n / 64 + 1) . Sustituyendo esta cota en R∞ y teniendo en cuenta que el número de operaciones vectoriales que se
realizan es de dos, una multiplicación vectorial y una multiplicación vectorial-escalar, se tiene

 
 
2⋅ n
R∞ = lim 
n→ ∞   n  
 10 +  + 1 ⋅ (15 + 38) + 4 ⋅ n 
  64  
 2⋅ n 
R∞ = lim 
n → ∞ 63 + 4,828 ⋅ n
 
R∞ = 0,41425 FLOP/ciclo

Para expresar R∞ en FLOPS, habría que multiplicar el valor en FLOP/ciclo por la frecuencia del procesador. Se
tendría así

R∞ = 0,41425 FLOP/ciclo ⋅ (100 ⋅ 106 )Hz


R∞ = 41,425 MFLOPS

R∞
b) Tal y como indica el enunciado, N1/ 2 es el número de elementos tal que RN1 / 2 = . Tendremos así:
2

R∞ 0,41425 FLOP/ciclo
R N1 / 2 = = = 0,207125 FLOP/ciclo
2 2
2/2
Por otra parte, sabemos que:
(Operaciones en coma flotante ⋅ n elementos)
Rn =
Tn
2⋅ n
Rn =
 n
10 +   ⋅ (15 + 38) + 4 ⋅ n
 64 
2⋅ n
Rn =
 n 
10 +  + 1 ⋅ (15 + 38) + 4 ⋅ n
 64 
2⋅ n
Rn =
63 + 4,828 ⋅ n

Basta con igualar las expresiones anteriores de RN1 / 2 y Rn para obtener el valor de n que las satisface:

2⋅ n
= 0,207125 FLOP/ciclo
63 + 4,828 ⋅ n
n = 13,05
Por lo tanto, N1/ 2 = 13 .

c) Para calcular Telemento en situaciones con solapamiento hay que recordar que:

Telemento = (Tn − Tarranque ) / n

Por un lado, tenemos el siguiente diagrama de ejecución:


T elemento = 1,89 ciclos

12 64
LV
7 64
MULTV
7 64
MULTSV
64 12
SV

0 12 19 76 83 147 159

que nos indica que el tiempo total de ejecución utilizando un VLR de 64 es 159 ciclos.

El tiempo de arranque total visible es:

Tarranque = Tarranque LV + 2*Tarranque MULTV + Tarranque SV

Tarranque = (12 + 2*7 + 12) ciclos = 38 ciclos

Por lo tanto, se tiene:

Telemento = (Tn − Tarranque ) / n


Telemento = (159 − 38) / 64
Telemento = 1,89

3/2
2013
Problema 1 Septiembre 2013
Sea un predictor dinámico de saltos basado en el algoritmo de Smith, cuya estructura se muestra en la siguiente
figura:

La función hash para acceder a la tabla de contadores a partir de la dirección destino del salto es (PC mod 2m).
Dado el siguiente fragmento de código que se ejecuta dentro de un bucle:

if (x es impar) then { // salto S1 (PC = 0x0000)


incrementar a; // salto S1 tomado
if (x es primo) then // salto S2 (PC= 0x1001)
incrementar a; // salto S2 tomado
}
if (x es par) then // salto S3 (PC = 0x0110)
incrementar a; // salto S3 tomado

y la siguiente lista de valores para la variable x, la cual es procesada en nueve iteraciones del bucle:

8, 9, 10, 11, 12, 17, 20, 29, 31

se pide que mediante una tabla indique la evolución de los contadores afectados por la ejecución del predictor si
m = 3 y k = 2. En la tabla especifique el contador que corresponde a cada salto, el valor del contador en binario,
la predicción y el resultado de cada salto para las nueve iteraciones. El estado inicial de la tabla es con todos los
contadores a 00, es decir, se predice el salto como fuertemente no efectivo (SN – strongly not taken).

Solución

La función hash para acceder a la tabla es (PC mod 23). El resultado de aplicar esa función a los valores de los
contadores de programa que corresponden a los tres saltos son:

Salto S1: 0x0000 mod 8 = 0 mod 8 = 0


Salto S2: 0x1001 mod 8 = 9 mod 8 = 1
Salto S3: 0x0110 mod 8 = 6 mod 8 = 6

En este ejercicio, los únicos contadores que modificarán su contenido son los tres primeros de un total de 8 que
cuenta la tabla. A continuación se muestra la evolución de estos tres contadores junto con las predicciones y los
resultados de los saltos.

1/2
Valor de x 8 9 10 11 12 17 20 29 31
Contador 0 00 00 01 00 01 00 01 00 01
Predicción S1 N N N N N N N N N
Resultado S1 N T N T N T N T T
Contador 1 00 00 00 00 01 01 10 10 11
Predicción S2 - N - N - N - T T
Resultado S2 - N - T - T - T T
Contador 6 00 01 00 01 00 01 00 01 00
Predicción S3 N N N N N N N N N
Resultado S3 T N T N T N T N N

2/2
Problema 2 Septiembre 2013
Dado el siguiente código:

inicio: LD F0,0(R2)
LD F2,0(R4)
LD F4,0(R6)
ADDD F0,F0,F2
ADDD F0,F0,F4
DIVD F0,F0,F8
SD 0(R1),F0
ADDI R2,R2,#8
ADDI R4,R4,#8
ADDI R6,R6,#8
ADDI R1,R1,#8
JUMP inicio
a) Genere la secuencia de código vectorial equivalente sin incluir las instrucciones escalares necesarias para
recorrer los vectores.
b) Si VLR=64, calcule el Tarranque y el Telemento para ejecutar la secuencia de código vectorial si dispone de
una unidad de carga/almacenamiento (12 ciclos de Tarranque), una unidad de suma vectorial (6 ciclos) y otra de
división vectorial (7 ciclos) en los siguientes supuestos:

− Sin encadenamiento.
− Con encadenamiento.
− Con solapamiento entre convoyes.

Solución

a) La operación entre vectores que se realiza es:

A: = A + B
A: = A + C
A:= A / d

donde A, B y C son vectores de longitud indefinida y almacenados a partir de las posiciones de memoria
indicadas por R2, R4 y R6, respectivamente, y d es un escalar que se encuentra almacenado en F8.

De acuerdo con esto, la secuencia de código vectorial equivalente al código escalar del enunciado sin incluir el
código necesario para la vectorización completa del vector es:

LV V1,R2 // Carga de A en V1
LV V2,R4 // Carga de B en V2
LV V3,R6 // Carga de C en V3
ADDV V1,V1,V2 // A := A + B
ADDV V1,V1,V3 // A := A + C
DIVSV V1,V1,F8 // A := A / d
SV R1,V1 // Almacenamiento de V1

1/2
b.1) Sin encadenamiento: Analizando los riesgos estructurales se obtiene la siguiente estructura de convoyes:

Convoy 1: LV V1,R2
Convoy 2: LV V2,R4
Convoy 3: LV V3,R6
ADDV V1,V1,V2
Convoy 4: ADDV V1,V1,V3
Convoy 5: DIVSV V1,V1,F8
Convoy 6: SV R1,V1

La secuencia de ejecución de los seis convoyes si se considera que VLR es 64 es la que se muestra en la
siguiente figura.
Telemento = 6 ciclos

12 64
LV
12 64
LV
12 64
LV
6 64
ADDV
6 6
ADDV 7 64
DIVSV 64 12
SV

Dado que hay seis convoyes, Telemento es 6 ciclos y el Tarranque total es igual a la suma de los tiempos de
arranque visibles de los seis convoyes. Esto es

Tarranque = 3*Tarranque LV + 2*Tarranque ADDV + Tarranque DIVSV + Tarranque SV

Tarranque = (3*12 + 6 + 7 + 12) ciclos = 61 ciclos

Sustituyendo los valores conocidos de Tarranque y Telemento en la expresión que determina el tiempo de
ejecución de un bucle vectorizado para vectores de longitud n se tiene

 n
Tn = 10 +   ⋅ (15 + 61) + 6 ⋅ n
 64 

b.2) Con encadenamiento: Analizando los riesgos estructurales se obtienen cuatro convoyes:

Convoy 1: LV V1,R2
Convoy 2: LV V2,R4
ADDV V1,V1,V2
Convoy 3: LV V3,R6
ADDV V1,V1,V3
DIVSV V1,V1,F8
Convoy 4: SV R1,V1

La secuencia de ejecución de los cuatro convoyes si se considera que VLR es 64 es la que se muestra en la
siguiente figura.

2/2
Telemento = 4 ciclos
12 64
LV
12 64
LV
6 64
ADDV
12 64
LV
6 6
ADDV
7 64
DIVSV 64 12
SV

Dado que hay cuatro convoyes, Telemento es 4 ciclos y el Tarranque total es igual a la suma de los tiempos de
arranque visibles de los siete convoyes. Esto es

Tarranque = 3*Tarranque LV + 2*Tarranque ADDV + Tarranque DIVSV + Tarranque SV

Tarranque = (3*12 + 2*6 + 7 + 12) ciclos = 67 ciclos

Sustituyendo los valores conocidos de Tarranque y Telemento en la expresión que determina el tiempo de
ejecución de un bucle vectorizado para vectores de longitud n se tiene

 n
Tn = 10 +   ⋅ (15 + 67 ) + 4 ⋅ n
 64 

b.3) Con encadenamiento y solapamiento entre convoyes:

Para calcular Telemento en situaciones con solapamiento hay que recordar que:

Telemento = (Tn − Tarranque ) / n

Por un lado, tenemos el siguiente diagrama de ejecución:


T = 3,5 ciclos

12 64
LV
12 64
LV
6 64
ADDV
12 64
LV
6 64
ADDV
7 64
DIVSV 64 12
SV

0 64 76 82 128 140 146 153 204 210 217 293

que nos indica que el tiempo total de ejecución utilizando un VLR de 64 es 293 ciclos.

El tiempo de arranque total visible es:

Tarranque = 3*Tarranque LV + 2*Tarranque ADDV + Tarranque DIVSV + Tarranque SV

Tarranque = (3*12 + 2*6 + 7 + 12) ciclos = 67 ciclos

Por lo tanto, se tiene:

Telemento = (Tn − Tarranque ) / n


Telemento = ( 293 − 67 ) / 64
Telemento = 3,53
3/2
Problema 3 Septiembre 1ª Semana 2013 (3 puntos)

Dada la siguiente red estática:

3 4

1 2

1. Se desea transm itir un mensaje desde el p rocesador a = 0000 al pro cesador b = 1111. Si se
comienza a buscar el cam ino por el bit m enos significativo, explique razo nadamente cuál es el
camino que debe seguir el mensaje.

La distancia Hamming: 0000  1111  1111 . Es 4, porque tenemos cuatro unos. Por lo tanto:

Del nodo 0000 nos movemos a 0001


Del nodo 0001 nos movemos a 0011
Del nodo 0011 nos movemos a 0111
Del nodo 0111 nos movemos a 1111
2. Dibuje una red estática con los siguientes valores en sus parámetros:

Diámetro = 6; Conectividad de arco = 4; Coste = 98.

Se trata de una red Mesh cuadrada.

Se calcula tomando como referencia los datos de la tabla 4.1 en la página 319.

 p
Diámetro = 2   .
 2 

Conectividad de arco = 4.

Coste = 2·p.
Dada la siguiente red dinámica:

¿De qué red se trata? Explique razonadamente la conmutación de cada conmutador de la red para enviar
un mensaje del procesador 101 al banco de memoria 100.

Es una red omega de 8 entradas y 8 salidas.

Para enviar un mensaje del procesador 101 al banco de memoria 100, hacemos lo siguiente:

Los conmutadores de cada etapa deciden el camino por el que transmitir el paquete dependiendo del
valor del bit de la dirección destino correspondiente a la etapa actual. Si el bit es 0, se encamina por la
salida superior, y si es 1, se utiliza la salida inferior.

1 INFERIOR
0 SUPERIOR
0 SUPERIOR
2013
Centro Asociado Palma de Mallorca

Septiembre
pi b
2013 – R
Problema 1
Tutor: Antonio Rivero Cuesta

Mostrar la evolución de los Registros en coma


flotante (FR) y las estaciones de Reserva (RS)
para todos los ciclos que sean necesarios en la
ejecución del siguiente fragmento de código
utilizando el algoritmo de Tomasulo.
Tomasulo

i1: MULTDF2,F2,F6
i2
i2: MULTD F4,F2,F6
F4 F2 F6
i3: ADDD F2,F4,F6
, ,
i4: ADDD F6,F2,F6
• Considere las siguientes hipótesis de partida:

• Para reducir el número de ciclos máquina se


permite que la FLOS distribuya hasta dos
i
instrucciones
i en cada
d ciclo
i l según
ú ell orden
d del
d l
p g
programa.

• Una instrucción puede comenzar su ejecución


en el mismo ciclo en que se distribuye a una
estación de reserva.

• La operación suma tiene una latencia de dos


ciclos y la de multiplicación de tres ciclos.
ciclos

• Se permite que una instrucción reenvíe su


resultado
l d a instrucciones
i i d
dependientes
di
j
durante su último ciclo de ejecución. De esta
forma una instrucción a la espera de un
resultado puede comenzar su ejecución en el
siguiente ciclo si se detecta una coincidencia.
• Los valores de etiqueta 01, 02 y 03 se utilizan
para identificar las tres estaciones de reserva
de la unidad funcional de suma, mientras que
04 y 05 se utilizan para identificar las dos
estaciones de reserva de la unidad funcional
d multiplicación/división.
de l i li ió /di i ió Estos
E valores
l d
de
etiqueta son los ID de las estaciones de
reserva.

• Inicialmente, el valor de los registros es


F0=4.0, F2=2.0, F4=3.0 y F6=2.0.

FR
i1: MULTDF2,F2,F6
MULTD F2 F2 F6 bi O
bitOc. etiqueta
i d
dato
i2: MULTDF4,F2,F6 F0 4.0
i3: ADDD F2 F4 F6
ADDDF2,F4,F6 F2 20
2.0
i4: ADDDF6,F2,F6 F4 3.0
F6 20
2.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05
03
MULT/DIV
SUMA
FR
Ciclo 1: Se
Ciclo1: Sedistribuyei1ei2
distribuye i1 e i2
bi O
bitOc. etiqueta
i d
dato
i1:MULTDF2,F2,F6
i2:MULTDF4,F2,F6 F0 4.0
S j
SeejecutaRS041/3
S 04 1/3 F2 Si 04 20
2.0
No seejecutaRS05 F4 Si 05 3.0
F6 20
2.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 i1: 04 00 2.0 00 2.0
02 i2: 05 04 xx 00 2.0
03
MULT/DIV
SUMA

FR
Ciclo 2: Se
Ciclo2: Sedistribuyei3ei4
distribuye i3 e i4 bi O
bitOc. etiqueta
i d
dato
i3:ADDDF2,F4,F6
i4: ADDDF6,F2,F6 F0 4.0
SeejecutaRS042/3 F2 Si 01 20
2.0
NoseejecutaRS05 F4 Si 05 3.0
NoseejecutaRS01
o se ejecuta S 0
F6 Si 02 20
2.0
NoseejecutaRS02

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i3: 01 05 xx 00 2.0 i1: 04 00 2.0 00 2.0
i4: 02 04 xx 00 2.0 i2: 05 04 xx 00 2.0
03
MULT/DIV
SUMA
FR
Ciclo 3: Se
Ciclo3: SeejecutaRS043/3
ejecuta RS 04 3/3 bi O
bitOc. etiqueta
i d
dato
SeenvíaRS04:4.0alCDB
NoseejecutaRS05 F0 4.0
NoseejecutaRS01 F2 Si 01 20
2.0
NoseejecutaRS02 F4 Si 05 3.0
F6 Si 02 20
2.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i3: 01 05 xx 00 2.0 i1: 04 00 2.0 00 2.0
i4: 02 04 xx 00 2.0 i2: 05 04 xx 00 2.0
03
MULT/DIV
SUMA

FR
Ciclo 4: Se
Ciclo4: Seactualizael
actualiza el valordeRS04:4.0
valor de RS 04: 4 0 bi O etiqueta
bitOc. i d
dato
SevacíaRS04
SeejecutaRS051/3 F0 4.0
SeejecutaRS021/2 F2 Si 01 20
2.0
NoseejecutaRS01 F4 Si 05 3.0
F6 Si 02 20
2.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i3: 01 05 xx 00 2.0 04
i4: 02 04 4.0 00 2.0 i2: 05 04 4.0 00 2.0

MULT/DIV
SUMA
FR
Ciclo 5: Se
Ciclo5: SeejecutaRS052/3
ejecuta RS 05 2/3 bi O etiqueta
bitOc. i d
dato
SeejecutaRS022/2
SeenvíaRS02:6.0alCDB F0 4.0
NoseejecutaRS01 F2 Si 01 20
2.0
F4 Si 05 3.0
F6 Si 02 20
2.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i3: 01 05 xx 00 2.0 04
i4: 02 04 4.0 00 2.0 i2: 05 04 4.0 00 2.0

MULT/DIV
SUMA

FR
Ciclo 6: Se
Ciclo6: SeejecutaRS053/3
ejecuta RS 05 3/3 bi O etiqueta
bitOc. i d
dato
SeenvíaRS05:8.0alCDB
Seactualizael valordeRS02:6.0 F0 4.0
SevacíaRS02 F2 Si 01 20
2.0
SeejecutaRS011/2 F4 Si 05 3.0
F6 60
6.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i3: 01 05 6.0 00 2.0 04
02 i2: 05 04 4.0 00 2.0

MULT/DIV
SUMA
FR
Ciclo 7: Se
Ciclo7: Seactualizael
actualiza el valordeRS05:8.0
valor de RS 05: 8 0 bi O etiqueta
bitOc. i d
dato
SevacíaRS05
SeejecutaRS012/2 F0 4.0
SeenvíaRS01:8.0alCDB F2 Si 01 20
2.0
F4 8.0
F6 60
6.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

i3: 01 05 6.0 00 2.0 04


02 05

MULT/DIV
SUMA

FR
Ciclo 8: Se
Ciclo8: Seactualizael
actualiza el valordeRS01:8.0
valor de RS 01: 8 0 bi O etiqueta
bitOc. i d
dato
SevacíaRS01
F0 4.0
F2 80
8.0
F4 8.0
F6 60
6.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05

MULT/DIV
SUMA
Problema 2 Septiembre 2013 Reserva

Considere el siguiente bucle:


for (i=1; i<=10; i++) {
b[i]=a[i]*c;
c=c+1;
if (c>10) then goto etiqueta;
}
etiqueta:......

Calcule la penalización debida a los saltos, en función del valor inicial de c (número entero), considerando que
el procesador utiliza:

a) Predicción fija (siempre se considera que se va a producir el salto)


b) Predicción estática (si es desplazamiento es negativo, es decir, hacia atrás, se considera que se
produce el salto; y si el desplazamiento es positivo, se predice como no efectivo).
c) Predicción dinámica con 1 bit de historial para cada salto (1=saltar; 0=no saltar; valor inicial=1).

La penalización por saltos incorrectamente predichos es de 4 ciclos y para los saltos correctamente predichos, la
penalización es 0.

Solución

Los primero que hay que visualizar es que el código esconde dos saltos: el propio del bucle, determinado por la
variable i, y el el determinado por la variable c. Si se escribe en forma de seudocódigo ensamblador se puede
apreciar con claridad las dos instrucciones de salto:

c=?;
i=1;
inicio: ......
c=c+1;
if (c>10) then goto etiqueta; // Salto 1
i=i+1;
if (i<11) then goto inicio; // Salto 2
etiqueta: ......

El siguiente paso es analizar el valor de c que puede provocar la realización del salto 1. Dado que el bucle se
ejecuta 10 veces, si inicialmente c es menor o igual que 0 entonces el salto 1 nunca se llega a ejecutar ya que su
valor nunca llegará a ser 11 en las 10 iteraciones del bucle. A continuación, se realiza el análisis de los posibles
casos.

Penalización por predicción fija ( c <= 0):


Salto 1: 40 ciclos. Dado que se predice que siempre se ejecuta y no sucede, hay 4 ciclos de penalización
multiplicados por las 10 iteraciones del bucle.

1/2
Salto 2: 4 ciclos. Es efectivo las 9 primeras veces, con lo que solo hay discordancia en la predicción de la última
iteración.

Penalización por predicción fija ( c > 0):


Salto 1: (10-c)*4 ciclos. En el momento en que c vale 11 el salto se hace efectivo y eso depende del valor
inicial de c y del máximo de iteraciones posibles.
Salto 2: 0 ciclos. Nunca se produce discordancia dado que el salto, las veces que se ejecuta, siempre es efectivo.

Penalización por predicción estática (c<=0):


Salto 1: 0 ciclos. El salto siempre se predice como no efectivo dado que el desplazamiento es hacia delante y
como nunca de produce, no hay discordancia en la predicción.
Salto 2: 4 ciclos. El salto siempre se predice como efectivo dado que el desplazamiento es hacia atrás y solo hay
discordancia una vez que es en la última iteración.

Penalización por predicción estática ( c > 0):


Salto 1: 4 ciclos. El salto siempre se predice como no efectivo dado que el desplazamiento es hacia delante y
como solo se produce una vez, solo hay discordancia una vez.
Salto 2: 0 ciclos. El salto siempre se predice como efectivo dado que el desplazamiento es hacia atrás y como no
se llega al número máximo de iteraciones al hacerse efectivo antes el salto 1, no hay discordancia.

Penalización por predicción dinámica (c<=0):


Salto 1: 4 ciclos. El contador inicialmente está a 1 (predicción de que se realiza) pero como el salto nunca es
efectivo, la primera vez hay discordancia pero al decrementar el contador a 0 (al no ser efectivo el salto) ya
siempre hay concordancia entre la efectividad del salto y la predicción.
Salto 2: 4 ciclos. El contador inicialmente está a 1 y como el salto es efectivo todas las veces salvo la última,
siempre hay concordancia a excepción de la última iteración que se salto no se produce pero el contador estaba
a 1.

Penalización por predicción dinámica (c>0):


Salto 1: Surgen dos situaciones según el valor de c.
c) 10<=c. 0 ciclos. La primera vez el salto ya es efectivo ya que c pasa a ser mayor de 10 y hay
concordancia con la predicción dado que el contador ya está a 1.
ci) 0<c<10. 8 ciclos. La primera vez el salto no es efectivo pero la predicción indica que sí por lo que hay
discordancia y surgen 4 ciclos de penalización y dado que el salto real no ha sido efectivo, el contador
pasa a 0. Con la salvedad de que c pase a valor 11, siempre hay concordancia entre salto y predicción
(ambos no efectivos). Cuando c pasa a valer 11 entonces surge la discordancia: el salto real se produce
pero la predicción es que no (contador a 0) por lo que aparecen 4 ciclos de penalización adicionales.
Salto 2: 0 ciclos. El contador inicialmente está a 1 y como el salto es efectivo todas las veces que se ejecuta (no
se llega al final del bucle), siempre hay concordancia entre efectividad real y predicción.

2/2
Problema 3 Septiembre 2013 Reserva

Dado el siguiente fragmento de código:

for (i=0; i<100; i++) {


if (A[i] > 10) then {
X[i]:=X[i]+b;
} else {
if (A[i] > 20) then {
X[i]:=X[i]+c;
} else {
X[i]:=X[i]+d;
}
}
}

a) Genere el código intermedio equivalente aplicando operaciones con predicado. Considere que los vectores A
y X y las constantes b, c y d se encuentran almacenadas en las posiciones de memoria contenidas en los
registros Ra, Rx, Rb, R4c y Rd, respectivamente.

b) A partir del código que ha obtenido, genere el código VLIW correspondiente. Considere que una instrucción
VLIW admite una operación de carga/almacenamiento (2 ciclos de latencia), una operación en coma flotante (3
ciclos de latencia) y una operación entera/salto (1 ciclo de latencia). Las instrucciones de manipulación de
predicados se consideran operaciones enteras.

Solución

a) Un posible código intermedio con operaciones predicadas es el siguiente:

LD Fb,0(Rb) // Carga de la constante b


LD Fc,0(Rc) // Carga de la constante c
LD Fd,0(Rd) // Carga de la constante d
inicio: LD Fa,0(Ra) // Carga del vector A
LD Fx,0(Rx) // Carga del vector X
PRED_LT p1,p2,Fa,#10 // If (R1<=10) {p1:=T; p2:=F}
ADDD Fx,Fx,Fb (p2) // X[i]:=X[i]+b
JMP fin (p2)
else: PRED_LT p3,p4,Fa,#20 // If (R2<=20) {p3:=T; p4:=F}
ADDD Fx,Fx,Fc (p4) // X[i]:=X[i]+c
ADDD Fx,Fx,Fd (p3) // X[i]:=X[i]+d
SD 0(Rx),Fx
fin: SUBI Ra,Ra,#4
SUBI Rx,Rx,#4
BNEZ Ra,inicio

b) El código VLIW generado a partir del código intermedio del apartado anterior y teniendo en cuentas las
restricciones del enunciado en cuanto a número de operaciones y latencias se muestra en la tabla situada a
continuación. Observe que no se ha incorporado ningún tipo de optimización.

1/2
Carga/almacenamiento Operaciones FP Enteras/saltos
1 LD Fb,0(Rb)
2 LD Fc,0(Rc)
3 LD Fd,0(Rd)
4 Inicio: LD Fa,0(Ra)
5 LD Fx,0(Rx)
6 PRED_LT p1,p2,Fa,#10
7 ADDD Fx,Fx,Fb (p2)
8
9 JMP fin (p2)
10 PRED_LT p3,p4,Fa,#20
11 ADDD Fx,Fx,Fc (p4)
12 ADDD Fx,Fx,Fd (p3)
13
14
15 SD 0(Rx),Fx
16 fin: SUBI Ra,Ra,#4
17 SUBI Rx,Rx,#4
18 BNEZ Ra,inicio

Una alternativa al código anterior, un poco más optimizada, se presenta a continuación. La existencia de la
instrucción 12 responde a la necesidad de dejar los ciclos necesarios para la finalización de las operaciones de
suma en coma flotante con el fin de poder realizar el almacenamiento del resultado.

Carga/almacenamiento Operaciones FP Enteras/saltos


1 LD Fb,0(Rb)
2 LD Fc,0(Rc)
3 LD Fd,0(Rd)
4 Inicio: LD Fa,0(Ra) SUBI Ra,Ra,#4
5 LD Fx,0(Rx) SUBI Rx,Rx,#4
6 PRED_LT p1,p2,Fa,#10
7 ADDD Fx,Fx,Fb (p2) PRED_LT p3,p4,Fa,#20
8 JMP fin (p2)
9 ADDD Fx,Fx,Fc (p4)
10 ADDD Fx,Fx,Fd (p3)
11
12 fin:
13 BNEZ Ra,inicio
14 SD 0(Rx),Fx

2/2
2014
Centro Asociado Palma de Mallorca

Febrero
b
2014 – 1ª
Problema 1
Tutor: Antonio Rivero Cuesta

Mostrar la evolución de los Registros en coma


flotante (FR) y las estaciones de Reserva (RS)
para todos los ciclos que sean necesarios en la
ejecución del siguiente fragmento de código
utilizando el algoritmo de Tomasulo.
Tomasulo

i1: ADDD F4,F2,F0


i2
i2: MULTD F6 F2 F0
F6,F2,F0
i3: MULTD F2,F4,F6
, ,
i4: ADDD F0,F2,F4
• Considere las siguientes hipótesis de partida:

• Para reducir el número de ciclos máquina se


permite que la FLOS distribuya hasta dos
i
instrucciones
i en cada
d ciclo
i l según
ú ell orden
d del
d l
p g
programa.

• Una instrucción puede comenzar su ejecución


en el mismo ciclo en que se distribuye a una
estación de reserva.

• La operación suma tiene una latencia de un


ciclo y la de multiplicación de dos ciclos.
ciclos

• Se permite que una instrucción reenvíe su


resultado
l d a instrucciones
i i d
dependientes
di
j
durante su último ciclo de ejecución. De esta
forma una instrucción a la espera de un
resultado puede comenzar su ejecución en el
siguiente ciclo si se detecta una coincidencia.
• Los valores de etiqueta 01, 02 y 03 se utilizan
para identificar las tres estaciones de reserva
de la unidad funcional de suma, mientras que
04 y 05 se utilizan para identificar las dos
estaciones de reserva de la unidad funcional
d multiplicación/división.
de l i li ió /di i ió Estos
E valores
l d
de
etiqueta son los ID de las estaciones de
reserva.

• Inicialmente, el valor de los registros es


F0=3.0, F2=2.0, F4=6.0 y F6=5.0.

FR
i1: ADDDF4,F2,F0
ADDD F4 F2 F0 bi O
bitOc. etiqueta
i d
dato
i2: MULTDF6,F2,F0 F0 3.0
i3: MULTD F2 F4 F6
MULTDF2,F4,F6 F2 20
2.0
i4: ADDD F0,F2,F4 F4 6.0
F6 50
5.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05
03
MULT/DIV
SUMA
FR
Ciclo 1: Se
Ciclo1: Sedistribuyei1ei2
distribuye i1 e i2
bi O
bitOc. etiqueta
i d
dato
i1:ADDDF4,F2,F0
i2:MULTDF6,F2,F0 F0 3.0
S j t RS 01 1/1
SeejecutaRS011/1 F2 20
2.0
SeenvíaRS01:5.0alCDB
F4 Si 01 6.0
SeejecutaRS041/2
F6 Si 04 50
5.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i1: 01 00 2.0 00 3.0 i2: 04 00 2.0 00 3.0
02 05
03
MULT/DIV
SUMA

FR
Ciclo 2: Se
Ciclo2: Sedistribuyei3ei4
distribuye i3 e i4 bi O
bitOc. etiqueta
i d
dato
i3:MULTDF2,F4,F6
i4: ADDDF0,F2,F4 F0 Si 02 3.0
SeejecutaRS051/2 F2 Si 05 20
2.0
NoseejecutaRS02 F4 5.0
Seactualizael
Se actua a e valordeRS01:5.0
a o de S 0 5 0
F6 Si 04 50
5.0
SevacíaRS01
SeejecutaRS042/2
Se envía RS 04: 6 0 al CDB
SeenvíaRS04:6.0alCDB

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 i2: 04 00 2.0 00 3.0
i4: 02 05 xx 00 5.0 i3: 05 00 5.0 00 5.0
03
MULT/DIV
SUMA
FR
Ciclo 3: Se
Ciclo3: Seactualizael
actualiza el valordeRS04:6.0
valor de RS 04: 6 0 bi O
bitOc. etiqueta
i d
dato
SevacíaRS04
SeejecutaRS052/2 F0 Si 02 3.0
S
SeenvíaRS05:25.0alCDB
í RS 05 25 0 l CDB F2 Si 05 20
2.0
NoseejecutaRS02 F4 5.0
F6 60
6.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 04
i4: 02 05 xx 00 5.0 i3: 05 00 5.0 00 5.0
03
MULT/DIV
SUMA

FR
Ciclo 4: Se
Ciclo4: Seactualizael
actualiza el valordeRS05:25.0
valor de RS 05: 25 0 bi O etiqueta
bitOc. i d
dato
SevacíaRS05
SeejecutaRS021/1 F0 Si 02 3.0
S
SeenvíaRS02:30.0alCDB
í RS 02 30 0 l CDB F2 25 0
25.0
F4 5.0
F6 60
6.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
i4: 02 05 25.0 00 5.0 05

MULT/DIV
SUMA
FR
Ciclo 5: Se
Ciclo5: Seactualizael
actualiza el valordeRS02:30.0
valor de RS 02: 30 0 bi O etiqueta
bitOc. i d
dato
SevacíaRS02
F0 30.0
F2 25 0
25.0
F4 5.0
F6 60
6.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05

MULT/DIV
SUMA
Problema 2 Febrero 2014 Primera Semana
Considere el siguiente segmento de código que se ejecuta en el cuerpo principal de un bucle:
if (x es par) then // salto b1
incrementar a; // salto b1 tomado
if (x es un múltiplo de 10) then // salto b2
incrementar b; // salto b2 tomado
y que la siguiente lista de 9 valores para la variable x es procesada en 9 iteraciones del bucle:
8, 9, 10, 11, 12, 20, 29, 30, 31.
Suponga que utiliza un nuevo diseño de predictor de salto de dos niveles en el que, además de un predictor de 1
bit, se utiliza un registro global de 1 bit (registro g). Este registro g almacena el resultado del último salto
ejecutado (0 para no efectivo ó 1 para efectivo) y se utiliza para acceder a una de las dos tablas del historial de
salto de 1 bit (BHT), ambas independientes una de la otra:

Así, dependiendo del valor de g, se selecciona una de las dos BHT y ya se pasa a utilizar la tabla BHT
seleccionada para realizar la predicción de 1 bit de la forma habitual, es decir, N (no efectivo) o E (efectivo). La
actualización del contenido del slot seleccionado de la BHT se realiza introduciendo el resultado real del salto,
es decir, N o E.
Asumiendo que el estado inicial del registro g es 0 (no efectivo), rellene una tabla similar a la que se muestra a
continuación con la secuencia de resultados reales y predichos de los saltos b1 y b2 para las nueve iteraciones
del bucle. Utilice en la tabla la letra N para indicar no efectivo y E para efectivo.

8 9 10 11 12 20 29 30 31
Para g=0
b1 predicho N
b1 real
b2 predicho N
b2 real
Para g=1
b1 predicho N
b1 real
b2 predicho N
b2 real

Asuma que las entradas del predictor son actualizadas para cada salto antes de que se vuelva a realiza el acceso
al predictor para obtener la predicción de un nuevo salto.

1ª semana - Nacional - Febrero - curso 2013/14 – Ingeniería de Computadores II - UNED 1/2


Solución

A continuación, se presenta la solución del ejercicio.

Si el salto es efectivo (T) entonces se utiliza la BHT con g=1 y si el salto es no efectivo (N) entonces se utiliza
la BHT con g=0. Por lo tanto, las circunferencias representan la BHT utilizada en cada momento según el
resultado real del salto y las líneas continuas la secuencia.

La flechas discontinuas representan la actualización de la BHT según el resultado del salto.

1ª semana - Nacional - Febrero - curso 2013/14 – Ingeniería de Computadores II - UNED 2/2


2014
Problema 1 Febrero 2014 2ª (2 puntos) – Igual que actividad 1.3 y 1.6 del libro de texto.

Un procesador sin segmentación necesita 210 nseg. para procesar una instrucción. Con respecto a este
procesador, calcular la aceleración que se obtiene en los dos casos siguientes:

a) Un procesador A dotado de una segmentación de 7 etapas, consumiendo cada etapa el mismo tiempo.
Cada etapa ocasiona una sobrecarga de 9 nseg. no existiendo ningún tipo de detención en la
segmentación.

De acuerdo con el enunciado el tiempo medio de ejecución de una instrucción en el procesador sin
segmentar es de 210 nseg. La segmentación de 7 etapas de este apartado se caracteriza por acortar el tiempo
medio de ejecución de una instrucción a 39 nseg.:

210 nseg
+ 9 nseg = 39 nseg
7 etapas

Por lo tanto, la aceleración obtenida por la máquina A con respecto a la máquina sin segmentar es 5,38:

210 nseg
= 5, 38 veces más rápido
39 nseg

b) Un procesador B con una segmentación de 7 etapas, consumiendo cada una de ellas 25 nseg., 30 nseg.,
40 nseg., 40 nseg., 50 nseg., 50 nseg. y 60 nseg. respectivamente, y siendo la sobrecarga por cada etapa
de 9 nseg. Un 37% de todas las instrucciones de la segmentación son detenidas durante un ciclo de reloj
y un 9% durante dos ciclos.

La etapa más lenta es la que dicta la velocidad de las restantes etapas, por lo que cada etapa consumirá 69
nseg. (60 nseg. más los 9 nseg. de retardo).

El 37% ocasiona una detención de un ciclo, consumiendo 138 nseg. (2 ciclos · 69 nseg)

El 9% ocasiona una detención de dos ciclos, por lo que consumen 207 nseg. (3 ciclos · 69 nseg).

El 54%, no provocan detenciones, empleando sólo un ciclo de reloj (69 nseg.).

De acuerdo con esto, el tiempo medio consumido por una instrucción es:

0,37 · 69 · 2 = 51,06 nseg.


0,09 · 69 · 3 = 18,63 nseg.
0,54 · 69 · 1 = 37,26 nseg.

Total: = 106,95 nseg.

Por lo tanto, la aceleración obtenida por la máquina B con respecto a la máquina sin segmentar es de 1,96:

210 nseg
= 1, 96 veces más rápido
106, 95 nseg
Problema 4 Febrero 2ª Semana 2014 (1 punto)

Dibuje una red estática con los siguientes valores en sus parámetros:

Diámetro = 8; Conectividad de arco = 4; Coste = 162;

Se trata de una red bidimensional mesh cerrada.


Mostrar la evolución de los Registros en coma
flotante (FR) y las estaciones de Reserva (RS)
para todos los ciclos que sean necesarios en la
ejecución
j ió del
d l siguiente
i i t fragmento
f t de
d código
ódi
utilizando el algoritmo de Tomasulo.

i1:
i1 ADDD F2,F4,F0
ADDD F2 F4 F0
i2: ADDD F0,F6,F4
i3: MULTD F2,F4,F6
i4: ADDD F4,F2,F0
, ,
i5: ADDD F2,F6,F2

• Considere las siguientes hipótesis de partida:

• Para reducir el número de ciclos máquina se


permite que la FLOS distribuya hasta dos
i
instrucciones
i en cada
d ciclo
i l según
ú ell orden
d del
d l
p g
programa.

• Una instrucción puede comenzar su ejecución


en el mismo ciclo en que se distribuye a una
estación de reserva.
• La operación suma tiene una latencia de un
ciclo y la de multiplicación de dos ciclos.
ciclos

• Se permite que una instrucción reenvíe su


resultado
l d a instrucciones
i i d
dependientes
di
durante su último ciclo de ejecución.
j De esta
forma una instrucción a la espera de un
resultado puede comenzar su ejecución en el
siguiente ciclo si se detecta una coincidencia.

• Los valores de etiqueta 01, 02 y 03 se utilizan


para identificar las tres estaciones de reserva
de la unidad funcional de suma, mientras que
04 y 05 se utilizan para identificar las dos
estaciones de reserva de la unidad funcional
d multiplicación/división.
de l i li ió /di i ió Estos
E valores
l d
de
etiqueta son los ID de las estaciones de
reserva.

• Inicialmente, el valor de los registros es


F0=4.0, F2=2.0, F4=1.0 y F6=3.0.
FR
i1: ADDDF2,F4,F0
ADDD F2 F4 F0 bi O
bitOc. etiqueta
i d
dato
i2: ADDDF0,F6,F4 F0 4.0
i3: MULTD F2 F4 F6
MULTDF2,F4,F6 F2 20
2.0
i4: ADDDF4,F2,F0 F4 1.0
i5: ADDD F2 F6 F2
ADDDF2,F6,F2 F6 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05
03
MULT/DIV
SUMA

FR
Ciclo 1: Se
Ciclo1: Sedistribuyei1ei2
distribuye i1 e i2 bi O
bitOc. etiqueta
i d
dato
i1: ADDDF2,F4,F0
i2: ADDDF0,F6,F4 F0 Si 02 4.0
SeejecutaRS011/1
/ F2 Si 01 20
2.0
SeenvíaRS01:5.0alCDB F4 1.0
SeejecutaRS021/1
SeenvíaRS02:4.0alCDB F6 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

i1: 01 00 1.0 00 4.0 04


i2: 02 00 3.0 00 1.0 05
03
MULT/DIV
SUMA
FR
Ciclo 2: Se
Ciclo2: Seactualizael
actualiza el valordeRS01:5.0
valor de RS 01: 5 0 bi O
bitOc. etiqueta
i d
dato
SevacíaRS01
Seactualizael valordeRS02:4.0 F0 4.0
SevacíaRS02 F2 Si 04 50
5.0
Sedistribuyei3ei4 F4 Si 01 1.0
i3:MULTDF2,F4,F6
3 U , , 6
F6 30
3.0
i4: ADDDF4,F2,F0
Seejecuta RS041/2
NO
NOseejecutaRS01
j t RS 01

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i4: 01 04 xx 00 4.0 i3: 04 00 1.0 00 3.0
02 05
03
MULT/DIV
SUMA

FR
Ciclo 3: Se
Ciclo3: Sedistribuyei5
distribuye i5 bi O
bitOc. etiqueta
i d
dato
i5:ADDD F2,F6,F2
SeejecutaRS042/2 F0 4.0
S
SeenvíaRS04:3.0alCDB
í RS 04 3 0 l CDB F2 Si 04 50
5.0
NOseejecutaRS01 F4 Si 01 1.0
NOseejecutaRS02
F6 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
i4: 01 04 xx 00 4.0 i3: 04 00 1.0 00 3.0
i5: 02 00 3.0 04 xx 05
03
MULT/DIV
SUMA
FR
Ciclo 4: Se
Ciclo4: Seactualizael
actualiza el valordeRS04:3.0
valor de RS 04: 3 0 bi O
bitOc. etiqueta
i d
dato
SevacíaRS04
SeejecutaRS011/1 F0 4.0
S
SeenvíaRS01:6.0alCDB
í RS 01 6 0 l CDB F2 Si 02 50
5.0
SeejecutaRS021/1 F4 Si 01 1.0
SeenvíaRS02:6.0alCDB
F6 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

i4: 01 00 3.0 00 3.0 04


i5: 02 00 3.0 00 3.0 05
03
MULT/DIV
SUMA

FR
Ciclo 5: Se
Ciclo5: Seactualizael
actualiza el valordeRS01:6.0
valor de RS 01: 6 0 bi O
bitOc. etiqueta
i d
dato
SevacíaRS01
Seactualizael valordeRS02:6.0 F0 4.0
SevacíaRS02 F2 60
6.0
F4 6.0
F6 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05
03
MULT/DIV
SUMA
Problema 2 Septiembre 2014 (3 puntos)

Suponga un procesador VLIW que puede codificar tres operaciones en cada instrucción con las restricciones
que indica la siguiente tabla:

Unidad funcional Latencia Op1 Op2 Op3 Operaciones realizadas por la unidad
ALU entera 1 X X X Comparación/suma/resta entera, operaciones lógicas
ALU FP 4 X Aritmética de coma flotante
Memoria 3 X X Cargas y almacenamientos
Saltos 3 X Saltos condicionales e incondicionales

Muestre la ejecución del siguiente código en el procesador VLIW indicado previamente:

void sum (int c[], int a[], int b[], int n) {


int i;
for (i=0; i<n; i++)
if (a[i] = 0) then
c[i]:=a[i]+b[i];
else
c[i]:=a[i]+1;
}

en los siguientes supuestos:


a) Sin utilizar instrucciones con predicado, ni procesamiento especulativo.
b) Utilizando instrucciones con predicado. El procesador puede utilizar predicados con cualquier instrucción,
considerándose las instrucciones de manipulación de predicados como instrucciones de comparación a efectos
de latencias.
c) Utilizando procesamiento especulativo considerando que la rama then es la más probable.

Solución
a) Secuencia de ejecución de las instrucciones VLIW sin predicados.

Ciclos Operación 1 Operación 2 Operación 3


1 Inicio: LD R1,0(Ra) LD R2,0(Rb)
2 SUBI Ra,Ra,#4 SUBI Rb,Rb,#4
3
4 BNEZ R1,else
5
6
7 then: ADD R3,R1,R2 JMP fin
8
9
10 else: ADDI R3,R1,#1
11 fin: SD 0(Rc),R3 SUBI Rc,Rc,#4 BNEZ Ra,inicio
12
13
1/2
b) Secuencia de ejecución de las instrucciones VLIW con predicados.

Ciclos Operación 1 Operación 2 Operación 3


1 Inicio: LD R1,0(Ra) LD R2,0(Rb)
2 SUBI Ra,Ra,#4 SUBI Rb,Rb,#4
3
4 PRE_EQ p1,p2,R1,#0
5 ADD R3,R1,R2 (p1) ADDI R3,R1,#1 (p2)
6 SD 0(Rc),R3 SUBI Rc,Rc,#4 BNEZ Ra,inicio
7
8

c) Secuencia de ejecución de las instrucciones VLIW con ejecución especulativa considerando que la rama then
del if es la más probable.

Ciclos Operación 1 Operación 2 Operación 3


1 Inicio: LD R1,0(Ra) LD R2,0(Rb)
2 SUBI Ra,Ra,#4 SUBI Rb,Rb,#4
3
4 ADD R3,R1,R2 BNEZ R1,else
5
6
7 JMP fin
8
9
10 else: ADDI R3,R1,#1
11 Fin: SD 0(Rc),R3 SUBI Rc,Rc,#4 BNEZ Ra,inicio
12
13

Obsérvese que el código que se obtiene es prácticamente similar al del apartado (a) con la salvedad que se ha
realizado el adelantamiento de la instrucción asignada a la rama then al comienzo. Es decir la suma a+b se
realiza siempre y se almacena temporalmente en R3. Si la rama then es la seleccionada (se supone que tiene una
mayor probabilidad) se salta directamente a realizar su almacenamiento; en caso de que la ejecución se vaya por
la rama else entonces se calcula un nuevo valor para R3 mediante la suma a+1 y se procede a su
almacenamiento.

2/2
Problema 3 Septiembre 2014 (4 puntos)

Dispone de un procesador vectorial VECTOR-A con las siguientes características:

 Tbase = 10 ciclos.
 Tbucle = 15 ciclos.
 Dos unidades de carga-almacenamiento vectorial con 12 ciclos de tiempo de arranque,
 Una unidad de suma vectorial en coma flotante con tiempo de arranque de 6 ciclos
 Unidad de multiplicación vectorial en coma flotante con tiempo de arranque de 7 ciclos.

y de un segundo procesador vectorial, denominado VECTOR-B, en el que, con la salvedad del número de
unidades de carga/almacenamiento, se dobla el número de unidades aritméticas y, como consecuencia del
incremento de la complejidad en las operaciones de asignación a las unidades, los gastos. Se tiene así:

 Tbase = 20 ciclos.
 Tbucle = 30 ciclos.
 Dos unidades de carga-almacenamiento vectorial con 24 ciclos de tiempo de arranque,
 Dos unidades de suma vectorial en coma flotante con tiempo de arranque de 12 ciclos
 Dos unidades de multiplicación vectorial en coma flotante con tiempo de arranque de 14 ciclos.

Con el fin de realizar una comparativa, en ambos procesadores se van a ejecutar las dos siguientes secuencias de
código:

// Secuencia de código 1
for (i=0; i<10000; i++) {
A[i+1] := x*A[i] + y*A[i];
}

// Secuencia de código 2
for (i=0; i<100; i++) {
A[i+1] := x*A[i];
}

Se pide

a) Escriba el código vectorial que corresponde a las dos secuencias de código.


b) Calcule el número de ciclos consumidos por la secuencia 1 en el procesador VECTOR-A.
c) Calcule el número de ciclos consumidos por la secuencia 1 en el procesador VECTOR-B.
d) Calcule el número de ciclos consumidos por la secuencia 2 en el procesador VECTOR-A.
e) Calcule el número de ciclos consumidos por la secuencia 2 en el procesador VECTOR-B
f) Compare y explique, razonadamente, las diferencias obtenidas al realizar ejecución de la secuencia 1 y
la 2 en ambos procesadores.

Original – Nacional/Unión Europea - Septiembre - curso 2013/14 – Ingeniería de Computadores II - UNED 1/2
Solución

a) El código correspondiente a la secuencia de código 1 es

LV V1, A(i)
MULTVS V2, Rx, V1
MULTVS V3, Ry, V1
ADDV V4,V2,V3
SV V4, A(i+1)

y el correspondiente a la secuencia de código 2 es:

LV V1,A(i)
MULTVS V2,x,V1
SV V2,A(i+1)

donde A(i)y A(i+1) representan las posiciones de memoria en las que se ubican esos elementos y Rx y Ry
corresponden a los registros en los que se almacenan los valores de x e y.

b) Tal y como se puede apreciar en el siguiente esquema, el total de ciclos consumidos es 172 ciclos para un
vector de 64 elementos considerando que el encadenamiento de resultados entre unidades es posible.

El Telemento es de 2 ciclos dado que se tienen dos convoyes. El Tarranque total se obtiene de sumar los
tiempos de arranque visibles de las unidades funcionales. Si se analiza el esquema previo se tiene

Tarranque = Tarranque LV + 2*Tarranque MULTVS + Tarranque ADDV + Tarranque SV

Tarranque = (12 + 2*7 + 6 + 12) ciclos = 44 ciclos

Con estos valores y dado que el tiempo base es 10, la expresión del tiempo total de ejecución del bucle queda

 10000 
T10000 = 10 +  ⋅ (15 + 44 ) + 2 ⋅ 10000 = 29273 ciclos
 64 

c) Tal y como se puede apreciar en el siguiente esquema, el total de ciclos consumidos es 138 ciclos para un
vector de 64 elementos considerando que el encadenamiento de resultados entre unidades es posible.

El Telemento es de 1 ciclo dado que se tiene un único convoy. El Tarranque total se obtiene de sumar los
tiempos de arranque visibles de las unidades funcionales. Si se analiza el esquema previo se tiene

Tarranque = Tarranque LV + Tarranque MULTVS + Tarranque ADDV + Tarranque SV

Tarranque = (24 + 14 + 12 + 24) ciclos = 74 ciclos


Original – Nacional/Unión Europea - Septiembre - curso 2013/14 – Ingeniería de Computadores II - UNED 2/2
Con estos valores y dado que el tiempo base es 20, la expresión del tiempo total de ejecución del bucle interior
queda

 10000 
T10000 = 20 +  ⋅ ( 30 + 74) + 1 ⋅ 10000 = 26348 ciclos
 64 

d) Tal y como se puede apreciar en el siguiente esquema, el total de ciclos consumidos es 95 ciclos para un
vector de 64 elementos considerando que el encadenamiento de resultados entre unidades es posible.

El Telemento es de 1 ciclo dado que se tiene un único convoy. El Tarranque total se obtiene de sumar los
tiempos de arranque visibles de las unidades funcionales. Si se analiza el esquema previo se tiene

Tarranque = Tarranque LV + Tarranque MULTVS + Tarranque SV

Tarranque = (12 + 7 + 12) ciclos = 31 ciclos

Con estos valores y dado que el tiempo base es 10, la expresión del tiempo total de ejecución del bucle interior
queda

 100 
T100 = 10 +  ⋅ (15 + 31) + 1 ⋅ 100 = 202 ciclos
 64 

e) Tal y como se puede apreciar en el siguiente esquema, el total de ciclos consumidos es 126 ciclos para un
vector de 64 elementos considerando que el encadenamiento de resultados entre unidades es posible.

El Telemento es de 1 ciclo dado que se tiene un único convoye. El Tarranque total se obtiene de sumar los
tiempos de arranque visibles de las unidades funcionales. Si se analiza el esquema previo se tiene

Tarranque = Tarranque LV + Tarranque MULTVS + Tarranque SV

Tarranque = (24 + 14 + 24) ciclos = 62 ciclos

Con estos valores y dado que el tiempo base es 20, la expresión del tiempo total de ejecución del bucle interior
queda

 100 
T100 = 20 +  ⋅ ( 30 + 62) + 1 ⋅ 100 = 304 ciclos
 64 

Original – Nacional/Unión Europea - Septiembre - curso 2013/14 – Ingeniería de Computadores II - UNED 3/2
f) Se puede apreciar que para la secuencia 1 el VECTOR-A es más rápido que el VECTOR-B mientras para la
secuencia 2 sucede lo contrario, el VECTOR-A es el más lento. Es decir, que las diferencias entre rendimiento
máximo y rendimiento sostenido pueden ser grandes dependiendo del problema a procesar.

A mayor tamaño del vector de datos a procesar, los tiempos por gastos de sobrecarga pesan menos en el tiempo
total de procesamiento ya que quedan difuminados por el tiempo consumido en el procesamiento de las
operaciones vectoriales, teniendo más impacto el incremento del número de unidades funcionales.

Original – Nacional/Unión Europea - Septiembre - curso 2013/14 – Ingeniería de Computadores II - UNED 4/2
Problema 1 Septiembre 2014 Reserva

La siguiente figura corresponde a un predictor híbrido


formado por:
 un predictor bimodal (P0) formado por una PHT
de 2 entradas.
 un predictor gshare (P1) con un BHR de 1 bit y
una PHT de 2 entradas.
 un selector de 2 entradas (M) con una PHT de 2
entradas.

Considere la siguientes suposiciones:

 Las instrucciones son de 4 bytes de longitud fija, por lo tanto, los dos bits de orden inferior deben
ignorarse para realizar el indexado en el predictor. Utilice el siguiente bit de orden más bajo para
efectuar el indexado en P0, P1 y M.
 Cada entrada de las PHT de los dos predictores y del selector corresponde a un contador de Smith de 2
bits.
 Evite la interferencia destructiva no actualizando el predictor equivocado siempre que el otro predictor
sea correcto.

Las reglas de actualización de los contadores del selector M son las siguientes:

 Si en la última predicción P0 y P1 fallaron, el contador no se modifica.


 Si P0 falló y P1 acertó el contador se incrementa.
 Si P0 acertó y P1 falló el contador se decrementa.
 Si los dos acertaron, el contador no se modifica.
 Un valor del selector de 0 ó 1 selecciona el predictor bimodal P0 mientras que un valor de 2 ó 3
selecciona el predictor gshare P1.

En base a toda esta información, rellene la siguiente tabla indicando con un subrayado la entrada seleccionada
de cada predictor. Calcule las tasas de predicción de saltos global para los predictores P0, P1 y M.

Estados del predictor después de resolver el salto


Selector Predictor bimodal Predictor gshare
Direcc. Resultado
Bimodal Gshare M PHT0 PHT1 PHT0 PHT1 BHR PHT0 PHT1
salto salto
Inicial - - - - 2 0 0 2 0 2 1
0x654 N
0x780 T
0x78C T
0x990 T
0xA04 N
0x78C N

1/2
Solución

Estados del predictor después de resolver el salto


Selector Predictor bimodal Predictor gshare
Direcc. Resultado Combin
Bimodal Gshare PHT0 PHT1 PHT0 PHT1 BHR PHT0 PHT1
salto salto ado
Inicial - - - - 2 0 0 2 0 2 1
0x654 N T N T 2 1 0 2 0 2 0
0x780 T N T T 3 1 0 2 1 3 0
0x78C T T T T 3 1 0 3 1 3 0
0x990 T N N N 3 1 1 3 1 3 1
0xA04 N T T T 3 1 1 2 0 2 1
0x78C N T N T 3 2 1 2 0 2 0

Tasa de predicción del predictor P0: 1/6 = 16.7%


Tasa de predicción del predictor P1: 4/6 = 66.7%
Tasa de predicción del predictor M: 2/6 = 33%

2/2
Problema 2 Septiembre Reserva 2014 (2 puntos).

Un procesador sin segmentación necesita 1125 nseg. para procesar cinco instrucciones. Con respecto a este
procesador, calcular la aceleración que se obtiene en los dos casos siguientes:

a) Un procesador P1 dotado de una segmentación de 9 etapas, consumiendo cada etapa el mismo tiempo.
Cada etapa ocasiona una sobrecarga de 7 nseg. no existiendo ningún tipo de detención en la
segmentación.

De acuerdo con el enunciado el tiempo medio de ejecución de una instrucción en el procesador sin
segmentar es de 1125/5 = 225 nseg. por instrucción.

La segmentación de 9 etapas de este apartado se caracteriza por acortar el tiempo medio de ejecución de una
instrucción a 32 nseg.:

225 nseg
+ 7 nseg = 32 nseg
9 etapas

Por lo tanto, la aceleración obtenida por la máquina A con respecto a la máquina sin segmentar es 7,03:

225 nseg
= 7, 03 veces más rápido
32 nseg

b) Un procesador P2 con una segmentación de 9 etapas, consumiendo cada una de ellas 30 nseg., 25 nseg.,
45 nseg., 45 nseg., 50 nseg. , 50 nseg, 40 nseg, 40 nseg y 40 nseg respectivamente, y siendo la
sobrecarga por cada etapa de 7 nseg. Un 42% de todas las instrucciones de la segmentación son
detenidas durante un ciclo de reloj, un 9% durante dos ciclos y un 12% durante tres ciclos.

La etapa más lenta es la que dicta la velocidad de las restantes etapas, por lo que cada etapa consumirá 57
nseg. (50 nseg. más los 7 nseg. de retardo).

El 42% ocasiona una detención de un ciclo, consumiendo 114 nseg. (2 ciclos · 57 nseg)

El 9% ocasiona una detención de dos ciclos, por lo que consumen 171 nseg. (3 ciclos · 57 nseg).

El 12% ocasiona una detención de tres ciclos, por lo que consumen 228 nseg. (4 ciclos · 57 nseg).

El 37%, no provocan detenciones, empleando sólo un ciclo de reloj (57 nseg.).

De acuerdo con esto, el tiempo medio consumido por una instrucción es:

0,42 · 57 · 2 = 47,88 nseg.


0,09 · 57 · 3 = 15,39 nseg.
0,12 · 57 · 4 = 27,36 nseg.
0,37 · 57 · 1 = 21,09 nseg.

Total: = 111,72 nseg.

Por lo tanto, la aceleración obtenida por la máquina B con respecto a la máquina sin segmentar es de 2,01:

225 nseg
= 2, 01 veces más rápido
111, 72 nseg
Problema 1 Febrero 2015 Primera Semana

La siguiente figura corresponde a un predictor híbrido


formado por:
 un predictor bimodal (P0) formado por una PHT
de 2 entradas.
 un predictor gshare (P1) con un BHR de 1 bit y
una PHT de 2 entradas.
 un selector de 2 entradas (M) con una PHT de 2
entradas.

Considere la siguientes suposiciones:

 Las instrucciones son de 4 bytes de longitud fija, por lo tanto, los dos bits de orden inferior deben
ignorarse para realizar el indexado en el predictor. Utilice el siguiente bit de orden más bajo para
efectuar el indexado en P0, P1 y M.
 Cada entrada de las PHT de los dos predictores y del selector corresponde a un contador de Smith de 2
bits.
 Evite la interferencia destructiva no actualizando el predictor equivocado siempre que el otro predictor
sea correcto.

Las reglas de actualización de los contadores del selector M son las siguientes:

 Si en la última predicción P0 y P1 fallaron, el contador no se modifica.


 Si P0 falló y P1 acertó el contador se incrementa.
 Si P0 acertó y P1 falló el contador se decrementa.
 Si los dos acertaron, el contador no se modifica.
 Un valor del selector de 0 ó 1 selecciona el predictor bimodal P0 mientras que un valor de 2 ó 3
selecciona el predictor gshare P1.

En base a toda esta información, rellene la siguiente tabla indicando con un subrayado la entrada seleccionada
de cada predictor. Calcule las tasas de predicción de saltos global para los predictores P0, P1 y M.

Estados del predictor después de resolver el salto


Selector Predictor bimodal Predictor gshare
Direcc. Resultado
Bimodal Gshare M PHT0 PHT1 PHT0 PHT1 BHR PHT0 PHT1
salto salto
Inicial - - - - 2 0 0 2 0 2 1
0x654 N
0x780 T
0x78C T
0x990 T
0xA04 N
0x78C N

1/2
Solución

Estados del predictor después de resolver el salto


Selector Predictor bimodal Predictor gshare
Direcc. Resultado Combin
Bimodal Gshare PHT0 PHT1 PHT0 PHT1 BHR PHT0 PHT1
salto salto ado
Inicial - - - - 2 0 0 2 0 2 1
0x654 N T N T 2 1 0 2 0 2 0
0x780 T N T T 3 1 0 2 1 3 0
0x78C T T T T 3 1 0 3 1 3 0
0x990 T N N N 3 1 1 3 1 3 1
0xA04 N T T T 3 1 1 2 0 2 1
0x78C N T N T 3 2 1 2 0 2 0

Tasa de predicción del predictor P0: 1/6 = 16.7%


Tasa de predicción del predictor P1: 4/6 = 66.7%
Tasa de predicción del predictor M: 2/6 = 33%

2/2
Problema 2 Febrero 2015 1ª (2 puntos) – Igual que actividad 1.3 y 1.6 del libro de texto.

Un procesador sin segmentación necesita 330 nseg. para procesar una instrucción. Con respecto a este
procesador, calcular la aceleración que se obtiene en los dos casos siguientes:

a) Un procesador A dotado de una segmentación de 6 etapas, consumiendo cada etapa el mismo tiempo.
Cada etapa ocasiona una sobrecarga de 11 nseg. no existiendo ningún tipo de detención en la
segmentación.

De acuerdo con el enunciado el tiempo medio de ejecución de una instrucción en el procesador sin
segmentar es de 330 nseg. La segmentación de 6 etapas de este apartado se caracteriza por acortar el tiempo
medio de ejecución de una instrucción a 66 nseg.:

330 nseg
 11 nseg  66 nseg
6 etapas

Por lo tanto, la aceleración obtenida por la máquina A con respecto a la máquina sin segmentar es 5:

330 nseg
 5 veces más rápido
66 nseg

b) Un procesador B con una segmentación de 6 etapas, consumiendo cada una de ellas 35 nseg., 25 nseg.,
45 nseg., 45 nseg., 50 nseg., y 35 nseg. respectivamente, y siendo la sobrecarga por cada etapa de 11
nseg. Un 42% de todas las instrucciones de la segmentación son detenidas durante un ciclo de reloj y un
12% durante dos ciclos.

La etapa más lenta es la que dicta la velocidad de las restantes etapas, por lo que cada etapa consumirá 61
nseg. (50 nseg. más los 11 nseg. de retardo).

El 42% ocasiona una detención de un ciclo, consumiendo 122 nseg. (2 ciclos · 61 nseg)

El 12% ocasiona una detención de dos ciclos, por lo que consumen 183 nseg. (3 ciclos · 61 nseg).

El 46%, no provocan detenciones, empleando sólo un ciclo de reloj (61 nseg.).

De acuerdo con esto, el tiempo medio consumido por una instrucción es:

0,42 · 61 · 2 = 51,24 nseg.


0,12 · 61 · 3 = 21,96 nseg.
0,46 · 61 · 1 = 28,06 nseg.

Total: = 101,26 nseg.

Por lo tanto, la aceleración obtenida por la máquina B con respecto a la máquina sin segmentar es de 1,96:

330 nseg
 3, 26 veces más rápido
101, 26 nseg
Problema 3 Febrero 2015 Primera Semana

Considere el siguiente bucle:

for (i=0; i<100; i++)


Y[i]:= X[i]/s; // i1
X[i]:= X[i]+s; // i2
Z[i]:= Y[i]+s; // i3
Y[i]:= Y[i]-s; // i4
end for;

a) Determine todas las dependencias verdaderas, las dependencias de salida y las antidependencias. Razone su
respuesta.

b) Reescriba el código eliminando todas las dependencias que sea posible mediante la técnica de
renombramiento de registros. ¿Qué dependencias permanecen?

c) ¿Es posible vectorizar el código que ha obtenido en el apartado anterior? Explique qué debe suceder para que
el procesdor pueda manejar el código y se eviten los riesgos que quedan. ¿Qué característica debería tener el
procesador vectorial para poder mejorar la velocidad de procesamiento del código del apartado (b) con las
dependencias existentes?

d) Escriba el código vectorial correspondiente al código obtenido del apartado (b).

Solución
a) Hay dependencias verdaderas (RAW) entre las instrucciones i1 e i3, y entre la i1 y la i4 a causa de Y[i].
Hay una antidependencia (WAR) en la i1 y la i2 por X[i] y otra entre la i3 e i4 por Y[i].
Hay una dependencia de salida (WAW) entre la i1 y la i4 a consecuencia de Y[i].

b) El vector Y en las instrucciones en la que es el operando destino se renombra como Y1 e Y2 para eliminar
las dos antidependencias que provoca.
El vector X se renombra como X1 para eliminar la antidependencia (WAR). Se supone que en el código C que
sigue al bucle el compilador habrá reemplazado la variable X por X1.

for (i=0; i<100; i++)


Y1[i]:= X[i]/s; // i1
X1[i]:= X[i]+s; // i2
Z[i]:= Y1[i]+s; // i3
Y2[i]:= Y1[i]-s; // i4
end for;
Las únicas que permanecen son las dependencias verdaderas entre i1-i3 e i1-i4.
c) Sí es posible ya que no existen dependencias RAW entre iteraciones del bucle por lo que no evitarán la
vectorización del mismo. Sin embargo, las dependencias forzarán a que las instrucciones i3 e i4 tengan que
esperar a que se complete la instrucción i1 aun cuando las instrucciones i3 e i4 utilicen unidades funcionales
diferentes a las de la instrucción i1.
Una técnica para aumentar el rendimiento es el encadenamiento. Esto permite que no sea necesario serializar los
resultados entre unidades funcionales.

1/2
d) El código vectorial resultante es el siguiente:

LV Vx,Rx // Carga de X
DIVVS Vy1,Vx,Fs // T=X+s
ADDSV Vx1,Vx,Fs // X1=X+s
ADDSV Vz,Vy1,Fs // Z=T+s
SUBVS Vy2,Vy1,Fs // Y=T+s
SV Rx,Vx1 // Almacenamiento de X
SV Ry,Vy2 // Almacenamiento de Z
SV Rz,Vz // Almacenamiento de Y

2/2
Problema 1 Febrero 2015 2ª (3 puntos)

A partir de la organización lógica de la segmentación de instrucciones de la ASG de cinco etapas y


considerando que no existen adelantamientos entre unidades funcionales, dibuje los cronogramas de las
instrucciones del siguiente fragmento de código:

i1: MULT R2, R5, R6


i2 MULT R1, R3, R4
i3 SD 8 (R7), R9
i4 ADD R8, R10, R11
i5 ADD R12, R8, R13

Considere que todas las instrucciones requieren de un único ciclo de reloj en la etapa EX excepto las
instrucciones de multiplicación que necesitan dos ciclos.

i1 IF1 ID1 EX1 EX1 ME1 WB1


i2 IF2 ID2 ---- EX2 EX2 ME2 WB2
i3 IF3 ---- ID3 EX3 ---- ME3 WB3
i4 ---- IF4 ID4 ---- EX4 ME4 WB4
i5 IF5 ---- ---- ---- ID5 EX5 ME5 WB5

Considere que se disponen de dos unidades funcionales de tal forma que se pueden solapar dos etapas EX de
dos instrucciones en el mismo ciclo de reloj.

i1 IF1 ID1 EX1 EX1 ME1 WB1


i2 IF2 ID2 EX2 EX2 ME2 WB2
i3 IF3 ID3 EX3 ---- ME3 WB3
i4 IF4 ID4 ---- EX4 ME4 WB4
i5 IF5 ---- ---- ---- ID5 EX5 ME5 WB5
Problema 2 Febrero 2015 Segunda Semana

Considere el siguiente bucle:

for (i=1; i<n; i++)


A[i]:= B;
C[i]:= A[i-1];
end for;

a) ¿Por qué existen dependencias entre iteraciones en este fragmento de código? ¿Es posible realizar la
vectorización directamente? Razone su respuesta.

b) Reescriba el bucle anterior para que pueda vectorizarse en dos secuencias vectoriales separadas eliminando la
dependencia entre iteraciones.

c) Escriba el código vectorial correspondiente al código que ha obtenido en el apartado anterior. Considere que
el registro vectorial V0 contiene ceros y que B se encuentra almacenado en el registro Fb.

d) Suponiendo que el procesador vectorial tiene las siguientes características:

- Registros con una longitud vectorial máxima de 64 elementos.


- Una unidad de suma vectorial con tiempo de arranque de 6 ciclos.
- Una unidad de carga/almacenamiento con tiempo de arranque de 12 ciclos.
- Tbase de 10 ciclos y Tbucle de 15 ciclos

calcule Tn para la dos secuencias vectoriales obtenidas considerando la existencia de encadenamiento entre
unidades funcionales.

Solución

a) Existe un dependencia entre iteraciones entrea la sentencia A[i]:= B y la C[i]:= A[i-1]. Este
dependencia surge debido a que la asignación a C[i] depende de un valor de A[i] calculado en una iteración
previa.

Debido a la existencia de estas dependencias entre iteraciones, no es posible realizar la vectorización de la


forma habitual, es decir, seccionando el bucle y aplicando directamente las instrucciones escalares y vectoriales
disponibles en el repertorio de instrucciones.

b)
for (i=1; i<n; i++)
A[i]:= B;
end for;

for (i=1; i<n; i++)


C[i]:= A[i-1];
end for;

1/4
c) El código vectorial para los cuerpos de los dos podría ser el siguiente:

ADDSV V1,V0,Fb // A[i]:= 0 + B;


SV Ra,V1 // Almacenamiento de A
......
........
SUBI Ra,Ra,#8 // Carga del vector A desde i-1
LV V1,Ra // Carga del vector A empezando
SV Rc,V2 // Almacenamiento de A en C

d) La primera secuencia vectorial es:

ADDSV V1,V0,Fb // A[i]:= 0 + B;


SV Ra,V1 // Almacenamiento de A

Analizando los riesgos estructurales se obtiene el siguiente código vectorial:

Convoy 1: ADDSV V1,V0,Fb


SV Ra,V1

La secuencia de ejecución del convoy si se considera que VLR es 64 es la que se muestra en la siguiente figura:

Dado que hay un único convoy al permitirse el encadenamiento, Telemento es 1 ciclo y el Tarranque total es
igual a la suma de los tiempos de arranque visibles. Esto es

Tarranque = Tarranque ADDSV + Tarranque SV

Tarranque = (6 + 12) ciclos = 18 ciclos

Sustituyendo los valores conocidos de Tarranque y Telemento en la expresión que determina el tiempo de
ejecución de un bucle vectorizado para vectores de longitud n se tiene

n
Tn  10     15  18  n
 64 

En lo que respecta a la segunda secuencia vectorial:

LV V1,Ra
ADDV V2,V0,V1
SV Rc,V2

Analizando los riesgos estructurales se obtiene el siguiente código vectorial:

Convoy 1: LV V1,Ra
Convoy 2: SV Rc,V2

2/4
La secuencia de ejecución de los dos convoyes si se considera que VLR es 64 es la que se muestra en la
siguiente figura.

Dado que hay dos convoyes al existir una única unidad de carga/almacenamiento Telemento es 2 ciclos y el
Tarranque total es igual a la suma de los tiempos de arranque visibles. Esto es

Tarranque = Tarranque LV + Tarranque SV

Tarranque = (12 + 12) ciclos = 24 ciclos

Sustituyendo los valores conocidos de Tarranque y Telemento en la expresión que determina el tiempo de
ejecución de un bucle vectorizado para vectores de longitud n se tiene

n
Tn  10     15  24   2  n
 64 

3/4
Problema 3 Febrero 2015 Segunda Semana

Una forma de derivar la expresión del ancho de bisección de un hipercubo es recurrir a la forma en que se
construyen ya que un hipercubo de dimensión d está formado por dos hipercubos de dimensión d-1. Se
argumenta que, debido a que los nodos de los dos subcubos resultantes de dimensión d-1 tienen conexiones
directas, entre ambos subcubos existen 2(d-1) enlaces directos. Sin embargo, es posible dividir un hipercubo de
dimensión d en dos particiones con igual número de procesadores que no sean a su vez hipercubos de
dimensión d-1.

Demuestre que tales particiones tendrán siempre más de 2(d-1) enlaces directos entre ellas, es decir, que el
número mínimo de enlaces entre dos particiones con igual número de procesadores se obtiene únicamente
cuando las particiones son subcubos.

Solución

Una manera informal de demostrar la proposición es comenzando por un particionamiento del hipercubo en dos
mitades A y B en la que cada mitad constituya un hipercubo de dimensión d-1.

Por su estructura habrá p/2 = 2(d-1) enlaces de comunicación entre estas dos particiones A y B. Si ahora se
mueve un nodo de la partición A a la B, se elimina un enlace de comunicación entre ambas particiones. Sin
embargo, este procesador está conectado en su partición A a d-1 procesadores. Por lo tanto, un conjunto
adicional de d-1 enlaces se añaden al subcubo B destinatario de este nodo. El número de enlaces de
comunicación pasa a ser:
2(d-1) +(-1+(d-1)) = 2(d-1) +d-2

Por ejemplo, en un hipercubo de dimensión 3 los enlaces de comunicación son 4. Tras realizar el cambio de
nodo, pasan a ser 5 tal y como se aprecia en la figura situada a continuación.

Obsérvese que A y B ya no son hipercubos. De esta forma, moviendo procesadores de una partición a la otra se
puede apreciar que el mínimo resultante es aquel en el cual las dos particiones deben ser hipercubos. Por lo
tanto, el número mínimo de enlaces de comunicaciones entre las dos mitades es 2(d-1)

Otro ejemplo es el particionamiento en dos mitades A y B en las que cada parte constituye un hipercubo de
dimensión d-1 y se realiza un intercambio de nodos en el que ambas particiones quedan con el mismo número
de nodos p/2 pero sin ser hipercubos. Inicialmente, y al igual que antes, habrá 2(d-1) enlaces de comunicación
entre estas dos particiones A y B. Ahora se procede a mover un nodo de la partición A a la B y viceversa, es
decir, uno de la B se mueve a la A. Con el nodo perdido en cada partición se pierde un enlace de comunicación
pero se ganan d-1; y con el nodo recibido sucede lo mismo: se pierde un enlace de comunicación pero se ganan
d-1. Se tiene que los enlaces de comunicación pasan a ser:

2(d-1) +2* (-1+(d-1)) = 2(d-1) +2* (d-2)

A continuación se presentan dos ejemplos de particionamiento de un hipercubo de dimensión 3 en partes con


igual número de nodos pero que ya no son hipercubos de dimensión 2. El nº de enlaces ha pasado de 4 a 6.

1/2
Problema 1 Septiembre 2015 (3 puntos)

A partir de la organización lógica de la segmentación de instrucciones de la ASG de cinco etapas y


considerando que no existen adelantamientos entre unidades funcionales, dibuje los cronogramas de las
instrucciones del siguiente fragmento de código:

i1: ADD R3, R4, R5


i2 MULT R8, R3, R4
i3 ADD R7, R2, R1
i4 SD 9 (R6), R10
i5 ADD R11, R7, R3

Considere que todas las instrucciones requieren de un único ciclo de reloj en la etapa EX excepto las
instrucciones de multiplicación que necesitan dos ciclos.

1 2 3 4 5 6 7 8 9 10 11 12 13
i1 IF1 ID1 EX1 ME1 WB1
i2 IF2 ---- ---- ID2 EX2 EX2 ME2 WB2
i3 ---- ---- IF3 ID3 ---- EX3 ME3 WB3
i4 ---- ---- IF4 ---- ID4 EX4 ME4 WB4
i5 ---- IF5 ---- ID5 EX5 ME5 WB5

Considere que se disponen de dos unidades funcionales de tal forma que se pueden solapar dos etapas EX de
dos instrucciones en el mismo ciclo de reloj.
No se permite reorganización de código.

1 2 3 4 5 6 7 8 9 10 11 12 13
i1 IF1 ID1 EX1 ME1 WB1
i2 IF2 ---- ---- ID2 EX2 EX2 ME2 WB2
i3 ---- ---- IF3 ID3 EX3 ---- ME3 WB3
i4 IF4 ID4 ---- EX4 ME4 WB4
i5 IF5 ---- ---- ID5 EX5 ME5 WB5

La detención de la i3 en el ciclo 8 es necesario, de lo contrario se están solapando las etapas MEM y WB de


dos instrucciones consecutivas.
Problema 2 (3 puntos) Septiembre 2015
Dado el siguiente fragmento de código:
if (a AND b)
j:=j+1;
else
if (c)
k:=k+1;
else
k:=k-1;
end if;
end if;
i:=i+1;

a) Escriba el código intermedio utilizando instrucciones condicionadas con el fin de reducir al mínimo las
sentencias de salto condicional. El contenido de las variables enteras a, b, c, j y k se encuentra
almacenado en los registros Ra, Rb, Rc, Rj y Rk, respectivamente. No utilice instrucciones lógicas tipo
AND y considere que si la variable es diferente de cero la expresión lógica es verdadera para la
instrucción if.
b) Transforme el código anterior en instrucciones VLIW teniendo en cuenta que el formato de instrucción
VLIW admite solo dos operaciones pero de cualquier clase.

Solución

a)
PRED_EQ p1,p2,Ra,#0 %i1
PRED_EQ p1,p3,Rb,#0 (p2) %i2: Si a=1
ADDI Rj,Rj,#1 (p3) %i3: Si a=1 y b=1
PRED_NEQ p4,p5,Rc,#0 (p1) %i4: Si a=0 y/o b=0
ADDI Rk,Rk,#1 (p4) %i5: Si c=1
SUBI Rk,Rk,#1 (p5) %i6: Si c=0
ADDI Ri,Ri,#1 %i7

b)

Slot 1 Slot 2
1 PRED_EQ p1,p2,Ra,#0 ADDI Ri,Ri,#1
2 PRED_EQ p1,p3,Rb,#0 (p2)
3 PRED_NEQ p4,p5,Rc,#0 (p1) ADDI Rj,Rj,#1 (p3)
4 ADDI Rk,Rk,#1 (p4) SUBI Rk,Rk,#1 (p5)
Problema 3 (4 puntos) Septiembre 2015

En un procesador vectorial dotado de una unidad funcional de suma y otra de multiplicación se ejecuta el
siguiente programa en C:

for (i=0; i<10000; i++) {


t[i]:= a[i]*s[i];
s[i]:= a[i]+b[i];
}

Las características del procesador vectorial son las siguientes:

 La latencia de la unidad de memoria es de 14 ciclos de reloj.


 El tiempo de arranque de la unidad de suma es de 8 ciclos de reloj.
 El tiempo de arranque de la unidad de multiplicación es de 10 ciclos de reloj.
 Tbucle = 25.
 Tbase se considera que no existe.
 Frecuencia de reloj = 800 Mhz.
 MVL = 64.

a) Escriba una secuencia de instrucciones vectoriales que sustituya a la parte interior del bucle del
programa C de forma que queden eliminadas todas las dependencias que sea posible. Considere que las
direcciones de a, b, s y t están almacenadas respectivamente en Ra, Rb, Rs y Rt, respectivamente.

b) Calcule el tiempo de ejecución T 10000 y el rendimiento teórico máximo R  en MFLOPS bajo las
siguientes precondiciones:

1. Sin encadenamiento.
2. Con encadenamiento.
3. Con encadenamiento y 2 unidades de carga/almacenamiento.

Solución

a) El código vectorial equivalente a las operaciones que se realizan en el cuerpo del bucle es:

LV V1,Ra
LV V2,Rb
LV V3,Rs
MULTV V4,V3,V1
ADDV V3,V2,V1
SV Rs,V3
SV Rt,V4

Existe una falsa dependencia por V3 y varias dependencias verdaderas. La falsa dependencia se puede
eliminar mediante el renombramiento de los registros obteniéndose el siguiente código:
LV V1,Ra
LV V2,Rb
LV V3,Rs
MULTV V5,V3,V1
ADDV V6,V2,V1
SV Rs,V5
SV Rt,V6

Las dependencias verdaderas permanecen y es el procesador vectorial el encargado de garantizar la


semántica del código mediante la organización adecuada de la emisión/terminación de las instrucciones.

b.1) Dadas las características del procesador, las dependencias existentes en el código vectorial y la
ausencia de encadenamiento entre unidades, el número de convoyes que se pueden formar es de seis:

Convoy 1: LV V1,Ra
Convoy 2: LV V2,Rb
Convoy 3: LV V3,Rs
Convoy 4: MULTV V5,V3,V1
ADDV V6,V2,V1
Convoy 5: SV Rs,V5
Convoy 6: SV Rt,V6

El Telemento es 6 ciclos ya que hay 6 convoyes. El Tarranque total es

Tarranque = 3*Tarranque LV + Tarranque MULTV + 2*Tarranque SV

Tarranque = (3*14+10+2*14) ciclos=80 ciclos

Con estos valores la expresión del tiempo total de ejecución queda

n
Tn     25  80   6  n
 64 

que para el caso particular de n=10000

10000 
T10000    25  80  6 10000
 64 
T10000  157  25  80  6 10000
T10000  76485 ciclos

que expresado en segundos

76485 ciclos
T10000   95,6 seg
800 *106 Hz

En lo que respecta al rendimiento teórico máximo


 2n 
R  lim  
n  T 
 n 
 
 
 2n 
R  lim
n   n  
    25  80   6  n 
  64  
 
 2n 
R  lim 
n  n 
 (  1)  25  80  6  n 
 64 
 2n 
R  lim 
n  105  7,64  n
 
R  0,261 FLOP/ciclo

Para expresar R en FLOPS ha que multiplicar el valor anterior por la frecuencia del procesador. Se tiene
así

R  0,261 FLOP/ciclo  800 MHz


R  208,8 MFLOPS

b.2) Utilizando encadenamiento, el número de convoyes que se pueden formar es de cinco:

Convoy 1: LV V1,Ra
Convoy 2: LV V2,Rb
Convoy 3: LV V3,Rs
MULTV V5,V3,V1
ADDV V6,V2,V1
Convoy 4: SV Rs,V5
Convoy 5: SV Rt,V6

El Telemento es 5 ciclos ya que hay 6 convoyes. El Tarranque total es

Tarranque = 3*Tarranque LV + Tarranque MULTV+ 2*Tarranque SV

Tarranque = (3*14+10+2*14) ciclos=80 ciclos

Con estos valores la expresión del tiempo total de ejecución queda

n
Tn     25  80   5  n
 64 

que para el caso particular de n=10000


10000 
T10000    25  80  5 10000
 64 
T10000  157  25  80  5 10000
T10000  66485 ciclos

que expresado en segundos

66485 ciclos
T10000   83,1seg
800 *106 Hz

En lo que respecta al rendimiento teórico máximo

 2n 
R  lim 
n  T 
 n 
 
 
 2n 
R  lim
n   n  
    25  80   5  n 
  64  
 
 2n 
R  lim 
n  n 
 (  1)  25  80  5  n 
 64 
 2n 
R  lim 
n  105  6,64  n
 
R  0,301 FLOP/ciclo

Para expresar R en FLOPS ha que multiplicar el valor anterior por la frecuencia del procesador. Se tiene
así

R  0,301 FLOP/ciclo  800 MHz


R  240,8 MFLOPS

b.3) Utilizando encadenamiento y 2 unidades de memoria el número de convoyes que se pueden formar
es de tres:

Convoy 1: LV V1,Ra
LV V2,Rb
Convoy 2: LV V3,Rs
MULTV V5,V3,V1
ADDV V6,V2,V1
SV Rs,V5
Convoy 3: SV Rt,V6

El Telemento es 3 ciclos ya que hay 3 convoyes. El Tarranque total es

Tarranque = 3*Tarranque LV + Tarranque MULTV + Tarranque SV


Tarranque = (3*14+10+14) ciclos=66 ciclos

Con estos valores la expresión del tiempo total de ejecución queda

n
Tn     25  66   3  n
 64 

que para el caso particular de n=10000

10000 
T10000    25  66  3 10000
 64 
T10000  157  25  66   3 10000
T10000  44287 ciclos

que expresado en segundos

44287 ciclos
T10000   55,35seg
800 *106 Hz

En lo que respecta al rendimiento teórico máximo

 2n 
R  lim  
n  T 
 n 
 
 
 2n 
R  lim
n   n  
    25  66  3  n 
  64  
 
 2n 
R  lim 
n  n 
 (  1)  25  66   3  n 
 64 
 2n 
R  lim 
n  91  4,421  n
 
R  0,452 FLOP/ciclo

Para expresar R en FLOPS ha que multiplicar el valor anterior por la frecuencia del procesador. Se tiene
así

R  0,452 FLOP/ciclo  800 MHz


R  361,909 MFLOPS

Otras dos opciones para organizar los convoyes son las siguientes:

Convoy 1: LV V1,Ra
LV V2,Rb
ADDV V6,V2,V1
Convoy 2: LV V3,Rs
MULTV V5,V3,V1
SV Rs,V5
Convoy 3: SV Rt,V6

Tarranque = 2*Tarranque LV + Tarranque ADDV+ Tarranque MULTV +2*Tarranque SV

Tarranque = (2*14+10+8+2*14) ciclos=74 ciclos

Convoy 1: LV V1,Ra
LV V2,Rb
Convoy 2: LV V3,Rs
MULTV V5,V3,V1
ADDV V6,V2,V1
SV Rs,V5
Convoy 3: SV Rt,V6

El Tarranque total pasa a ser:

Tarranque = 2*Tarranque LV + Tarranque MULTV +2*Tarranque SV

Tarranque = (2*14+10+2*14) ciclos=66 ciclos


TIPO DE EXAMEN: RESERVA- NACIONAL Y U.E.- SEPTIEMBRE

INSTRUCCIONES: Lea atentamente todos los enunciados. SE PERMITE UN LIBRO CON


ANOTACIONES Y SUBRAYADOS y CALCULADORA NO PROGRAMABLE.

Problema 1 (4 puntos)

Utilizando el algoritmo de Tomasulo, muestre la evolución de los registros en coma


flotante (FR) y las estaciones de reserva (RS) para todos los ciclos que sean necesarios en
la ejecución del siguiente fragmento de código:

il: ADDD F6 , F4, F2


i2: MULTD FO, F4, F6
i3: MULTD F6 , F6 , F2
i4: ADDD F2, F6 , FO

Considere las siguientes hipótesis de partida:

- Para reducir el número de ciclos máquina se permite que la FLOS distribuya hasta
dos instrucciones en cada ciclo según el orden del programa (incluso a estaciones
de reserva de una misma unidad funcional).
- Una instrucción puede comenzar su ejecución en el mismo ciclo en que se
distribuye a una estación de reserva.
- La operación suma tiene una latencia de un ciclo y la de multiplicación de dos
ciclos.
Se permite que una instrucción reenvíe su resultado a instrucciones dependientes
durante su último ciclo de ejecución. De esta forma, una instrucción a la espera de
un resultado puede comenzar su ejecución en el siguiente ciclo si detecta una
coincidencia.
- Los valores de etiqueta O 1, 02 y 03 se utilizan para identificar las tres estaciones de
reserva de la unidad funcional de suma, mientras que 04 y 05 se utilizan para
identificar las dos estaciones de reserva de la unidad funcional de
multiplicación/división. Estos valores de etiqueta son los ID de las estaciones de
reserva.

Inicialmente, el valor de los registros es F0 =8.0, F2=3.5, F4=2.0 y F6 =3.0

Reserva- Nacional y U.E.- Septiembre- curso 2014/15- Ingeniería de Computadores 11- UNED
Problema 2 (3 puntos)

El diagrama situado a continuación presenta la evolución temporal de un grupo de tres


instrucciones en un procesador superescalar dotado de un buffer de historia de 4 entradas
para el tratamiento de las interrupciones:

Instrucción 1 2 3 4 5 6 7 8 9

i1: SUB R7, R1, R6 IF ID EX EX WB

i2: MULT R3, R1, R4 IF ID EX EX EX EX WB

i3: ADD R4, R1, R5 IF ID EX EX WB

Considerando que el estado inicial del ARF al comienzo del ciclo 3 es el siguiente:

Rl 10 RS 15

R2 20 R6 16

R3 30 R7 17

R4 40 R8 18

a) Rellene el buffer de historia con el estado actual del procesador al comienzo del ciclo 3.

b) Muestre la evolución del buffer de historia y del ARF hasta el tratamiento de la


interrupción que aparece en la instrucción de multiplicación en el ciclo 6.

Problema 3 (3 puntos)

Una forma de derivar la expresión del ancho de bisección de un hipercubo es recurrir a la


forma en que se construyen ya que un hipercubo de dimensión d está formado por dos
hipercubos de dimensión d-1. Se argumenta que, debido a que los nodos de los dos
subcubos resultantes de dimensión d-1 tienen conexiones directas, entre ambos subcubos
existen 2(d-l) enlaces directos. Sin embargo, es posible dividir un hipercubo de dimensión
d en dos particiones con igual número de procesadores que no sean a su vez hipercubos
de dimensión d-1.

Demuestre que tales particiones tendrán siempre más de 2 (d-I) enlaces directos entre ellas,
es decir, que el número mínimo de enlaces entre dos particiones con igual número de
procesadores se obtiene únicamente cuando las particiones son subcubos.

Reserva- Nacional y U.E.- Septiembre- curso 2014/15- Ingeniería de Computadores 11- UNED
Centro Asociado Palma de Mallorca

Septiembre
pi b
2015 - R
Problema 1
Tutor: Antonio Rivero Cuesta

Mostrar la evolución de los Registros en coma


flotante (FR) y las estaciones de Reserva (RS)
para todos los ciclos que sean necesarios en la
ejecución del siguiente fragmento de código
utilizando el algoritmo de Tomasulo.
Tomasulo

i1: ADDD F6,F4,F2


i2
i2: MULTD F0,F4,F6
F0 F4 F6
i3: MULTD F6,F6,F2
, ,
i4: ADDD F2,F6,F0
• Considere las siguientes hipótesis de partida:

• Para reducir el número de ciclos máquina se


permite que la FLOS distribuya hasta dos
i
instrucciones
i en cada
d ciclo
i l según
ú ell orden
d del
d l
p g
programa.

• Una instrucción puede comenzar su ejecución


en el mismo ciclo en que se distribuye a una
estación de reserva.

• La operación suma tiene una latencia de un


ciclo y la de multiplicación de dos ciclos.
ciclos

• Se permite que una instrucción reenvíe su


resultado
l d a instrucciones
i i d
dependientes
di
j
durante su último ciclo de ejecución. De esta
forma una instrucción a la espera de un
resultado puede comenzar su ejecución en el
siguiente ciclo si se detecta una coincidencia.
• Los valores de etiqueta 01, 02 y 03 se utilizan
para identificar las tres estaciones de reserva
de la unidad funcional de suma, mientras que
04 y 05 se utilizan para identificar las dos
estaciones de reserva de la unidad funcional
d multiplicación/división.
de l i li ió /di i ió Estos
E valores
l d
de
etiqueta son los ID de las estaciones de
reserva.

• Inicialmente, el valor de los registros es


F0=8.0, F2=3.5, F4=2.0 y F6=3.0.

FR
Ciclo 1: Se
Ciclo1: Sedistribuyei1ei2
distribuye i1 e i2 bi O
bitOc. etiqueta
i d
dato
i1: ADDDF6,F4,F2
i2: MULTD F0,F4,F6 F0 Si 04 8.0
SeejecutaRS011/1
/ F2 35
3.5
SeenvíaRS01:5.5alCDB F4 2.0
NoseejecutaRS04
j
F6 Si 01 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

i1: 01 00 2.0 00 3.5 i2: 04 00 2.0 01 xx


02 05
03
MULT/DIV
SUMA
FR
Ciclo 2: Se
Ciclo2: Sedistribuyei3ei4
distribuye i3 e i4 bi O
bitOc. etiqueta
i d
dato
i3:MULTDF6,F6,F2
i4: ADDDF2,F6,F0 F0 Si 04 8.0
Seactualizael valordeRS01:5.5 F2 Si 02 35
3.5
SevacíaRS01 F4 2.0
SeejecutaRS041/2
SeejecutaRS051/2 F6 Si 05 30
3.0
NOseejecutaRS02

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 i2: 04 00 2.0 00 5.5
i4: 02 05 xx 04 xx i3: 05 00 5.5 00 3.5
03
MULT/DIV
SUMA

FR
Ciclo 3: Se
Ciclo3: SeejecutaRS042/2
ejecuta RS 04 2/2 bi O
bitOc. etiqueta
i d
dato
SeejecutaRS052/2
SeenvíaRS04:11.0alCDB F0 Si 04 8.0
S
SeenvíaRS05:19.25alCDB
í RS 05 19 25 l CDB F2 Si 02 35
3.5
NOseejecutaRS02 F4 2.0
F6 Si 05 30
3.0

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2
01 i2: 04 00 2.0 00 5.5
i4: 02 05 xx 04 xx i3: 05 00 5.5 00 3.5

MULT/DIV
SUMA
FR
Ciclo 4: Se
Ciclo4: Seactualizael
actualiza el valordeRS04:11.0
valor de RS 04: 11 0 bi O
bitOc. etiqueta
i d
dato
Seactualizael valordeRS05:19.25
SevacíaRS04 F0 11.0
S
SevacíaRS05
í RS 05 F2 Si 02 35
3.5
SeejecutaRS021/1 F4 2.0
SeenvíaRS02:30.25alCDB
F6 19 25
19.25

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
i4: 02 05 19.25 04 11.0 05

MULT/DIV
SUMA

FR
Ciclo 5:
Ciclo5: Seactualizael
Se actualiza el valordeRS02:30.25
valor de RS 02: 30 25 bi O
bitOc. etiqueta
i d
dato
SevacíaRS02
F0 11.0
F2 30 25
30.25
F4 2.0
F6 19 25
19.25

RS RS
ID etiq_1 oper_1 etiq_2 oper_2 ID etiq_1 oper_1 etiq_2 oper_2

01 04
02 05

MULT/DIV
SUMA
Problema 3 Septiembre 2015 Reserva

Una forma de derivar la expresión del ancho de bisección de un hipercubo es recurrir a la forma en que se
construyen ya que un hipercubo de dimensión d está formado por dos hipercubos de dimensión d-1. Se
argumenta que, debido a que los nodos de los dos subcubos resultantes de dimensión d-1 tienen conexiones
directas, entre ambos subcubos existen 2(d-1) enlaces directos. Sin embargo, es posible dividir un hipercubo de
dimensión d en dos particiones con igual número de procesadores que no sean a su vez hipercubos de
dimensión d-1.

Demuestre que tales particiones tendrán siempre más de 2(d-1) enlaces directos entre ellas, es decir, que el
número mínimo de enlaces entre dos particiones con igual número de procesadores se obtiene únicamente
cuando las particiones son subcubos.

Solución

Una manera informal de demostrar la proposición es comenzando por un particionamiento del hipercubo en dos
mitades A y B en la que cada mitad constituya un hipercubo de dimensión d-1.

Por su estructura habrá p/2 = 2(d-1) enlaces de comunicación entre estas dos particiones A y B. Si ahora se
mueve un nodo de la partición A a la B, se elimina un enlace de comunicación entre ambas particiones. Sin
embargo, este procesador está conectado en su partición A a d-1 procesadores. Por lo tanto, un conjunto
adicional de d-1 enlaces se añaden al subcubo B destinatario de este nodo. El número de enlaces de
comunicación pasa a ser:
2(d-1) +(-1+(d-1)) = 2(d-1) +d-2

Por ejemplo, en un hipercubo de dimensión 3 los enlaces de comunicación son 4. Tras realizar el cambio de
nodo, pasan a ser 5 tal y como se aprecia en la figura situada a continuación.

Obsérvese que A y B ya no son hipercubos. De esta forma, moviendo procesadores de una partición a la otra se
puede apreciar que el mínimo resultante es aquel en el cual las dos particiones deben ser hipercubos. Por lo
tanto, el número mínimo de enlaces de comunicaciones entre las dos mitades es 2(d-1)

Otro ejemplo es el particionamiento en dos mitades A y B en las que cada parte constituye un hipercubo de
dimensión d-1 y se realiza un intercambio de nodos en el que ambas particiones quedan con el mismo número
de nodos p/2 pero sin ser hipercubos. Inicialmente, y al igual que antes, habrá 2(d-1) enlaces de comunicación
entre estas dos particiones A y B. Ahora se procede a mover un nodo de la partición A a la B y viceversa, es
decir, uno de la B se mueve a la A. Con el nodo perdido en cada partición se pierde un enlace de comunicación
pero se ganan d-1; y con el nodo recibido sucede lo mismo: se pierde un enlace de comunicación pero se ganan
d-1. Se tiene que los enlaces de comunicación pasan a ser:

2(d-1) +2* (-1+(d-1)) = 2(d-1) +2* (d-2)

A continuación se presentan dos ejemplos de particionamiento de un hipercubo de dimensión 3 en partes con


igual número de nodos pero que ya no son hipercubos de dimensión 2. El nº de enlaces ha pasado de 4 a 6.

1/2
TIPO DE EXAMEN: ¡a SEMANA- NACIONAL y U.E.- FEBRERO

INSTRUCCIONES: Lea atentamente todos los enunciados. SE PERMITE UN LIBRO CON


ANOTACIONES Y SUBRAYADOS Y CALCULADORA NO PROGRAMABLE.

Problema 1 (3 puntos)

A partir de la organización lógica de la segmentación de instrucciones de la ASG de cinco


etapas dibuje los cronogramas de las instrucciones del fragmento de código situado a
continuación para los dos siguientes supuestos:

a) Considere que todas las instrucciones requieren de un único ciclo de reloj en la etapa EX,
que existe interbloqueo entre etapas, que no existen ni adelantamientos ni reorganización de
código y que se permite leer y escribir en el banco de registros durante el mismo ciclo.

b) A partir del supuesto del apartado a), la etapa EX de las instrucciones de multiplicación
necesita dos ciclos y, además, se dispone de dos unidades funcionales de tal forma que se
pueden solapar dos etapas EX de dos instrucciones cualesquiera en el mismo ciclo de reloj.

i1: MULT R3,R4,R5


i2: MULT R8,R3,R4
i3: ADD R1,R2,R5
i4: SD 4(R9),R1
i5: LD R6,4(R7)
i6: ADD R8,R6,R4

Problema 2 (3 puntos)

El diagrama situado a continuación presenta la evolución temporal de un grupo de tres


instrucciones en un procesador superescalar dotado de un buffer de historia de 4 entradas para
el tratamiento de las interrupciones:

Instrucción 1 2 3 4 5 6 7 8 9

i1: SUB R7,R1,R6 IF ID EX EX WB

i2: MULT R3,R1,R4 IF ID EX EX EX EX WB

i3: ADD R4,R1,R5 IF ID EX EX WB

Considerando que el estado inicial del ARF al comienzo del ciclo 3 es el siguiente:

Rl 10 RS 15

R2 20 R6 16

R3 30 R7 17

R4 40 R8 18

1 • semana-Nacional y U.E. -Febrero-curso 2015/16 -Ingeniería de Computadores 11 -UNED 112


a) Rellene el buffer de historia con el estado actual del procesador al comienzo del ciclo 3.

b) Muestre la evolución del buffer de historia y del ARF hasta el tratamiento de la interrupción
que aparece en la instrucción de multiplicación en el ciclo 6.

Problema 3 (4 puntos)

Dado el siguiente bucle:

for (i=O; i<256; i++)


if (i mod 2) then
B(i).- B(i)+A(i);
end if;
end for;

a) Genere el código vectorial correspondiente al cuerpo del bucle recurriendo a las


instrucciones LVWS y SVWS.
b) Calcule el tiempo de ejecución del bucle vectorizado considerando que MVL es 64, hay una
unidad funcional de carga/almacenamiento, una unidad funcional de suma, Tbucle es de 10
ciclos y Tbase de 5 ciclos. El coste de arranque de la unidad de suma vectorial es de 6 ciclos y
el de la unidad de carga/almacenamiento de 12 ciclos y ambas se pueden encadenar. Las
direcciones de A y B se encuentran ubicadas en los registros R1 y R2.

1 • semana-Nacional y U.E. -Febrero-curso 2015/16 -Ingeniería de Computadores 11 -UNED 2/2


Problema 1 Febrero 2016 1ª (3 puntos)

A partir de la organización lógica de la segmentación de instrucciones de la ASG de cinco etapas y


considerando que no existen adelantamientos entre unidades funcionales, dibuje los cronogramas de las
instrucciones del siguiente fragmento de código situado a continuación para los dos siguientes supuestos:

i1: MULT R3, R4, R5


i2 MULT R8, R3, R4
i3 ADD R1, R2, R5
i4 SD 4 (R9), R1
i5 LD R6, 4(R7)
i6 ADD R8, R6, R4

Considere que todas las instrucciones requieren de un único ciclo de reloj en la etapa EX, que existe
interbloqueo entre etapas, que no existen ni adelantamientos ni reorganización de código y que se permite
leer y escribir en el banco de registros durante el mismo ciclo.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
i1 IF1 ID1 EX1 ME1 WB1
i2 IF2 ---- ---- ID2 EX2 ME2 WB2
i3 IF3 ID3 EX3 ME3 WB3
i4 IF4 ---- ---- ID4 EX4 ME4 WB4
i5 IF5 ID5 EX5 ME5 WB5
i6 IF6 ---- ---- ID6 EX6 ME6 WB6

A partir del supuesto del apartado a), la etapa EX de las instrucciones de multiplicación necesita dos ciclos
y, además, se dispone de dos unidades funcionales de tal forma que se pueden solapar dos etapas EX de dos
instrucciones cualesquiera en el mismo ciclo de reloj.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
i1 IF1 ID1 EX1 EX1 ME1 WB1
i2 IF2 ---- ---- ---- ID2 EX2 EX2 ME2 WB2
i3 IF3 ID3 EX3 ME3 ---- WB3
i4 IF4 ---- ---- ---- ID4 EX4 ME4 WB4
i5 IF5 ID5 EX5 ME5 WB5
i6 IF6 ---- ---- ID6 EX6 ME6 WB6
Problema 2 Febrero 2016 1ª (3 puntos)

El diagrama situado a continuación presenta la evolución temporal de un grupo de tres instrucciones en un


procesador superescalar dotado de un buffer de historia de 4 entradas para el tratamiento de las interrupciones:

Instrucción 1 2 3 4 5 6 7 8 9
i1: SUB R7,R1,R6 IF ID EX EX WB
i2: MULT R3,R1,R4 IF ID EX EX EX EX WB
i3: ADD R4,R1,R5 IF ID EX EX WB

Considerando que el estado inicial del ARF al comienzo del ciclo 3 es el siguiente:

R1 10 R5 15
R2 20 R6 16
R3 30 R7 17
R4 40 R8 18

a) Rellene el buffer de historia con el estado actual del procesador al comienzo del ciclo 3.
b) Muestre la evolución del buffer de historia y del ARF hasta el tratamiento de la interrupción que aparece en
la instrucción de multiplicación en el ciclo 6.

Solución

a) El estado del buffer de historia al comienzo del ciclo 3 debe reflejar la emisión de las instrucciones i1 e i2 y
el almacenamiento de los valores iniciales de los registros destino. Este aspecto es importante ya que al tener un
buffer de historia el valor de los registros destino que se almacena no es el valor final (tras realizar la operación
aritmética) sino el inicial para hacer de respaldo en caso de una interrupción y ser necesario dejar el ARF como
antes de iniciarse el procesamiento de la instrucción.

O E F Dir Rd Vp Int
1 1 0 i1 R7 17 0 ← Cola
1 1 0 i2 R3 30 0
1 0 0 i3 R4 40 0
← Cabecera
b) Ciclo 4: Se emite i3. Las instrucciones i1 e i2 continúan su ejecución.

R1 10 R5 15
R2 20 R6 16
R3 30 R7 17
R4 40 R8 18

O E F Dir Rd Vp Int
1 1 0 i1 R7 17 0 ← Cola
1 1 0 i2 R3 30 0
1 1 0 i3 R4 40 0
← Cabecera

Ciclo 5: Finaliza i1y se escribe el resultado en el ARF.

R1 10 R5 15
R2 20 R6 16
R3 30 R7 -6
R4 40 R8 18

O E F Dir Rd Vp Int
1 1 1 i1 R7 17 0 ← Cola
1 1 0 i2 R3 30 0
1 1 0 i3 R4 40 0
← Cabecera

Ciclo 6: Termina i1, finaliza i3 y se escribe el resultado en el ARF. Aparece una interrupción en i2.

R1 10 R5 15
R2 20 R6 16
R3 30 R7 -6
R4 25 R8 18

O E F Dir Rd Vp Int
0 1 1 i1 R7 17 0
1 1 0 i2 R3 30 1 ← Cola
1 1 1 i3 R4 40 0
← Cabecera
Ciclo 7: Finaliza i2.

R1 10 R5 15
R2 20 R6 16
R3 400 R7 -6
R4 25 R8 18

O E F Dir Rd Vp Int
0 1 1 i1 R7 17 0
1 1 1 i2 R3 30 1 ← Cola
1 1 1 i3 R4 40 0
← Cabecera

Ciclo 8: Termina i2 y se trata la interrupción

R1 10 R5 15
R2 20 R6 16
R3 30 R7 -6
R4 40 R8 18

O E F Dir Rd Vp Int
0 1 1 i1 R7 17 0
0 1 1 i2 R3 30 1
0 1 1 i3 R4 40 0
← Cola
←Cabecera
TIPO DE EXAMEN: 2ª SEMANA - NACIONAL - FEBRERO 2016

INSTRUCCIONES: Lea atentamente todos los enunciados. SE PERMITE UN LIBRO CON


ANOTACIONES Y SUBRAYADOS Y CALCULADORA NO PROGRAMABLE.

Problema 1 (4 puntos)

A partir de la organización lógica de la segmentación de instrucciones de la ASG de cinco


etapas dibuje los cronogramas de las instrucciones del fragmento de código situado a
continuación para los siguientes supuestos:

a) Considere que todas las instrucciones requieren de un único ciclo de reloj en la etapa EX,
que existe interbloqueo entre etapas, que no existen ni adelantamientos ni reorganización de
código y que se permite leer y escribir en el banco de registros durante el mismo ciclo.

b) A partir del supuesto del apartado a), si se permitiese la reorganización de código ¿sería
posible evitar todas las detenciones que se producen en la segmentación para el fragmento del
código considerado? Si la respuesta es afirmativa, enumere el orden en el que se ejecutarían las
instrucciones (en este caso no sería necesario dibujar el cronograma).

c) A partir del supuesto del apartado a), la etapa EX de las instrucciones de multiplicación
necesita dos ciclos y, además, se dispone de dos unidades funcionales de tal forma que se
pueden solapar dos etapas EX de dos instrucciones cualesquiera en el mismo ciclo de reloj.

i1: ADD R2,R1,R4


i2: ADD R3,R5,R2
i3: MULT R7,R3,R5
i4: SD 8(R6),R10
i5: LD R8,4(R9)
i6: ADD R1,R2,R4
i7: MULT R12,R4,R11

Problema 2 (3 puntos)

a) Aplicando la técnica de seccionamiento de bucles, escriba el código escalar y vectorial


necesario para realizar la operación vectorial Y=Y+X*s, donde s es un escalar en coma
flotante y X e Y son vectores de 150 elementos con una longitud de 8 bytes. Considere que s, X
e Y se encuentran almacenados en la direcciones de memoria M[R1], M[R2] y M[R3],
respectivamente. El direccionamiento de memoria se realiza por bytes y MVL es 64.

b) ¿Qué cambios habría que realizar en el código que ha desarrollado si la longitud del vector
no se conociese en tiempo de compilación sino en tiempo de ejecución y estuviese almacenado
en un registro escalar?
Instrucciones que puede tener que utilizar:
MOD Ri,Rj,MLV % Realiza la operación Ri := Rj mod MLV

2ª semana - Nacional - Febrero - curso 2015/16 – Ingeniería de Computadores II - UNED 1/2


Problema 3 (3 puntos)

a) Derive una expresión para el cálculo de la distancia mínima entre dos conmutadores
cualesquiera fuente f y destino d para un anillo de k nodos suponiendo que los canales de
comunicación son unidireccionales. Los canales son positivos, es decir, un paquete puede ir del
nodo 2 al 0, pero no de forma directa (del 2 al 1 y del 1 al 0), sino recorriendo todo el anillo
(del 2 al 3, del 3 al 4, …, y del k-1 al 0).

b) Derive una expresión similar a la anterior pero suponiendo que los canales de comunicación
son bidireccionales. Plantee un ejemplo entre dos nodos con k=4.

2ª semana - Nacional - Febrero - curso 2015/16 – Ingeniería de Computadores II - UNED 2/2


Solución al problema 1

a)

i1: IF1 ID1 EX1 MEM1 WB1


i2: IF2 -- -- ID2 EX2 MEM2 WB2
i3: -- -- IF3 -- -- ID3 EX3 MEM3 WB3
i4: -- -- IF4 ID4 EX4 MEM4 WB4
i5: IF5 ID5 EX5 MEM5 WB5
i6: IF6 ID6 EX6 MEM6 WB6
i7: IF7 ID7 EX7 MEM7 WB7

b) Sí que es posible. Un posible orden de ejecución sería el siguiente:

i1, i4, i5, i2, i6, i7 e i3


c)

i1: IF1 ID1 EX1 MEM1 WB1


i2: IF2 -- -- ID2 EX2 MEM2 WB2
i3: -- -- IF3 -- -- ID3 EX3 EX3 MEM3 WB3
i4: -- -- IF4 ID4 EX4 -- MEM4 WB4
i5: IF5 ID5 -- EX5 MEM5 WB5
i6: IF6 -- ID6 EX6 MEM6 WB6
i7: -- IF7 ID7 EX7 EX7 MEM7 WB7

Solución al problema 2
a) Dado que el compilador recurre a la técnica de seccionamiento para vectorizar el bucle, el código resultante
estará compuesto por una mezcla de instrucciones escalares y vectoriales. La técnica de seccionamiento consiste
en realizar el procesamiento de un vector de n elementos en secciones, donde la primera sección tiene una
longitud de (n mod MVL) elementos y las restantes MVL elementos. Dado que la longitud de los vectores es de
150 elementos y MVL es 64, la primera sección tendrá una longitud de (150 mod 64)=22 elementos y el total de
secciones a procesar será de tres: una de 22 elementos y dos de 64.
Si consideramos que MVL es un registro especial cuyo contenido es inalterable y es 64, un posible código sería
el siguiente:
ADDI R4,R0,#1200 // Longitud vector de 150 elementos en bytes
ADD R4,R4,R2 // Cálculo del fin del vector X
ADDI R5,R0,#22 // Elementos de la primera sección a procesar
MOVI2S VLR,R5 // Longitud en elementos de la primera sección
MULTI R5,R5,#8 // Longitud en bytes de primera sección (22*8)
LD F1,0(R1) // Carga del escalar s
Inicio: LV V1,R2 // Carga del vector X
LV V2,R3 // Carga del vector Y
MULTSV V1,V1,F1 // X*s
ADDV V2,V2,V1 // Y+X*s
SV R3,V2 // Almacenamiento de Y
ADDI R2,R2,R5 // Siguiente sección de X
ADDI R3,R3,R5 // Siguiente sección de Y
MULTI R5,MVL,#8 // Longitud en bytes de sección siguiente
MOVI2S VLR,MVL // Longitud en elementos de sección siguiente
SUB R6,R4,R2 // ¿Se ha llegado al final del vector?
BNZ R6,Inicio // Repetir iteración si no es fin del vector
2ª semana - Nacional - Febrero - curso 2015/16 – Ingeniería de Computadores II - UNED 3/2
En el código se pueden apreciar con claridad las 6 instrucciones escalares que ocasionan el Tbase antes de
iniciar el procesamiento del bucle y las 6 instrucciones escalares, una vez dentro del bucle, que generan el
Tbucle. El fragmento de código vectorial que produce el gasto expresado por Tarranque y Telemento está
compuesto por 5 instrucciones vectoriales.

b) En caso de que en tiempo de compilación no se conociese la longitud del vector sería necesario modificar las
3 primeras instrucciones escalares iniciales para que se realizase el cálculo de la primera sección. Para ello,
supondremos la existencia de una instrucción MOD y que la longitud del vector se encuentra almacenado en el
registro R10:

MULTI R4,R10,#8 // Longitud del vector en bytes


ADD R4,R4,R2 // Cálculo del fin del vector X
MOD R5,R10,MVL // Elementos de primera sección a procesar
MOVI2S VLR,R5 // Longitud en elementos de la primera sección
MULTI R5,R5,#8 // Longitud en bytes de primera sección (22*8)
LD F1,0(R1) // Carga del escalar s
Inicio: LV V1,R2 // Carga del vector X
LV V2,R3 // Carga del vector Y
MULTSV V1,V1,F1 // X*s
ADDV V2,V2,V1 // Y+X*s
SV R3,V2 // Almacenamiento de Y
ADDI R2,R2,R5 // Siguiente sección de X
ADDI R3,R3,R5 // Siguiente sección de Y
MULTI R5,MVL,#8 // Longitud en bytes de sección siguiente
MOVI2S VLR,MVL // Longitud en elementos de sección siguiente
SUB R6,R4,R2 // ¿Se ha llegado al final del vector?
BNZ R6,Inicio // Repetir iteración si no es fin del vector

Solución al problema 3

a) En un anillo unidireccional solo hay un camino que lleva desde la coordenada de la fuente f a la coordenada
del destino d. Para obtener la distancia en enlaces positivos hay que calcular
Dmin (d, f)= (d-f) mod k
Por ejemplo, para ir del nodo f=1 al nodo d=0 en un anillo undireccional con k=4 se tiene que la distancia
mínima es
Dmin (d, f) = (0-1) mod 4 = 3

Otra solución es la siguiente:


 d  f  (d  f )
D min(d , f )  
d  f  ( k  f  d )
Aplicando esta solución con el ejemplo anterior, se tiene que la distancia mínima es
2ª semana - Nacional - Febrero - curso 2015/16 – Ingeniería de Computadores II - UNED 4/2
Dmin (d, f) = (4-1+9) = 3

b) En un anillo con enlaces bidireccionales hay dos caminos entre fuente y destino: un camino formado por los
enlaces positivos y otro por los negativos.
Camino por enlaces positivos: D(d, f)+ = (d – f ) mod k
Camino por enlaces negativos: D(d, f )- = (f – d ) mod k
La distancia mínima entre d y f será el mínimo de las dos distancia obtenidas, es decir,
Dmin (d, f) = min(D+, D-) = min((d – f ) mod k, (f – d) mod k)
Por ejemplo, para ir de un nodo f=0 al nodo d=1 en un anillo bidireccional con k=4 se tiene que la distancia
mínima es
D+ = (0 – 1 ) mod 4 = 3
D- = (1– 0) mod 4 = 1
Dmin (0,1) = min (D+, D-) = min (3,1) = 1

Aplicando la aproximación anterior al caso bidireccional se tiene la siguiente solución:

  D  d  f
d  f  min 

D min(d , f )    D   k  (d  f )
d  f  min  D   f  d
 D  k  ( f  d )

Observe que se complica ligeramente si se necesita saber las longitudes de los caminos formados por los
enlaces positivos y los negativos.

2ª semana - Nacional - Febrero - curso 2015/16 – Ingeniería de Computadores II - UNED 5/2


TIPO DE EXAMEN: ORIGINAL- NACIONAL Y U.E.- SEPTIEMBRE

INSTRUCCIONES: Lea atentamente todos los enunciados. SE PERMITE UN LIBRO CON


ANOTACIONES Y SUBRAYADOS y CALCULADORA NO PROGRAMABLE.

Problema 1 (3 puntos)
A partir de la organización lógica de la segmentación de instrucciones de la ASG de cinco
etapas dibuje los cronogramas de las instrucciones del siguiente fragmento de código

i1 : MULT R3,R6,R7
i2 : MULT R2,R4,R5
i3 : MULT R1,R6,R9
i4 : ADD R8,R1,R5
i5 : ADD R2,R8,R9
i6 : LD R6,4(R4)

para los siguientes supuestos:

a) Considere que todas las instrucciones requieren de un único ciclo de reloj en la etapa
EX, que existe interbloqueo entre etapas, que no existen ni adelantamientos ni
reorganización de código y que se permite leer y escribir en el banco de registros durante
el mismo ciclo.

b) A partir del supuesto del apartado (a), la etapa EX de las instrucciones de multiplicación
necesita dos ciclos.

e) A partir del supuesto del apartado (a), la etapa EX de las instrucciones de multiplicación
necesita dos ciclos y se considera, además, que se dispone de dos unidades funcionales de
tal forma que se pueden solapar dos etapas EX de dos instrucciones cualesquiera en el
mismo ciclo de reloj.

Problema 2 (4 puntos)

El siguiente conjunto de operaciones

i1 : R1 <- R3 + R2// 1 ciclo de latencia


i2 : R4 <- R1 R5//
-
1 ciclo de latencia
*
i3 : R6 <- R7 R4// 2 ciclo de latencia
i4 : R7 <- R8 + R2// 1 ciclo de latencia

está ubicado en un buffer de distribución que alimenta a dos estaciones de reserva


individuales asignadas cada una de ellas a una unidad funcional de suma/resta (1 ciclo) y a
una de multiplicación/división (2 ciclos y segmentada).

Original- Nacional y U. E.- Septiembre- curso 2015/16 -Ingeniería de Computadores 11- UNED
Dibuje la evolución del estado del buffer de distribución, de las estaciones de reserva, del
ARF, del RRF y del buffer de terminación. Tenga en cuenta que:

• Se utiliza planificación con lectura de operandos.


• El ARF consta de 8 registros, Rl a R8, con valores iniciales de lO a 80,
respectivamente.
• El RRF consta de 4 registros Rrl, Rr2, Rr3 y Rr4.
• El buffer de distribución distribuye 4 instrucciones/ciclo.
• Las estaciones de reserva individuales disponen de 2 entradas.
• En el mismo ciclo en que una unidad funcional genera el resultado, la estación de
reserva actualiza sus bits de validez; esto permite que en el ciclo siguiente se pueda
emitir otra instrucción y terminar la finalizada.

Problema 3 (3 puntos)

Considere el siguiente fragmento de código correspondiente a una típica estructura de


programación if-then-else de la forma:

if (A==O)
A:=B;
el se
A:=A+4;

donde A se encuentra en la posición de memoria O(R3) y B en O(R2):

LD Rl,O(R3)

BNEZ Rl,Ll

LD Rl,O(R2)

JMP L2

Ll: ADD Rl,R1,#4

L2: SD 0(R3),Rl

a) Suponiendo que la rama then se ejecuta casi siempre, escriba el código más óptimo
recurriendo a la técnica de planificación de trazas. Asuma que el registro R l4 está libre y
se puede utilizar.

b) Reescriba el código del enunciado pero recurriendo a operaciones con predicado.

Original- Nacional y U. E.- Septiembre- curso 2015/16 -Ingeniería de Computadores 11- UNED
Problema 1 Septiembre 2016 1ª (3 puntos)

A partir de la organización lógica de la segmentación de instrucciones de la ASG de cinco etapas dibuje los
cronogramas de las instrucciones del siguiente fragmento de código

i1: MULT R3, R6, R7


i2 MULT R2, R4, R5
i3 MULT R1, R6, R9
i4 ADD R8, R1, R5
i5 ADD R2, R8, R9
i6 LD R6, 4(R4)

para los dos siguientes supuestos:


Considere que todas las instrucciones requieren de un único ciclo de reloj en la etapa EX, que existe
interbloqueo entre etapas, que no existen ni adelantamientos ni reorganización de código y que se permite
leer y escribir en el banco de registros durante el mismo ciclo.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
i1 IF1 ID1 EX1 ME1 WB1
i2 IF2 ID2 EX2 ME2 WB2
i3 IF3 ID3 EX3 ME3 WB3
i4 IF4 ---- ---- ID4 EX4 ME4 WB4
i5 IF5 ---- ---- ID5 EX5 ME5 WB5
i6 IF6 ID6 EX6 ME6 WB6

A partir del supuesto del apartado (a), la etapa EX de las instrucciones de multiplicación necesita dos ciclos.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
i1 IF1 ID1 EX1 EX1 ME1 WB1
i2 IF2 ID2 ---- EX2 EX2 ME2 WB2
i3 IF3 ---- ID3 ---- EX3 EX3 ME3 WB3
i4 IF4 ---- ---- ---- ---- ID4 EX4 ME4 WB4
i5 IF5 ---- ---- ID5 EX5 ME5 WB5
i6 IF6 ID6 EX6 ME6 WB6

A partir del supuesto del apartado (a), la etapa EX de las instrucciones de multiplicación necesita dos ciclos
y se considera, además, que se dispone de dos unidades funcionales de tal forma que se pueden solapar dos
etapas EX de dos instrucciones cualesquiera en el mismo ciclo de reloj.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
i1 IF1 ID1 EX1 EX1 ME1 WB1
i2 IF2 ID2 EX2 EX2 ME2 WB2
i3 IF3 ID3 EX3 EX3 ME3 WB3
i4 IF4 ---- ---- ---- ID4 EX4 ME4 WB4
i5 IF5 ---- ---- ID5 EX5 ME5 WB5
i6 IF6 ID6 EX6 ME6 WB6
Problema 2 Septiembre 2016 (4 puntos)

El siguiente conjunto de operaciones

i1: R1 <- R3 + R2 // 1 ciclo de latencia


i2: R4 <- R1 − R5 // 1 ciclo de latencia
i3: R6 <- R7 * R4 // 2 ciclo de latencia
i4: R7 <- R8 + R2 // 1 ciclo de latencia

está ubicado en un buffer de distribución que alimenta a dos estaciones de reserva individuales asignadas
cada una de ellas a una unidad funcional de suma/resta (1 ciclo) y a una de multiplicación/división (2
ciclos y segmentada).

Dibuje la evolución del estado del buffer de distribución, de las estaciones de reserva, del ARF, del RRF y
del buffer de terminación. Tenga en cuenta que:

 Se utiliza planificación con lectura de operandos.


 El ARF consta de 8 registros, R1 a R8, con valores iniciales de 10 a 80, respectivamente.
 El RRF consta de 4 registros Rr1, Rr2, Rr3 y Rr4.
 El buffer de distribución distribuye 4 instrucciones/ciclo.
 Las estaciones de reserva individuales disponen de 2 entradas.
 En el mismo ciclo en que una unidad funcional genera el resultado, la estación de reserva actualiza
sus bits de validez; esto permite que en el ciclo siguiente se pueda emitir otra instrucción y
terminar la finalizada.

Solución
La siguiente tabla representa la secuencia temporal de emisión y ejecución de las instrucciones:

1 2 3 4 5 6
Dis E i1
tri mi i2
bu sión
ción i3
i4

Tal y como se ha indicado en el enunciado, en el ciclo 1 se produce la llegada de las instrucciones al


buffer de distribución desde la etapa de decodificación por lo que en el ciclo 2 las instrucciones se
distribuyen a las estaciones de reserva. La ejecución comienza en el ciclo 3 siempre en función de las
posibles dependencias verdaderas.

Original - Nacional y U.E. - Septiembre - curso 2015/16 – Ingeniería de Computadores II - UNED


EVENTOS - CICLO 1
Se distribuye i1. R1 se renombra a Rr1. Los operandos están listos.
Se distribuye i2. R1 está renombrado como Rr1. Se renombra R4 a Rr2. No está lista.
Se distribuye i3. R4 está renombrado como Rr2. Se renombra R6 a Rr3. No está lista.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 10 Rr1 1 Rr1 -- -- 1
R2 20 -- Rr2 -- -- 1
R3 30 -- Rr3 -- -- 1
R4 40 Rr2 1 Rr4 -- --
R5 50 --
R6 60 Rr3 1
R7 70 -- Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i1 ADD R2 (20) 1 R3 (30) 1 Rr1 1 1
Buffer de distribucion de
instrucciones i2 SUB Rr1 R5 (50) 1 Rr2 1
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 1 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
1 i1 R1 Rr1 No 1 Head
1 i2 R4 Rr2 No 1
1 i3 R6 Rr3 no 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 2 (INICIO)
La unidad sumadora emite i1.
Se distribuye i4. Se renombra R7 a Rr4. Los operandos estan listos.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 10 Rr1 1 Rr1 -- -- 1
R2 20 -- Rr2 -- -- 1
R3 30 -- Rr3 -- -- 1
R4 40 Rr2 1 Rr4 -- -- 1
R5 50 --
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 ADD R2 (20) 1 R8 (80) 1 Rr4 1 1
Buffer de distribucion de instrucciones i2 SUB Rr1 R5 (50) 1 Rr2 1
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
1 1 i1 R1 Rr1 No 1 Head
1 i2 R4 Rr2 No 1
1 i3 R6 Rr3 No 1
1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 2 (FIN)
Finaliza la ejecución de i1. Se publica Rr1 = 50.
i2 coge el resultado y queda lista para ejecutarse.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 10 Rr1 1 Rr1 50 1 1
R2 20 -- Rr2 -- -- 1
R3 30 -- Rr3 -- -- 1
R4 40 Rr2 1 Rr4 -- -- 1
R5 50 --
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 ADD R2 (20) 1 R8 (80) 1 Rr4 1 1
Buffer de distribucion de instrucciones i2 SUB Rr1 (50) 1 R5 (50) 1 Rr2 1 1
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
1 1 1 i1 R1 Rr1 No 1 Head
1 i2 R4 Rr2 No 1
1 i3 R6 Rr3 No 1
1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 3 (INICIO)
Se termina i1, escribiendo el resultado en el ARF y liberando el RRF.
Se emite i2.
i4 permanece a la espera ya que la unidad sumadora está ocupada por i2.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 50 -- Rr1 -- --
R2 20 -- Rr2 -- -- 1
R3 30 -- Rr3 -- -- 1
R4 40 Rr2 1 Rr4 -- -- 1
R5 50 --
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 ADD R2 (20) 1 R8 (80) 1 Rr4 1 1
Buffer de distribucion de instrucciones i2 SUB Rr1 (50) 1 R5 (50) 1 Rr2 1
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
-- -- -- -- -- -- --
1 1 i2 R4 Rr2 No 1 Head
1 i3 R6 Rr3 No 1
1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 3 (FIN)
Finaliza i2. Publica Rr2 = 0.
i3 intercepta el Rr2. Ahora está lista para ejecutarse.
i4 ya tiene lugar en la unidad funcional. Se ejecutará en el siguiente ciclo.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 50 Rr1 -- --
R2 20 Rr2 1 1
R3 30 Rr3 -- -- 1
R4 40 Rr2 1 Rr4 -- -- 1
R5 50
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 Cod Op1 V1 Op2 v2 Dest L Ocup
i4 ADD R2 (20) 1 R8 (80) 1 Rr4 1 1
Buffer de distribucion de instrucciones -- -- -- -- -- -- --
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 (0) 1 R7 (70) 1 Rr3 1 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
-- -- -- -- -- -- --
1 1 1 i2 R4 Rr2 No 1 Head
1 i3 R6 Rr3 No 1
1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 4 (INICIO)
Se termina i2 del buffer de terminación. Escribiendo en ARF y limpiando el RRF.
Se emite i4.
Se emite i3.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 50 -- Rr1 -- --
R2 20 -- Rr2 -- --
R3 30 -- Rr3 -- -- 1
R4 -- Rr4 -- -- 1
R5 50 --
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 ADD R2 (20) 1 R8 (80) 1 Rr4 1
Buffer de distribucion de instrucciones -- -- -- -- -- -- --
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 (0) 1 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
-- -- -- -- -- -- --
-- -- -- -- -- -- --
1 1 i3 R6 Rr3 No 1 Head
1 1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 4 (FIN)
i4 finaliza de ejecutarse, publicando Rr4 = 100
i3 termina su primer ciclo. Aun le falta uno más.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 50 -- Rr1 -- --
R2 20 -- Rr2 -- --
R3 30 -- Rr3 -- -- 1
R4 -- Rr4 100 1 1
R5 50 --
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 ADD R2 (20) 1 R8 (80) 1 Rr4 1
Buffer de distribucion de instrucciones -- -- -- -- -- -- --
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 (0) 1 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
-- -- -- -- -- -- --
-- -- -- -- -- -- --
1 1 i3 R6 Rr3 No 1 Head
1 1 1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 5 (INICIO)
i3 comienza su 2do ciclo de ejecución. Una nueva instrucción podría entrar al cauce de
la U. funcional.
i4 está lista para ser terminada, pero el buffer aún tiene pendiente i3.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 50 -- Rr1 -- --
R2 20 -- Rr2 -- --
R3 30 -- Rr3 -- -- 1
R4 -- Rr4 100 1 1
R5 50 --
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 -- -- -- -- -- -- --
Buffer de distribucion de instrucciones -- -- -- -- -- -- --
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 (0) 1 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
-- -- -- -- -- -- --
-- -- -- -- -- -- --
1 1 i3 R6 Rr3 No 1 Head
1 1 1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 5 (FIN)
i3 termina de ejecutarse y publica Rr3 = 0

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 50 -- Rr1 -- --
R2 20 -- Rr2 -- --
R3 30 -- Rr3 1 1
R4 -- Rr4 100 1 1
R5 50 --
R6 60 Rr3 1
R7 70 Rr4 1 Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 -- -- -- -- -- -- --
Buffer de distribucion de instrucciones -- -- -- -- -- -- --
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 MUL Rr2 (0) 1 R7 (70) 1 Rr3 1
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
-- -- -- -- -- -- --
-- -- -- -- -- -- --
1 1 1 i3 R6 Rr3 No 1 Head
1 1 1 i4 R7 Rr4 No 1
-- -- -- -- -- -- -- Tail
EVENTOS - CICLO 6
El buffer de terminacion termina i3 e i4, escribiendo en el ARF y limpiando el RRF.

ARF Valor Índice Oc RRF Valor Valido Ocup.


R1 50 -- Rr1 -- --
R2 20 -- Rr2 -- --
R3 30 -- Rr3 1
R4 -- Rr4 100 1
R5 50 --
R6 --
R7 100 -- Estacion de reserva de unidad Sumadora
R8 80 -- Cod Op1 V1 Op2 v2 Dest L Ocup
i4 -- -- -- -- -- -- --
Buffer de distribucion de instrucciones -- -- -- -- -- -- --
Cod. Op1 Op2 Dest. Ocup.
i1 ADD R2 R3 R1 Estacion de reserva de unidad Multiplicadora
i2 SUB R1 R5 R4 Cod Op1 V1 Op2 v2 Dest L Ocup
i3 MUL R4 R7 R6 i3 -- -- -- -- -- -- --
i4 ADD R2 R8 R7 -- -- -- -- -- -- --

Buffer de Terminación
Ocup. Emit. Final. Dir. R.Dest. R.Renom. Espec. Valid. Ptr
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- --
-- -- -- -- -- -- -- Head/Tail
Problema 3 Septiembre 2016 (3 puntos)

Considere el siguiente fragmento de código correspondiente a una típica estructura de programación if-
then-else de la forma:

if (A==0)
A:=B;
else
A:=A+4;

donde A se encuentra en la posición de memoria 0(R3) y B en 0(R2):

LD R1,0(R3)
BNEZ R1,L1
LD R1,0(R2)
JMP L2
L1: ADD R1,R1,#4
L2: SD 0(R3),R1

a) Suponiendo que la rama then se ejecuta casi siempre, escriba el código más óptimo recurriendo a la
técnica de planificación de trazas. Asuma que el registro R14 está libre y se puede utilizar.
b) Reescriba el código del enunciado pero recurriendo a operaciones con predicado.

Solución
a) Se puede observar en el código del enunciado y en el diagrama de bloques que se presenta a
continuación que la ejecución de la rama then conlleva 5 instrucciones mientras que la rama else solo
4 instrucciones.

LD R1,0(R3)
BNEZ R1,L1

then else

LD R1,0(R2) L1: ADDI R1,R1,#4


JMP L2

L2: SD 0(R3),R1

La optimización que se propone y que conlleva la planificación del código con una carga especulativa de
B es la siguiente:
LD R1,0(R3) ; Carga de A
LD R14,0(R2) ; Carga especulativa de B
BEQZ R1,L3 ; Rama then del if A:=B
ADDI R14,R1,#4 ; Rama else del if A:=A+4
L3: SD 0(R3),R14 ; Almacenamiento de A

Ahora, la rama con mayor probabilidad de ejecución, la then, implica la ejecución de solo 4
instrucciones, una menos que en el enunciado propuesto. Sin embargo, la rama else ahora implica 5
instrucciones, una más.

LD R1,0(R3)
LD R14,0(R2)
BEQZ R1,L3

else

then
ADDI R1,R1,#4

L3: SD 0(R3),R1

Otra solución, aunque no tan óptima como la anterior es la siguiente:

LD R1,0(R3) ; Carga de A
LD R14,0(R2) ; Carga especulativa de B
SD 0(R3),R14 ; Almacenamiento de B en A
BEQZ R1,L3 ; Rama then del if A:=B
ADDI R1,R1,#4 ; Rama else del if A:=A+4
SD 0(R3),R1 ; Almacenamiento de A
L3: .............

La principal diferencia es que la rama más probable, la rama then, consume 4 instrucciones mientras que
las rama else implica la ejecución de 6 instrucciones.

b) LD R1,0(R3) ; Carga de A
PRED_EQ P1,P2,R1,#0
LD R1,0(R2) (P1) ; Carga de B si A=0 A:=B
ADD R1,R1,#4 (P2) ; A:=A+4
SD 0(R3),R1 ; Almacenamiento de A
TIPO DE EXAMEN: RESERVA- NACIONAL Y U.E.- SEPTIEMBRE

INSTRUCCIONES: Lea atentamente todos los enunciados. SE PERMITE UN LIBRO CON


ANOTACIONES Y SUBRAYADOS y CALCULADORA NO PROGRAMABLE.

Problema 1 (3 puntos)

Un procesador sin segmentación necesita 500 nseg. para procesar una instrucción. Con
respecto a este procesador, calcular la aceleración que se obtiene en los dos siguientes
casos:

a) Un procesador A dotado de una segmentación de 7 etapas, consumiendo cada etapa el


mismo tiempo. Cada etapa ocasiona una sobrecarga de 14 nseg., no existiendo ningún tipo
de detención en la segmentación.

b) Un procesador B con una segmentación de 7 etapas, consumiendo cada una de ellas 35


nseg., 25 nseg., 25 nseg., 45 nseg, 45 nseg., 55 nseg. y 35 nseg., respectivamente, y siendo
la sobrecarga por cada etapa de 12 nseg. Un 39% de todas las instrucciones de la
segmentación son detenidas durante un ciclo de reloj y un 14% durante dos ciclos.

Problema 2 (4 puntos)

Se conoce por matriz dispersa a aquélla en la que solo algunos de sus elementos son
distintos de cero. El mecanismo principal para manipular este tipo de matrices son las
operaciones de agrupar y dispersar usando vectores de índices. Una instrucción de
agrupar (gather) usa un vector de índices y busca en memoria el vector cuyos elementos
están en las direcciones obtenidas al sumar una dirección base a los desplazamientos
dados en el vector de índices. El resultado es un vector no disperso en un registro
vectorial. Después de que estos elementos son procesados de la forma habitual, el vector
resultado se almacena en forma expandida mediante un almacenamiento disperso
(scatter) utilizando el mismo vector de índices. Ahora, c onsidere el siguiente fragmento
de código:

for (i=O; i<64; i++)


if (B [ i] != 0) then
A [ i] : = A [ i] / B [ i];
end if;
end for;

en el que B es una matriz dispersa y en el que las direcciones de A y B están en Ra y Rb,


respectivamente y que FO contiene O. Se pide:

Reserva- Nacional y U.E.- Septiembre- curso 2015/16- Ingeniería de Computadores 11- UNED
a) Escriba el código DLXV para este bucle utilizando el registro de máscara vectorial VM
y las instrucciones para gestionar el contenido de este registro.

b) Para poder tratar las matrices dispersas de forma más efectiva, el repertorio de
instrucciones de DLXV ha sido incrementado con un conjunto de cuatro instrucciones:

Carga Vl con un vector cuyos elementos están en Rl+V2 [ i],


LVI Vl, (Rl+V2)
es decir, que V2 es un índice.

Almacena Vl con un vector cuyos elementos están en


SVI (Rl+V2) ,Vl
Rl+V2 (i) , es decir, que V2 es un índice.

Crea un vector de índices almacenando en Vl los valores Rl,


l *Rl, 2*Rl, .... , 63* Rl (o utilizando un valor entero en lugar
CVI Vl,Rl
de Rl) en función del contenido del registro de máscara
CVI Vl,#entero
vectorial. Es decir, Vl [ i] : =i *Rl si VM [ i] == 1; de lo
contrario Vl [ i] : = 0 .

Cuenta los l s que hay en el registro de máscara vectorial y


POP Rl,VM
almacena la cuenta en Rl.

Teniendo en cuentas estas instrucciones y el registro de máscara vectorial escriba el


código DLXV para el bucle del enunciado utilizando el método de dispersar y agrupar.
Recuerde que la separación entre elementos en doble precisión es de 8 bytes.

Problema 3 (3 puntos)

a) Dibuj e una red de tipo Omega de 16 entradas y 16 salidas.

b) Describa razonadamente el protocolo para enviar un mensaj e desde el nodo de entrada


3 al nodo de salida 9.

e) Suponiendo que el tercer conmutador de la segunda etapa no funciona correctamente


(impidiendo de esta manera cualquier tipo de conexión donde esté involucrado), indique
el número y las conexiones que quedan bloqueadas, y qué porcentaj e representan respecto
del total de la red.

Reserva- Nacional y U.E.- Septiembre- curso 2015/16- Ingeniería de Computadores 11- UNED
Problema 1 Septiembre 2016 (3 puntos) – Igual que actividad 1.3 y 1.6 del libro de texto.

Un procesador sin segmentación necesita 500 nseg. para procesar una instrucción. Con respecto a este
procesador, calcular la aceleración que se obtiene en los dos casos siguientes:

a) Un procesador A dotado de una segmentación de 7 etapas, consumiendo cada etapa el mismo tiempo.
Cada etapa ocasiona una sobrecarga de 14 nseg. no existiendo ningún tipo de detención en la
segmentación.

De acuerdo con el enunciado el tiempo medio de ejecución de una instrucción en el procesador sin
segmentar es de 330 nseg. La segmentación de 6 etapas de este apartado se caracteriza por acortar el tiempo
medio de ejecución de una instrucción a 66 nseg.:

500 nseg
+ 14 nseg = 85, 43 nseg
7 etapas

Por lo tanto, la aceleración obtenida por la máquina A con respecto a la máquina sin segmentar es 5:

500 nseg
= 5,85 veces más rápido
85,43 nseg

b) Un procesador B con una segmentación de 7 etapas, consumiendo cada una de ellas 35 nseg., 25 nseg.,
25 nseg., 45 nseg., 45 nseg., 55 nseg., y 35 nseg. respectivamente, y siendo la sobrecarga por cada etapa
de 12 nseg. Un 39% de todas las instrucciones de la segmentación son detenidas durante un ciclo de
reloj y un 14% durante dos ciclos.

La etapa más lenta es la que dicta la velocidad de las restantes etapas, por lo que cada etapa consumirá 61
nseg. (55 nseg. más los 12 nseg. de retardo).

El 39% ocasiona una detención de un ciclo, consumiendo 134 nseg. (2 ciclos · 67 nseg)

El 14% ocasiona una detención de dos ciclos, por lo que consumen 201 nseg. (3 ciclos · 67 nseg).

El 47%, no provocan detenciones, empleando sólo un ciclo de reloj (67 nseg.).

De acuerdo con esto, el tiempo medio consumido por una instrucción es:

0,39 · 67 · 2 = 52,26 nseg.


0,14 · 67 · 3 = 28,14 nseg.
0,47 · 67 · 1 = 31,49 nseg.

Total: = 111,89 nseg.

Por lo tanto, la aceleración obtenida por la máquina B con respecto a la máquina sin segmentar es de 4,47:

500 nseg
= 4, 47 veces más rápido
111,89 nseg
Problema 3 septiembre Reserva 2012. Igual que actividad 4.3 del libro de texto

1. Dibuje una red de tipo Omega de 16 entradas y 16 salidas.


2. Describa razonadamente el protocolo para enviar un mensaje desde el nodo de entrada 3 al nodo de
salida 9.
3. Suponiendo que el tercer conmutador de la segunda etapa no funciona correctamente (impidiendo de
esta manera cualquier tipo de conexión donde esté involucrado), indique el número y las conexiones
que quedan bloqueadas, y qué porcentaje representan respecto del total de la red.

0000 0000

0001 0001
0010 0010

0011 0011
0100 0100

0101 0101
0110 0110

0111 0111
1000 1000

1001 1001
1010 1010

1011 1011
1100 1100

1101 1101
1110 1110

1111 1111

Para ir del procesador 0011 al 1001:


Se coge el procesador de destino 1001 y desde el procesador origen 0011

1 INFERIOR
0 SUPERIOR
0 SUPERIOR
1 INFERIOR

Es lo que está en trazo grueso en ROJO en la figura.