DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las...

9
12 de junio de 2017 AC-junio2017-P3 P´agina 1 de 5 1 (7 puntos) Sea un computador con pipeline de 7 etapas en el que se ejecuta el siguiente programa. 1 (1) addu r9, r0, 1000 ; contador r9=1000 | (2) add r1, r0, 1 ; r1 <- 1 | (3) BUC: ld r3, r10, 0 ; r3 <- v[i] | (4) clr r4, r3, 2<0> ; pone a 0 bits b0 y b1 | for (i=0; i<1000; i++) (5) cmp r5, r3, r4 ; compara si son "=" | if ((v[i]%4)==0) (6) bb1 eq, r5, MUL4 ; si r5 es mult(4) => MUL4 | mult4[i] = 1; (7) st r0, r11, 0 ; mult4[i] <- 0 | else (8) br FBUC ; | mult4[i] = 0; (9) MUL4: st r1, r11, 0 ; mult4[i] <- 1 | (10) FBUC: addu r11, r11, 4 ; punt a mult4[] | (11) addu r10, r10, 4 ; punt a v[] | (12) subu r9, r9, 1 ; decr. contador | (13) cmp r7, r9, 0 ; si r9>0 => BUC | (14) bb1 gt, r7, BUC ; | ________________________ (15) addu r9, r0, 1000 ; contador r9=1000 | comienzo de otro bucle (16) addu r1, r0, 100 ; nuevo valor r1=100 | ........ Este c´ odigo rellena el vector mult4[i] con valores 1 ´ o 0 en funci´ on de que el correspondiente valor del vector v[i] sea o no m´ ultiplo de 4. El procesador trata los saltos empleando predicci´ on fija de NO salto y las etapas de su pipeline son: E1: Traducci´ on en TLB de instrucciones. E2: Fetch e incremento del PC. E3: Decodificaci´ on, lectura de registros y c´ alculo de la direcci´ on de salto. E4: Ejecuci´ on, c´ alculo de la direcci´ on efectiva para load/store, evaluaci´ on de la condici´ on de salto y actualizaci´ on del PC. E5: Traducci´ on en TLB de datos. E6: Acceso a memoria para lectura o escritura de datos. E7: Escritura en registros. Sabiendo que el acceso al banco de registros est´ a dividido en semiciclos, se pide lo siguiente: a) Describa las dependencias de datos y de control, as´ ı como los ciclos de parada que se introducen en cada una de ellas, suponiendo que el procesador a.1) no utiliza adelantamientos, a.2) dispone de todo tipo de mecanismos de adelantamiento. b) Calcule el n´ umero de ciclos invertidos al ejecutar el programa anterior y el CPI obtenido si los elementos del vector v[] son valores enteros consecutivos comenzando en el 0, es decir {0, 1, 2, 3, 4, 5, ..., 999}. Realice los c´ alculos para ambos casos: sin y con adelantamientos, e indique la ganancia que se obtiene al usar los adelantamientos. c) Modifique el programa anterior para reducir a cero los ciclos de parada por dependencias de datos en el caso del procesador con mecanismos de adelantamiento y calcule el nuevo CPI y la ganancia obtenida. d) Considere ahora un procesador semejante, con adelantamientos, pero que resuelve las dependencias de control mediante un predictor din´ amico de salto de 1 bit incializado a 0 y que act´ ua en la primera etapa. En este caso, los saltos incondicionales se tratan como saltos condicionales en los que se cumple la condici´ on. d.1) Indique si es necesario modificar el programa del primer apartado para que realice eneste procesador con predicci´ on din´ amica de salto la misma funci´ on que hac´ ıa en el procesador con predicci´ on de NO salto. Justifique cu´ al deber´ a ser el n´ umero m´ ınimo de entradas que deber´ a tener la BTB ( Branch Target Buffer). d.2) Calcule el CPI que se obtendr´ a al ejecutar en este procesador el programa original del enunciado, detallando el n´ umero de aciertos y de fallos de predicci´ on de salto. Recuerde que se sigue trabajando con el contenido del vector v[i] previamente descrito. 1 Recuerde que la instrucci´on bb1 eq,reg,DESP es un salto condicional a la direcci´on determinada por DESP. La condici´on de salto es que el bit de igualdad eq del registro reg est´ e activado. DATSI

Transcript of DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las...

Page 1: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

12 de junio de 2017 AC-junio2017-P3 Pagina 1 de 5

1 (7 puntos) Sea un computador con pipeline de 7 etapas en el que se ejecuta el siguiente programa. 1

(1) addu r9, r0, 1000 ; contador r9=1000 |(2) add r1, r0, 1 ; r1 <- 1 |(3) BUC: ld r3, r10, 0 ; r3 <- v[i] |(4) clr r4, r3, 2<0> ; pone a 0 bits b0 y b1 | for (i=0; i<1000; i++)(5) cmp r5, r3, r4 ; compara si son "=" | if ((v[i]%4)==0)(6) bb1 eq, r5, MUL4 ; si r5 es mult(4) => MUL4 | mult4[i] = 1;(7) st r0, r11, 0 ; mult4[i] <- 0 | else(8) br FBUC ; | mult4[i] = 0;(9) MUL4: st r1, r11, 0 ; mult4[i] <- 1 |(10) FBUC: addu r11, r11, 4 ; punt a mult4[] |(11) addu r10, r10, 4 ; punt a v[] |(12) subu r9, r9, 1 ; decr. contador |(13) cmp r7, r9, 0 ; si r9>0 => BUC |(14) bb1 gt, r7, BUC ; | ________________________(15) addu r9, r0, 1000 ; contador r9=1000 | comienzo de otro bucle(16) addu r1, r0, 100 ; nuevo valor r1=100 | . . . . . . . .

Este codigo rellena el vector mult4[i] con valores 1 o 0 en funcion de que el correspondiente valor delvector v[i] sea o no multiplo de 4.

El procesador trata los saltos empleando prediccion fija de NO salto y las etapas de su pipeline son:

• E1: Traduccion en TLB de instrucciones.• E2: Fetch e incremento del PC.• E3: Decodificacion, lectura de registros y calculo de la direccion de salto.• E4: Ejecucion, calculo de la direccion efectiva para load/store, evaluacion de la condicion de salto y

actualizacion del PC.• E5: Traduccion en TLB de datos.• E6: Acceso a memoria para lectura o escritura de datos.• E7: Escritura en registros.

Sabiendo que el acceso al banco de registros esta dividido en semiciclos, se pide lo siguiente:

a) Describa las dependencias de datos y de control, ası como los ciclos de parada que se introducen encada una de ellas, suponiendo que el procesador a.1) no utiliza adelantamientos, a.2) dispone de todo tipo demecanismos de adelantamiento.

b) Calcule el numero de ciclos invertidos al ejecutar el programa anterior y el CPI obtenido si los elementosdel vector v[] son valores enteros consecutivos comenzando en el 0, es decir {0, 1, 2, 3, 4, 5, ..., 999}.Realice los calculos para ambos casos: sin y con adelantamientos, e indique la ganancia que se obtiene al usarlos adelantamientos.

c) Modifique el programa anterior para reducir a cero los ciclos de parada por dependencias de datos en elcaso del procesador con mecanismos de adelantamiento y calcule el nuevo CPI y la ganancia obtenida.

d) Considere ahora un procesador semejante, con adelantamientos, pero que resuelve las dependencias decontrol mediante un predictor dinamico de salto de 1 bit incializado a 0 y que actua en la primera etapa. Eneste caso, los saltos incondicionales se tratan como saltos condicionales en los que se cumple la condicion.

d.1) Indique si es necesario modificar el programa del primer apartado para que realice en este procesadorcon prediccion dinamica de salto la misma funcion que hacıa en el procesador con prediccion de NO salto.Justifique cual debera ser el numero mınimo de entradas que debera tener la BTB (Branch Target Buffer).

d.2) Calcule el CPI que se obtendra al ejecutar en este procesador el programa original del enunciado,detallando el numero de aciertos y de fallos de prediccion de salto. Recuerde que se sigue trabajando con elcontenido del vector v[i] previamente descrito.

1Recuerde que la instruccion bb1 eq,reg,DESP es un salto condicional a la direccion determinada por DESP. La condicion desalto es que el bit de igualdad eq del registro reg este activado.

DATSI

Page 2: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

12 de junio de 2017 AC-junio2017-P3 Pagina 2 de 5

SOLUCION

a) Las dependencias se determinan a partir del codigo. Para este apartado no se necesita conocer si hay o noadelantamientos:

Dependencias de datos:(3) → (4) por r3(4) → (5) por r4(5) → (6) por r5

(12) → (13) por r9(13) → (14) por r7

Dependencias de control:

(6) salto condicional(8) salto incondicional

(14) salto condicional

Las dependencias de control no introducen ningun ciclo de parada cuando se acierta la prediccion (no setoma el salto). Por el contrario, cuando se toma el salto hay fallo de prediccion y se introducen 3 ciclos deparada, ya que hasta la etapa 4 no se evalua la condicion de salto y se actualiza el PC. Este comportamientoes independiente de que se disponga o no de mecanismos de adelantamiento.2

a.1) Si no hay adelantamientos, las dependencias de datos introducen 3 ciclos de parada, ya que se escribeen el BR (banco de registros) en el primer subciclo de la etapa 7 y se lee del BR en el segundo subciclo de laetapa 3 (habrıa 4 ciclos de parada si no se hubiera dividido el acceso al BR en subciclos).

a.2) Considerando que sı se dispone de adelantamientos, las dependencias de datos introducen 2 ciclos deparada en el caso de la dependencia (3) → (4), ya que se obtiene el dato de memoria en la etapa 6 y se requiereen la etapa 4. El resto de las dependencias de datos se resuelve sin producir ciclos de parada, ya sea poradelantamientos entre la salida y la entrada de la ALU: (4) → (5) y (12) → (13), o entre la salida de la ALU yla entrada a la evaluacion de la condicion: (5) → (6) y (13) → (14). En ambos casos se trata de adelantamientosentre la salida y la entrada de la etapa E4.

b) El codigo facilitado consta de un bucle de 1.000 iteraciones que contiene 12 instrucciones, mas dos instruc-ciones al comienzo y dos al final que se ejecutan una unica vez. De las instrucciones del bucle, la 7 y la 8 solo seejecutan cuando el valor de v[i] no es multiplo de 4, es decir, 3/4 de las veces con los datos del enunciado. Lainstruccion 9 solo se ejecuta cuando el valor de v[i] es multiplo de 4, o sea, 1/4 de las veces. Las 9 instruccionesrestantes se ejecutan en todas las iteraciones. En consecuencia, el numero de instrucciones ejecutadas es:

Ninst = 2 + 1.000× (9 + 0, 75× 2 + 0, 25× 1) + 2 = 2 + 1.000× (9 + 1, 5 + 0, 25) + 2 = 10.754 instrucciones

Por otra parte, los parones debidos a las dependencias de datos siempre se producen entre instruccionesque se ejecutan 1.000 veces, nunca en la parte de codigo afectada por los saltos condicionales. Por lo tanto, losciclos de parada por dependencias de datos seran en cada caso (sin/con adelantamientos):

NciclosDD-SinAD = 1.000 × (3 + 3 + 3 + 3 + 3) = 15.000 ciclos

NciclosDD-ConAD = 1.000 × (2) = 2.000 ciclos

Finalmente, las dependencias de control no se ven afectadas porque haya o no adelantamientos, pero sı por-que haya acierto o fallo en la prediccion (de NO salto):

Aciertos de prediccion: 0 ciclos; Fallos de prediccion: 3 ciclos.

El numero de ciclos consumidos en fallos de prediccion de salto, sera:

instruccion (6): se ejecuta 1.000 veces, falla la prediccion (salta) 250 veces: Ncic6 = 250 × 3 = 750 ciclos

instruccion (8): se ejecuta 750 veces, falla la prediccion (salta) todas ellas: Ncic8 = 750 × 3 = 2.250 ciclos

instruccion (14): se ejecuta 1.000 veces, falla la prediccion (salta) 999 veces: Ncic14 = 999×3 = 2.997 ciclos

En resumen:

NciclosDC = 750 + 2.250 + 2.997 = 5.997 ciclos.

De este modo, el CPI en funcion de que haya o no adelantamientos es:

CPIsinAD = (10.754 + 15.000 + 5.997)/10.754 = 31.751/10.754 = 2, 95

CPIconAD = (10.754 + 2.000 + 5.997)/10.754 = 18.751/10.754 = 1, 74

La ganancia obtenida al usar adelantamientos sera: Speedup = 31.751/18.751 = 1, 69

2NOTA: Serıa correcto considerar que solo se insertan 2 ciclos de parada en el caso de que el salto sea incondicional, aunquepara ello el procesador tendrıa que actualizar el PC tambien en la etapa 3.

DATSI

Page 3: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

12 de junio de 2017 AC-junio2017-P3 Pagina 3 de 5

c) En el caso de contar con mecanismos de adelantamiento solo se producen dos ciclos de parada por depen-dencias de datos en cada iteracion del bucle, las correspondientes a la dependencia (3) → (4). Por lo tanto,se podrıan anular esos dos ciclos de parada simplemente situando las instrucciones (11) y (12) entre la (3) y(4), de modo que quede la secuencia siguiente en el cuerpo del bucle:

(3) → (11) → (12) → (4) → (5) → (6) → (7) → (8) → (9) → (10) → (13) → (14)

El CPI se obtendra en este caso igual que en el apartado anterior una vez que se han descontado los 2.000ciclos de parada debidos a las dependencias de datos:

CPIconAD = (10.754 + 5.997)/10.754 = 16.751/10.754 = 1, 56

Y la ganancia obtenida respecto al codigo sin reordenar: Speedup = 18.751/16.751 = 1, 12

d) Prediccion dinamica de saltos, con 1 bit inicializado a “0”.

d.1) El cambio en la estrategia de salto no tiene ninguna influencia en el resultado del programa, ya que enambos casos (prediccion estatica de NO salto o prediccion dinamica) el flujo de ejecucion de instrucciones esidentico al que tendrıa un procesador convencional sin pipeline. Por otra parte, para lograr un funcionamientorazonable en un fragmento de codigo como el de este ejercicio, la BTB (Branch Target Buffer) debera teneral menos tantas entradas como instrucciones de salto se encuentren en el codigo. En este ejercicio se necesitadisponer de tres entradas en la BTB.

d.2) El cambio en la estrategia de salto solo afecta a los ciclos de parada debidos a las dependencias decontrol, que en el caso anterior (prediccion de NO salto) eran 5.997 ciclos. Con prediccion dinamica los aciertosde prediccion se resuelven sin que se produzcan ciclos de parada (ya que se predice en la etapa E1) y los fallosde prediccion se resuelven incorporando 3 ciclos de parada, ya que se evalua la condicion de salto y se actualizael PC en la etapa E4, una vez que han entrado en el pipeline las tres instrucciones siguientes al salto. Por otraparte, se puede analizar independientemente el comportamiento de las tres instrucciones de salto:

La instruccion i6 (bb1 eq, r5, MUL4) presenta el siguiente comportamiento al procesar los datos deentrada (vector v[]=0,1,2,3,4,5,6,...,999):

v[i] 0 1 2 3 4 5 6 7 8es multiplo de 4 S N N N S N N N SSalto T N N N T N N N TBitPred 0 1 0 0 0 1 0 0 0PRED N T N N N T N N NAcierto/Fallo F F A A F F A A F

Cada bloque de 4 iteraciones (4 saltos) se repite hasta que se hayan completado las 1.000 iteraciones. Enla tabla se observa que se producen 2 fallos de prediccion cada 4 saltos, en total 500 fallos. En cada fallo sepierden 3 ciclos de parada y en cada acierto, ninguno, por lo que esta instruccion produce 500 × 3 = 1.500ciclos de parada por dependencias de control.

La instruccion i8 (br FBUC) es un salto incondicional, lo que segun el enunciado se implementa comoun salto condicional en el que siempre se cumple la condicion. En consecuencia, se observa un unico fallo deprediccion la primera vez que se pasa por ella (3 ciclos de parada) y no vuelve a fallar durante la ejecucion deeste programa.

La instruccion i14 (bb1 gt, r7, BUC) es el final de un bucle de 1.000 iteraciones, por lo que falla laprimera vez (que segun el enunciado predice que no salta y realmente sı lo hace) y la ultima (en la que prediceque salta y en realidad no toma el salto). Las 998 veces restantes, el predictor dinamico acierta en la prediccion.En consecuencia:

NciclosDC = 3 × (500 + 1 + 2) = 1.509 ciclos.

El numero total de ciclos invertidos en la ejecucion y el nuevo CPI seran:

TOTCiclos = (10.754 + 2.000(DD) + 1.509(DC)) = 14.263

CPIconAD = 14.263/10.754 = 1, 33

DATSI

Page 4: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

12 de junio de 2017 AC-junio2017-P3 Pagina 4 de 5

2 (3 puntos) Sea un multiprocesador de memoria compartida con 6 procesadores. Cada procesador disponede una memoria cache privada de datos, que por simplificar se va a considerar que tiene solo cuatro bloques,es de ubicacion directa y que cada bloque tiene solo dos palabras. Para mantener la coherencia usa la polıticade invalidacion MSI, sobre una implementacion snoopy

Indique las peticiones en el bus que desencadenan las siguientes operaciones y que cambios se producentanto en las caches como en la memoria principal. Suponga que cada operacion es independiente de las demas,por lo que se parte del estado inicial mostrado en la siguiente figura. Para simplificar la figura, el tag contienela direccion completa.

Est. Tag DatosB0 I 100 00 10B1 I 128 00 08

Est. Tag DatosB0 I 100 00 10B1 M 128 00 68

Est. Tag DatosB0 S 120 00 20B1 S 108 00 08

Dir. Dato100 00104 00

Est. Tag DatosB0 S 120 00 20B1 S 108 00 08

Cache Proc. 1 Cache Proc. 3 Cache Proc. 2 Cache Proc. 0

MemoriaPrincipal

B2 M 110 00 30

B3 I 118 00 10

B2 I 110 00 10

B3 S 118 00 18

B2 I 110 00 10

B3 I 138 00 38

120 00

11C 18

118 00

114 10

110 0010C 08108 00

B3 I 118 00 10

B2 S 130 00 30

Est. Tag DatosB0 S 120 00 20B1 I 108 00 28

Cache Proc. 4

B3 M 138 00 50

B2 S 130 00 30

Est. Tag DatosB0 S 120 00 20B1 S 108 00 08

Cache Proc. 5

B3 S 118 00 18

B2 S 130 00 30

124 20128 00

13C 38

138 00

134 30130 0012C 28

Dir. Dato

Figura 1Multiprocesador con coherencia de caches basada en MSI

a) Procesador 5 lee el dato de la direccion 110.

b) Procesador 0 lee el dato de la direccion 124.

c) Procesador 4 lee el dato de la direccion 118.

d) Procesador 4 escribe 80 en la direccion 138.

e) Procesador 5 escribe 80 en la direccion 124.

f) Procesador 4 escribe 80 en la direccion 108.

g) Procesador 3 escribe 80 en la direccion 138.

h) Procesador 0 escribe 80 en la direccion 130.

SOLUCION

a) Procesador 5 lee el dato de la direccion 110. Da un fallo y genera una peticion de lectura en el bus, BusRd,direccion 110. El procesador 0 vuelca el bloque a memoria principal ya que el estado es Modificado. El contenidode la memoria se actualiza M[110] = 00, M[114] = 30 y el de las caches sera: P0.B2 (S 110 00 30), P5.B2 (S110 00 30)

b) Procesador 0 lee el dato de la direccion 124. Da un fallo y genera una peticion de lectura en el bus, BusRd,direccion 120. El contenido de la cache sera P0.B0 (S 120 00 20)

c) Procesador 4 lee el dato de la direccion 118. Da un fallo y como desaloja un bloque modificado primerodebe volcarlo a memoria principal, luego genera una peticion de lectura en el bus, BusRd, direccion 118. Elcontenido de la memoria se actualiza M[138] = 00, M[13C] = 50 y el de las caches sera: P4.B3 (S 118 00 18)

d) Procesador 4 escribe 80 en la direccion 138. Da un acierto en cache y no genera trafico en el bus. Elcontenido de la cache sera P4.B3 (M 138 80 50)

e) Procesador 5 escribe 80 en la direccion 124. Da acierto y genera una peticion en el bus de invalidacion,BusInv, direccion 120. Al final el contenido de las caches cambia en: P5.B0 (M 120 00 80), P2.B0 (I 120 00 20),P3.B0 (I 120 00 20) y P4.B0 (I 120 00 20).

f) Procesador 4 escribe 80 en la direccion 108. Da fallo y genera una peticion en el bus de lectura coninvalidacion, BusRdX, direccion 108. Al final el contenido de las caches cambia en: P4.B1 (M 108 80 08), P2.B1(I 108 00 08), P3.B1 (I 108 00 08) y P5.B1 (I 108 00 08).

DATSI

Page 5: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

12 de junio de 2017 AC-junio2017-P3 Pagina 5 de 5

g) Procesador 3 escribe 80 en la direccion 138. Da fallo y genera una peticion en el bus de lectura coninvalidacion, BusRdX, direccion 138. Como el bloque esta modificado en el procesador 4 no puede cogerse dela memoria principal, que debe actualizarse. Al final el contenido de las caches cambia en: P3.B3 (M 138 8050) y P4.B3 (I 138 00 50), y la memoria M[138] = 00, M[13C]= 50

h) Procesador 0 escribe 80 en la direccion 130. Da fallo y como desaloja un bloque modificado primero debevolcarlo a memoria principal, luego genera una peticion en el bus de lectura con invalidacion, BusRdX, direccion130. Al final el contenido de las caches cambia en: P0.B2 (M 130 80 30), P3.B2 (I 130 00 30), P4.B2 (I 130 0030), P5.B2 (I 130 00 30), y la memoria M[110] = 00, M[114] = 30

DATSI

Page 6: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

11 de julio de 2017 AC-julio2017-P3 Pagina 1 de 4

1 [1 punto] Dadas las tres implementaciones siguientes de la funcion lock para adquirir un cerrojo, indiquelas ventajas e inconvenientes de cada una de ellas.

lock_A: ld .R1, /dir_mutex lock_B: t&s .R1, /dir_mutex lock_C: ld .R1, /dir_mutexbnz .R1, $lock_A bnz .R1, $lock_B bnz .R1, $lock_Cst #1, /dir_mutex ret t&s .R1, /dir_mutexret bnz .R1, $lock_C

SOLUCION

La version A no funciona correctamente, no es atomica y varios hilos de ejecucion pueden entrar simultanea-mente a la region crıtica, por lo que el acceso a los datos compartidos no estarıa protegido.

La version B es correcta ya que es atomica, pero cada intento de acceder a la region crıtica supone unaescritura y por tanto, si varios procesadores intentan obtener el mismo cerrojo, puede producirse un numeromuy elevado de invalidaciones por la polıtica de coherencia de caches, introduciendo mucho trafico en el bus eimpidiendo a otros trabajar.

La version C es correcta y mucho mas eficiente, ya que la espera se hace leyendo la variable del cerrojo perosin escribir, y solo cuando esta libre se escribe, por lo que el numero de invalidaciones se reduce mucho.

2 [1 punto] Describa el comportamiento de la pareja de instrucciones ll/sc. Usando estas instruccionesimplemente la adquisicion de un cerrojo. Indique las ventajas que tiene esta implementacion frente a otrasposibles implementaciones basadas en test&set.

SOLUCION

Estas instrucciones, load-locked y store-conditional, leen un valor de memoria y luego, en esa posicionde memoria, escriben otro valor, si y solo si nadie ha modificado dicha variable, lo que conocen por el algoritmode coherencia de caches.

lock: ll .R1, /dir_cerrojo // (dir)-> R1bnz .R1, $lock // ¿cerrado?add .R1, #1sc .R1, /dir_cerrojo // si exito 1-> (dir)bz .R1, $lock // si no, reintentoret

Esta solucion, ademas de ser correcta, es optima desde un punto de vista de la memoria cache, ya que soloescribe una vez al entrar a la region crıtica (una invalidacion) y otra vez al salir (otra invalidacion)

3 [1 punto] Sea una aplicacion secuencial que emplea 2h 2’27”, cuya parte paralelizable es el 98%. Si se deseaejecutar sobre 4 procesadores, cada uno con 16 cores, indique cual es el mınimo tiempo de ejecucion que sepuede obtener, ası como el speedup resultante y la eficiencia obtenida.

SOLUCION

El tiempo de ejecucion es (60 × 2 + 2) × 60 + 27 = 7347seg.

Aplicando la ley de Amdahl, el tiempo de ejecucion viene dado por:

• Parte secuencial, que no cambia: 7347s. × 0, 02 = 147s.• Parte paralela: 7347s. × 0, 98 = 7200s. → 7200/64 = 112, 5s.

Tiempo total = Parte secuencial + parte paralela = 147s. + 112, 5s. = 259, 5s.

Speedup = 7347/259, 5 = 28, 3, bastante lejos de 64 que serıa el ideal.

La eficiencia serıa: 28, 3/64 = 0, 442, es decir, los cores se aprovechan al 44,2 %.

DATSI

Page 7: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

11 de julio de 2017 AC-julio2017-P3 Pagina 2 de 4

4 [7 puntos] Sea un computador con un pipeline de 7 etapas en el que se ejecuta el siguiente programa, quecalcula la suma de los elementos de cada fila y cada columna de una matriz de dimension MxN. La direccionde comienzo de la matriz esta en r1, el numero de filas (M) en r28, el numero de columnas (N) en r27 y lasuma de los elementos de cada fila se deja en un vector vfil que empieza en la direccion que contiene r10,mientras que la suma de los elementos de cada columna se deja en un vector vcol que empieza en la direccionque contiene r20, ambos vectores previamente inicializados a cero.

(1) add r11, r0, r0 ; desplazamiento vect. filas | do {(2) FILA: add r29, r27, r0 ; contador aux de columnas | cont_col = N;(3) add r12, r0, r0 ; acumulador de fila | acumfil = 0;(4) add r21, r0, r0 ; desplazamiento vect. columnas |(5) ELEM: ld r2, r1, r0 ; r2 <- mat[i][j] | do { elem = *mat;(6) add r12, r12, r2 ; acumfil += r2 (elem) | acumfil += elem;(7) ld r22, r20, r21 ; r22 <- vcol[j] | aux = *vcol;(8) add r22, r22, r2 ; r22 += r2 (elem) | aux += elem;(9) st r22, r20, r21 ; vcol[j] <- r22 | *vcol = aux;(10) add r1, r1, 4 ; incr. punt a matriz | mat++;(11) add r21, r21, 4 ; incr. despl. vector columnas | vcol++;(12) sub r29, r29, 1 ; decr. contador columnas | cont_col--;(13) bnz r29, $ELEM ; si no cero salta a otro elem. | } while (cont_col != 0)(14) st r12, r10, r11 ; vfil[i] <- acumfil | *vfil = acumfil;(15) add r11, r11, 4 ; incr. despl. vector filas | vfil++;(16) sub r28, r28, 1 ; decr. contador filas | cont_fil--;(17) bnz r28, $FILA ; si no cero salta a otra fila | } while (cont_fil != 0)

El procesador trata los saltos insertando automaticamente ciclos de parada. Las etapas de su pipeline son:

• E1: Traduccion en TLB de instrucciones.• E2: Fetch e incremento del PC.• E3: Decodificacion, lectura de registros, calculo de la direccion de salto, evaluacion de la condicion de

salto y actualizacion del PC.• E4: Ejecucion, calculo de la direccion efectiva para load/store.• E5: Traduccion en TLB de datos.• E6: Acceso a memoria para lectura o escritura de datos.• E7: Escritura en registros.

a) Describa las dependencias de datos y de control, ası como los ciclos de parada que se introducen en cadauna de ellas, suponiendo que el procesador dispone de todo tipo de mecanismos de adelantamiento.

b) Calcule el CPI obtenido al ejecutar el programa anterior para una matriz de 1000 × 1000 elementos.

c) Considere ahora un procesador semejante pero que resuelve las dependencias de control mediante unpredictor dinamico de salto de 2 bits incializado a 10 y que actua en la primera etapa. Calcule el CPI que seobtendrıa en este caso para la misma matriz.

d) Reordene el codigo para optimizar la ejecucion del programa y calcule su nuevo CPI en el computadorque utiliza prediccion dinamica. Calcule tambien la ganancia o speedup obtenido respecto al programa originalejecutado en el computador del primer apartado.

SOLUCION

a) Las dependencias se detallan a continuacion.

Dependencias de datos:(3) → (6) por r12(4) → (7) por r21(5) → (6) por r2(7) → (8) por r22(8) → (9) por r22

(12) → (13) por r29(16) → (17) por r28

Dependencias de control:

(13) salto condicional(17) salto condicional

DATSI

Page 8: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

11 de julio de 2017 AC-julio2017-P3 Pagina 3 de 4

Las dependencias de datos entre instrucciones en la etapa de ALU se resuelven por adelantamientos, detres niveles en el caso (3) → (6), de un nivel en el caso (8) → (9) y queda enmascarada por otras dependenciasen el caso (4) → (7).

Las dependencias entre la etapa 4 de ejecucion y la etapa 3, donde se calcula la condicion del salto, introducenun ciclo a pesar de los adelantamientos, ya que se obtiene el dato en la etapa 4 y se requiere en la etapa 3,dependencias (12) → (13) y (16) → (17).

Cuando la dependencia es entre memoria y ALU, (5) → (6) y (7) → (8), se introducen 2 ciclos de paradaya que se obtiene el dato de memoria en la etapa 6 y se requiere en la etapa 4.

En cuanto a las dependencias de control, introduce dos parones, ya que en la etapa 3 se calcula la direcciony la condicion del salto.

(1) add r11, r0, r0 ; 1(2) FILA: add r29, r27, r0 ; 1(3) add r12, r0, r0 ; 1 + 0h(4) add r21, r0, r0 ; 1 + 0h(5) ELEM: ld r2, r1, r0 ; 1 + 2h(6) add r12, r12, r2 ; 1(7) ld r22, r20, r21 ; 1 + 2h(8) add r22, r22, r2 ; 1 + 0h(9) st r22, r20, r21 ; 1(10) add r1, r1, 4 ; 1(11) add r21, r21, 4 ; 1(12) sub r29, r29, 1 ; 1 + 1h(13) bnz r29, $ELEM ; 1 + 2h(14) st r12, r10, r11 ; 1(15) add r11, r11, 4 ; 1(16) sub r28, r28, 1 ; 1 + 1h(17) bnz r28, $FILA ; 1 + 2h

b) El CPI se calcula como:

CPI = 1+1000×[3+0h+1000×(9+7h)+4+3h]1+1000×[3+1000×(9)+4] = 1, 777

c) El valor 10 predice “salto debil”, por lo que en la primera iteracion acertara y transitara a 11 o “saltofuerte”, luego acertara en todos los otros bnz menos cuando el contador sea cero, que fallara y transitara alvalor 10 o “salto debil”, es decir, 999 aciertos y un fallo en cada fila y lo mismo para las columnas. Cuandofalle seran dos parones. Por tanto el CPI sera:

CPI = 1+1000×[3+0h+1000×(9+5h)+2h+4+1h]+2h

1+1000×[3+1000×(9)+4] = 1, 555

d) Una posible reordenacion es:

(1) add r11, r0, r0 ; 1(2) FILA: add r29, r27, r0 ; 1(3) add r12, r0, r0 ; 1 + 0h(4) add r21, r0, r0 ; 1 + 0h(5) ELEM: ld r2, r1, r0 ; 1 + 0h(7) ld r22, r20, r21 ; 1 + 0h(10) add r1, r1, 4 ; 1(6) add r12, r12, r2 ; 1(8) add r22, r22, r2 ; 1 + 0h(9) st r22, r20, r21 ; 1(12) sub r29, r29, 1 ; 1 + 0h(11) add r21, r21, 4 ; 1(13) bnz r29, $ELEM ; 1 + 0h acierto, 1 + 2h fallo(14) st r12, r10, r11 ; 1(16) sub r28, r28, 1 ; 1 + 0h(15) add r11, r11, 4 ; 1(17) bnz r28, $FILA ; 1 + 0h acierto, 1 + 2h fallo

DATSI

Page 9: DATSI - fiwiki.org · (6) salto condicional (8) salto incondicional (14) salto condicional Las dependencias de control no introducen ningu´n ciclo de parada cuando se acierta la

11 de julio de 2017 AC-julio2017-P3 Pagina 4 de 4

Ahora la (4) → (7) ya no queda enmascarada por otras dependencias, pero se resuelve con una adelan-tamiento ALU-ALU de dos niveles. En el caso de las dependencias entre memoria y ALU se han puesto dosinstrucciones en medio, de forma que ya no hay parones. De modo similar, se ha puesto una instruccion enmedio en el caso de las dependencias entre la etapa 4, ALU, y la etapa 3, decodificacion, por lo que ya no hayparones. El nuevo CPI es:

CPI = 1+1000×[3+0h+1000×(9+0h)+2h+4+0h]+2h

1+1000×[3+1000×(9)+4] = 1, 00

El speedup es la relacion entre el tiempo de ejecucion original y el nuevo u optimizado:

Speedup = 1,771,00 = 1, 77

DATSI