ARQUITECTURAS PARALELAS examen de febrero de 2009

ARQUITECTURAS PARALELAS examen de febrero de 2009 1. Un computador vectorial tiene las siguientes características: encadenamiento de instrucciones; 2...
0 downloads 0 Views 217KB Size
ARQUITECTURAS PARALELAS examen de febrero de 2009

1. Un computador vectorial tiene las siguientes características: encadenamiento de instrucciones; 2 buses para acceder a memoria; registros vectoriales de 256 elementos; frecuencia de reloj de 666 MHz. a.

Completa la siguiente tabla indicando los principales momentos (ciclos) en la ejecución del programa vectorial indicado. No tengas en cuenta los conflictos en el acceso a los módulos de memoria. El esquema de segmentación de las instrucciones es el siguiente: [ B/D - L - AM - M (6 ciclos) - E ] para las instrucciones de memoria, y [ B/D - L - A (+, 2 ciclos; *, 3 ciclos) - E ] para la suma y el producto. t. inicio

LV SV MULV ADDVI SV

V1,A(R1) B(R1),V1 V2,V1,V1 V3,V2,#1.0 A(R1),V3

lat. UF.

dato 1

dato N

3

6

9+1

9+N

[ 10 ] *

6

16 + 1

16 + N

[ 10 ] *

3

13 + 1

13 + N

[ 14 ] **

2

16 + 1

16 + N

[9+N]†

6

15 + N + 1

15 + 2N

* Ciclo de encadenamiento, 10: se ha leído el primer elemento del vector V1. ** Ciclo de encadenamiento, 14: se ha calculado el primer elemento del vector V2. † Están ocupados ambos buses y hay que esperar hasta que se libere uno de ellos. > Tiempo de ejecución del programa: 15 + 2N ciclos

b.

Sin rehacer los cálculos, ¿de qué orden sería el tiempo de ejecución si sólo hubiera un bus? ¿Y si hubiera tres buses pero las instrucciones no se encadenaran? Justifica tus respuestas. > 1 bus, encadenamiento: ←

LV A ←



← SV B MULV → ← ADDVI →

→ ←

SV A

Tiempo de ejecución: 3N



Aunque puede encadenarse la ejecución de las instrucciones (LV A → MULV → ADDVI), dado que sólo hay un bus para acceder a memoria se necesitan 3N ciclos para ejecutar las tres instrucciones de memoria. > 3 buses, sin encadenamiento: ←

LV A

→ ← ←

SV B MULV

→ → ←

ADDVI → ←

SV A



Tiempo de ejecución: 4N

Dado que no puede encadenarse la ejecución de las instrucciones, para poder ejecutar la cadena de dependencias LV A → MULV → ADDVI → SV A se necesitan 4N ciclos.

c.

Los vectores A y B son de 100 elementos. ¿Qué velocidad de cálculo (en MF/s) se consigue al ejecutar el programa anterior? ¿Qué fracción (%) representa esa velocidad del máximo teórico posible si los vectores fueran muy grandes? R = N × Num_Op/ Tv = (N × 2) / (15 + 2×N ciclos) × F R(100) = (100 × 2) / (15 + 2×100) × 666 = 620 MF/s R∞ = 2 / 2 × 666 = 666 MF/s

Por tanto, se ha conseguido el 620 / 666 = 93%.

2.

Dibuja el grafo de dependencias de este bucle, y, si es posible, escribe el código vectorial completo para el mismo. k = 4 do i = 1, 100 (1) A(i) = A(i) + 3 (2) B(i) = A(i+1) + A(i) (3) C(i) = A(i-1) + B(k) k = k + 2 enddo

1 A,0

A,1 2 B

A,1 3

En primer lugar, hay que eliminar la variable de inducción; en este caso, k = 2i + 2. A continuación, generamos el grafo de dependencias. El bucle tiene dos dependencias y dos antidependencias, pero puede vectorizarse sin problemas, ya que las dependencias no forman ciclos. El código vectorial puede ser el siguiente: MOVI MOVI MOVI

R1,#0 VL,#100 VS,#1

; longitud de los vectores ; paso para leer el vector A

(1) (1)

LV V1,A+1(R1) ADDVI V2,V1,#3

; leer A (primer elemento: A1)

(2)

LV

V3,A+2(R1)

; ojo! leer el vector A de la instrucción 2 (primer elemento: A2)

(1)

SV

A+1(R1),V2

; escribir A (instrucción 1, primer elemento: A1)

(2)

ADDV

V4,V3,V2

(3)

MOVI LV

VS,#2 V5,B+4(R1)

; paso para leer el vector B de la instrucción 3 (k = 2i+2) ; leer B (primer elemento: B4)

(2)

MOVI SV

VS,#1 B+1(R1),V4

; paso 1 ; escribir B (instrucción 2, primer elemento: B1)

(3) (3) (3)

LV ADDV SV

V6,A(R1) V7,V5,V6 C+1(R1),V7

; ejecutar el resto de la instrucción 3

3. Una máquina SMP de 4 procesadores mantiene la coherencia de los datos mediante un snoopy y un protocolo de invalidación tipo MESI. En un momento dado de la ejecución de una aplicación paralela de memoria compartida, los procesadores acceden a la variable A, cuyo valor inicial es 20 y que no se encuentra en ninguna de las caches del sistema, en el siguiente orden: P1: LD R1,A;

P3: LD R1,A;

P2: ST A,#5;

P0: LD R2,A;

a. Para cada una de las cuatro referencias, indica cómo se resuelve, las señales de control y el tráfico de datos que se genera, y el valor de A y el estado final del bloque de datos que la contiene en las cuatro caches y en memoria principal. MC0

MC1

MC2

MC3

MP

Señales contr.

— — — S, 5

E, 20 S, 20 I, I, -

— — M, 5 S, 5

— S, 20 I, I, -

20 20 20 20 5

BR BR, sh BR, Inv BR, sh, BW

inicio P1: LD R1,A P3: LD R1,A P2: ST A,#5 P0: LD R2,A

1. instr. 2. instr. 3. instr. 4. instr.

Tráf. datos MP → C1 MP → C3 MP → C2 C2 → C0, MP

Fallo. Se pide el bloque (BR) y se carga en estado E (no hay copias, sh = 0); la copia vendrá de MP. Fallo. Se pide el bloque (BR), pero se carga en estado S, porque hay copias (sh = 1); ambas copias pasan a estado S; en general, la copia vendrá de MP. Fallo. Como es una escritura, se pide el bloque (BR) y se anula el resto de copias (Inv); como en el caso anterior, la copia vendrá normalmente de MP. Fallo. Se pide el bloque (BR). Como hay otra copia (sh = 1) y está en estado M, al final ambas copias estarán en estado S por lo que hay que actualizar la MP (BW). El bloque vendrá de C2, cuando se esté escribiendo en MP.

b. Sin rehacer el ejercicio, indica qué cambios habría en relación con el caso anterior si el protocolo de coherencia fuera de tipo MOESI. En los tres primeros casos no hay cambios, pero en el último sí. Dado que el protocolo es de tipo MOESI, se admiten varias copias de un bloque modificado, siempre que una de ellas esté en estado O. Por tanto, no se actualiza la MP. Es decir: P0: LD R2,A

4.

S, 5

I, -

O, 5

I, -

20

BR, sh

C2 → C0

En una máquina SMP de 16 procesadores se dispone de instrucciones Test&Set para operaciones de sincronización. Una determinada aplicación requiere utilizar una sección crítica que sabemos se va a ejecutar frecuentemente. Escribe código para las funciones que protegen la sección crítica (lock y unlock) de la manera más eficiente posible. Explica las ventajas para este caso del código que propones. Dado que se va a utilizar mucho, es posible que haya muchos conflictos en el acceso a la SC; para limitar el tráfico que se genere, la opción más adecuada será utilizar el procedimiento Test-and-Test-&Set: primero se mira y luego se intenta entrar. Por ejemplo: lock:

LD R1,CER BNZ R1,lock

; fase de test: leer cerrojo; no continuar hasta que esté abierto. ; como no se escribe, no se genera tráfico de datos.

T&S R1,CER BNZ R1,lock RET

; intentar cerrar el cerrojo atómicamente. ; si no se cumple la atomicidad, repetir el procedimiento.

unlock: ST CER,R0 RET

5.

; R0 = 0: abrir el cerrojo

Se va a ejecutar este programa entre los 8 procesadores de una máquina SMP: suma = 0; for (i=0; i gather:

P1: A = 3;

P1: x = 2;

se recogen en un proceso datos distribuidos en todos ellos. P0: x = 9; P1: x = 2; Gather(x,A,P0) →

P2: x = 5; P3: x = 6; P0: A = [9, 2, 5, 6];