64
Arquitecturas Paralelas 12-13 Computadores Paralelos Computación de alta velocidad EJERCICIOS Dpto. de Arquitectura y Tecnología de Computadores Facultad de Informática — Universidad del País Vasco

EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

  • Upload
    others

  • View
    28

  • Download
    0

Embed Size (px)

Citation preview

Page 1: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Arquitecturas Paralelas 12-13

Computadores Paralelos Computación de alta velocidad

EJERCICIOS

Dpto. de Arquitectura y Tecnología de Computadores Facultad de Informática — Universidad del País Vasco

Page 2: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Tema 1: Computadores vectoriales .................................................................. 3 Tema 2: Computadores paralelos (conceptos básicos)............................. 17 Tema 3: Coherencia de los datos en los computadores SMP ................. 19 Tema 4: Sincronización de procesos en los computadores SMP ........... 25 Tema 5: Consistencia de la memoria en los computadores paralelos ... 33 Tema 6: La red de comunicación. Paso de mensajes. ............................... 35 Tema 7: Coherencia de los datos en los computadores DSM ................ 47 Tema 8: Paralelización de bucles y planificación de tareas ..................... 51 Tema 9: Computadores de alta velocidad. OpenMP, MPI (introd.). ..... 57

Ejercicios generales ........................................................................... 59

Page 3: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores vectoriales ▪ 3 ▪

1.1 En una determinada máquina vectorial se han ejecutado estos cuatro "programas" y se han obtenido los siguientes tiempos de ejecución (VS = 1; VL = Lmax):

Programas Tiempo de ejecución (≈) P1 LV V1,A(R1) 300 ns

P2 LV V1,A(R1) ADDV V2,V1,V0 325 ns

P3 LV V1,A(R1) ADDV V2,V1,V0 SV B(R1),V2

335 ns

P4 LV V1,A(R1) LV V2,B(R1) ADDV V3,V2,V1 SV C(R1),V3

650 ns

¿Qué tipo de características básicas de la máquina vectorial pueden deducirse de esos datos? 1.2 Un procesador vectorial va a ejecutar el siguiente código vectorial:

LV V0,A(R1) LV V1,B(R1) MULV V2,V0,V1 LV V3,C(R1) ADDV V4,V2,V3 SV D(R1),V4

Características del computador

Esquema de segmentación: B/D - L - AM - M - ... - M - E B/D - L - A - ... - A - E

Latencia de las operaciones: add → 3 ciclos; mul → 5 c.; mem → 7 c.

Buses a memoria: 2 Frecuencia de reloj: 500 MHz

a. Rellena una tabla de ejecución y calcula el tiempo de ejecución del programa en función de N para estos dos casos: (a) las instrucciones se encadenan; y (b) las instrucciones no se encadenan. No tomes en consideración posibles conflictos en el uso de los módulos de memoria.

b. Calcula, en cada caso, el rendimiento máximo y el valor de N1/2 y N3/4, así como el tiempo de ejecución y la velocidad cuando los vectores y los registros vectoriales son de 128 elementos.

c. Repite el apartado (a) pero considerando un solo bus de memoria. d. Sin rellenar una tabla, estima el orden del tiempo de ejecución si se dispusiera de 4 buses

(con y sin encadenamiento). 1.3 Se ejecuta en un procesador vectorial el siguiente programa:

LV V1,A(R1) LV V2,B(R1) OP1 V3,V1,V2 LV V4,C(R1) OP2 V5,V4,V3 SV D(R1),V5

Esquema de segmentación LV/SV → B/D L AM M(4)E OP1 → B/D L A1 A1 A1 E OP2 → B/D L A2 A2 E

En la tabla adjunta aparecen algunos datos (ciclos) sobre la ejecución del programa en dos casos diferentes. Basándote en dichos datos, completa la tabla e indica, para cada caso, la longitud de los registros vectoriales, el número de buses a memoria, y si existe o no encadenamiento entre instrucciones.

1º caso 2º caso dato 1 dato N dato 1 dato N

LV V1,A(R1) LV V2,B(R1) OP1 V3,V1,V2 LV V4,C(R1) OP2 V5,V3,V4 SV D(R1),V5

3 + 4 + 1 = 8 108 + 1 + 3 + 1 = 113 107 + 4 + 1 = 112

107 108 212 211

3 + 4 + 1 = 8

71 139 143 207

Page 4: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 4 ▪ Arquitecturas Paralelas 12-13

1.4 Ejecutamos en un computador vectorial un programa que incluye, junto con código escalar, el código vectorial necesario para ejecutar la operación C = A + B (vectores).

Medimos el número de ciclos necesarios para ejecutar el programa, y obtenemos:

N → 10 50 100 longitud de los vectores TVE → 80 304 584 tiempo de ejecución, en ciclos, del código vectorial junto con el escalar

El reloj de la máquina es de 800 MHz.

a. Dibuja los datos anteriores en una gráfica y calcula, a partir de los mismos, el tiempo de ejecución (ns) y el rendimiento obtenido (Mflop/s), para el caso de N = 128.

b. Sabemos que el factor de vectorización del programa anterior, que incluía código vectorial y escalar, es de f = 0,8. Además, la relación K∞ = te / tv es 10 para este computador. Basándote en estos datos, calcula el valor de ti (tiempo de inicio de la operación vectorial) y tv (tiempo de proceso de un elemento del vector). ¿Cuál sería el rendimiento máximo que se podría obtener en esta máquina para este programa si f = 1? ¿Y el valor de N1/2?

c. De acuerdo a los datos anteriores, indica, de manera razonada, el número de buses a memoria de esta máquina y si se encadenan o no las instrucciones.

1.5 Disponemos de una máquina vectorial en la que el procesador escalar alcanza los 500 Mflop/s

y el vectorial los 2500 Mflop/s. La carga media de trabajo de esta máquina presenta un factor de vectorización f = 0,7.

Nos ofrecen tres actualizaciones de la máquina (todas ellas al mismo coste):

- un nuevo compilador que logra un factor de vectorización f = 0,85. - una actualización del procesador escalar a uno de 1000 Mflop/s. - una actualización del procesador vectorial a uno de 4000 Mflop/s.

¿Cuál de las tres alternativas nos ofrecerá los mejores resultados? 1.6 Un computador vectorial ejecuta el siguiente programa:

LV V1,A(R1) B – D/L – AM – M(6) – E ADDV V2,V1,V1 B – D/L – A(2) – E LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E SV C(R1),V4

El esquema de segmentación de las instrucciones es el indicado. Las instrucciones pueden encadenarse, y existen dos buses para acceder a memoria. Los vectores son de 256 elementos y el paso (stride) es 1. El reloj es de 500 MHz.

a. Rellena una tabla indicando los ciclos en los que se producen los principales hitos en la ejecución de las instrucciones, y calcula el tiempo de ejecución del programa en función de N. No se producen conflictos en los módulos de memoria. A partir de ahí, calcula: R256 y R∞ (ambos en Mflop/s) y N1/2.

b. Los registros vectoriales son de 64 elementos; por tanto, los vectores no caben y habrá que formar un bucle. El coste de ejecución de las instrucciones de control del bucle es tbuc = 10 ciclos. Calcula nuevamente los parámetros del apartado anterior.

c. Estima de manera justificada, sin volver a rellenar una tabla, el valor de R∞ si sólo hubiera un bus para acceder a memoria.

d. El rendimiento real obtenido en la ejecución del programa anterior, que se ejecutaba junto a una parte de código secuencial, ha sido de 241 Mflop/s. El procesador escalar es, en el límite, 10 veces más lento que el vectorial. Calcula la fracción de código ejecutada en serie.

Page 5: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores vectoriales ▪ 5 ▪

e. Analicemos los conflictos de memoria. Se ejecuta ahora el código siguiente:

LV V1,A(R1) ADDVI V2,V1,#1.5 DIVV V3,V2,V1 B – D/L – A(8) – E SV A+1(R1),V3

La memoria está entrelazada en 16 módulos. El vector A está almacenado en memoria a partir del módulo m0 y el paso o stride es 1. Calcula el tiempo de ejecución del programa en función de N considerando los posibles conflictos en el acceso a la memoria.

1.7 Se ejecuta en un procesador vectorial el siguiente programa:

do i = 1, N A(i) = 2.0 * A(i+2) + 1.0 enddo

La latencia de las instrucciones antes de acceder a la unidad funcional (B, D, etc.) es de 4 ciclos, y las unidades funcionales tienen las siguientes latencias: memoria, 5 ciclos; sumador, 3 ciclos; multiplicador, 4 ciclos.

Calcula el tiempo de ejecución del programa (en función de N) en los dos siguientes casos: (a) las instrucciones pueden encadenarse y existe un único bus con memoria; y (b) las instrucciones no se pueden encadenar y hay 2 buses para acceder a memoria. No existen conflictos en el acceso a memoria.

Para cada caso, calcula el rendimiento máximo obtenido, en Mflop/s, si la frecuencia del reloj es de 600 MHz. ¿Cuál es el rendimiento real si N = 50?

1.8 Un procesador vectorial ejecuta el programa que se indica:

LV V1,A(R1) LV V2,B(R1) MULV V3,V1,V2 LV V4,C(R1) ADDV V5,V3,V4 SV D(R1),V5

Esquema de segmentación LV/SV → B D/L AM M(5) E MULV → B D/L A* A* A* E ADDV → B D/L A+ A+ E

La memoria está entrelazada en 32 módulos. El primer elemento del vector A se halla en el módulo 0, el de B en el módulo 30, el de C en el módulo 7 y el de D en el módulo 0. Se dispone de 4 buses a memoria y las instrucciones pueden encadenarse. Los vectores son de longitud 64 y el stride es 1.

a. Calcula, rellenando una tabla, el tiempo de ejecución del programa en función de N. Ten en cuenta los posibles conflictos en los accesos a memoria y los retardos implicados.

b. Busca una colocación óptima para los 4 vectores, que evite, si es posible, las colisiones en memoria.

c. Calcula en ambos casos los valores de N1/2, R∞ y R64 (F = 800 MHz). 1.9 En un procesador vectorial, con el esquema de segmentación indicado, se quiere ejecutar el

siguiente programa:

LV V2,A(R1) MULV V1,V2,V2 ADDV V4,V4,V1 SV B(R1),V4 ADDV V5,V4,V1 SV C(R1),V5

Esquema de segmentación

LV/SV → B/D L AM M(14) E ADDV → B/D L A(4) E MULV → B/D L A(6) E

a. Analiza la ejecución del programa (como en los ejercicios anteriores) y calcula el tiempo de ejecución en función de la longitud de los vectores, N. La máquina dispone de un único bus para acceso a memoria, las instrucciones se pueden encadenar, y no hay conflictos con las unidades funcionales ni en los módulos de memoria.

Page 6: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 6 ▪ Arquitecturas Paralelas 12-13

b. La frecuencia del reloj es de 666 MHz. Calcula: 1. R∞ (Mflop/s). 2. N1/4, N1/2 y N3/4. Representa gráficamente la función N (%R∞). 3. Rendimiento (Mflop/s) para el caso en que N = 100, teniendo en cuenta que el

programa contiene además código escalar, siendo f = 60% y K∞ = te / tv = 6.

c. Finalmente, supón que existen 3 buses para acceder a memoria y que ésta está entrelazada en 64 módulos. Calcula una posición óptima en memoria para los tres vectores del programa, de tal manera que no haya colisiones en el acceso a los módulos. El stride de los vectores es 1.

1.10 Una pequeña máquina vectorial tiene las siguientes características:

Tciclo = 5 ns Tacc-mem = 40 ns Módulos de memoria = 4 Encadenamiento, no

Ejecutamos en esta máquina un programa que simplemente suma 1 al valor de los elementos de un vector (A = A + 1). Indica razonadamente el rendimiento máximo esperado (Mflop/s).

1.11 Disponemos de una máquina vectorial, con el esquema de segmentación indicado, en la que

se va a ejecutar el siguiente programa:

LV V1,A(R1) ADDVI V2,V1,#2.0 SV B(R1),V2 LV V3,C(R1) MULV V4,V1,V3 ADDV V5,V2,V4 SV D(R1),V5

Esquema de segmentación

LV/SV → B D/L AM M(6) E ADDV → B D/L A(3) E MULV → B D/L A(5) E

Se dispone de 2 buses para acceso a memoria y las instrucciones se pueden encadenar. El modelo de acceso a memoria es el de "adelanto de los load". La memoria está entrelazada en 16 módulos, la longitud de los vectores es N = 64, y el paso de los vectores es 1.

Indica en una tabla de ejecución los ciclos correspondientes a los momentos principales de la ejecución de las instrucciones. Indica, igualmente, los módulos más adecuados para almacenar los vectores de tal manera que se eviten las colisiones en el acceso a memoria.

Tomando como referencia el caso anterior, y suponiendo que la frecuencia del reloj es de 500 MHz, calcula R∞ y R64 en Mflop/s.

1.12 Se ejecuta en un computador vectorial la operación vectorial A = B × C + D + 1.0, y se han

obtenido los siguientes parámetros: N1/2 = 25, R∞ = 500 Mflop/s. El reloj es de 666 MHz. ¿Cuál será el rendimiento de la máquina en Mflop/s si la longitud de los vectores es 100?

Considerando que las instrucciones pueden encadenarse, ¿cuántos buses se utilizan en esta máquina para acceder a memoria?

1.13 Se ejecuta el siguiente programa en una máquina vectorial

SV A(R1),V1 LV V2,B(R1) LV V3,C(R1) ADDV V1,V2,V3 MULV V4,V1,V1 SV D(R1),V4 ADDV V5,V1,V4 SV E(R1),V5

Esquema de segmentación

LV/SV → B D/L AM M(5) E ADDV → B D/L A(2) E MULV → B D/L A(4) E

Las instrucciones pueden encadenarse y existen 2 buses para acceder a memoria. La memoria está entrelazada en 11 módulos. Todos los vectores están almacenados a partir del módulo 0 y el stride es 1. Si es necesario, considera N = 100.

a. Rellena una tabla de ejecución para dicho programa y calcula el tiempo de ejecución del mismo en función de N.

Page 7: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores vectoriales ▪ 7 ▪

b. El rendimiento máximo, con N = ∞, del programa anterior es 500 Mflop/s. Calcula la frecuencia del reloj de esta máquina, así como la longitud de los vectores necesaria para obtener un 80% de dicho rendimiento.

1.14 Un (multi)computador vectorial está compuesto por 8 procesadores vectoriales idénticos. La

memoria de esta máquina está entrelazada en 16 módulos y la latencia de la memoria es de 4 ciclos. Cada procesador dispone, de manera independiente, de dos buses para acceder a memoria. El reloj de la máquina es de 500 MHz. Los registros vectoriales son de 128 elementos. Las instrucciones se encadenan, y el esquema de segmentación es el siguiente:

LV / SV → B D/L AM M(4) E ADDV → B D/L A(2) E

Se utiliza esta máquina para ejecutar el siguiente bucle:

do i = 0, N-1 A(i) = A(i) + 2.5 enddo

El vector A es de 128 elementos y está almacenado a partir del modulo 0 de memoria.

a. Indica los puntos más relevantes de la ejecución del programa (comienzo, encadenamientos, penalizaciones, etc.), rellenando una tabla similar a las utilizadas en anteriores ejercicios, si el programa se ejecuta en un único procesador.

b. Repite el proceso, pero suponiendo ahora que se utilizan dos procesadores. El reparto de tareas entre los procesadores es el siguiente: el procesador 1 trata los elementos pares del vector (0, 2, 4, 6...) y el procesador 2 los impares (1, 3, 5...).

c. Repite el problema, pero si se ejecuta el programa sobre los 8 procesadores. El reparto de tareas es similar al del caso anterior: el procesador 1 procesa los elementos (0, 8, 16, 24...); el 2, los elementos (1, 9, 17, 25...), el 3, los elementos (2, 10, 18, 26...) ... y el procesador 8 los elementos (7, 15, 23...). Dibuja la ocupación de los módulos de memoria en el tiempo.

d. El costo de ejecución de programas en esta máquina es de X euros por ciclo de reloj y procesador. Basándote en los resultados anteriores, indica ¿cuál de las tres alternativas ejecuta el programa en un tiempo menor? ¿cuál es el coste de cada alternativa? Obtén un valor representativo de la relación coste/eficiencia (cuántas veces más rápido / cuántas veces más caro) de las alternativas (b) y (c) frente a la alternativa (a).

e. Considerando los resultados obtenidos en el caso (a), indica el rendimiento teórico máximo de esta máquina en Mflop/s para este programa y el rendimiento real obtenido.

1.15 Las tres gráficas siguientes muestran hipotéticos resultados obtenidos en una máquina

vectorial con un código que se ha podido vectorizar completamente.

0 50

100 150 200 250 300

0 50 100 150 200

R(Mflop/s)

N

0 50

100 150 200 250 300

0 50 100 150 200

R (Mflop/s)

N

0

100

200

300

400

500

0 50 100 150 200

R(Mflop/s)

N

a. Indica cuál (o cuáles) de los tres casos corresponde a un computador vectorial y por qué.

En base a los datos que se pueden extraer de las gráficas, haz una estimación aproximada del valor de R∞ y N1/2 (para un caso que consideres correcto).

b. La operación vectorial que se ha ejecutado ha sido: A = A×B + C×D, y el periodo del reloj es de 3,33 ns; haz una estimación del tiempo de ejecución del programa para N = 128.

c. Indica razonadamente el número de buses a memoria que tiene esta máquina y si se encadenan o no las instrucciones.

Page 8: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 8 ▪ Arquitecturas Paralelas 12-13

1.16 Analiza las dependencias de datos entre instrucciones en estos nueve bucles y dibuja los grafos de dependencias correspondientes. A partir de ello, indica si es posible o no vectorizar los bucles, cómo y por qué, y, en un su caso, escribe el código vectorial.

Nota: A, B, C... representan las direcciones de acceso al elemento 0 del vector correspondiente: A → A(0); A+1 → A(1)... El direccionamiento es a palabra. Las matrices se almacenan por filas. Los registros vectoriales son de tamaño 128.

▪ bucle 1 do i = 1, 100 A(2*i+1) = B(100-i) enddo

▪ bucle 2 do i = 1, 100 (1) A(i) = A(i-1) + 1.0 (2) B(i) = A(i+1) enddo

▪ bucle 3 j = -1 k = 20 do i = 1, 100, 2 j = j + 4 A(j) = A(k) + 2 B(i) = A(j-2) k = k + 3 enddo

▪ bucle 4 do i = 1, 100 (1) A(i) = B(i+1) + 2 (2) B(i-1) = A(i) + A(i+2) enddo

▪ bucle 5 do i = 1, 128 (1) A(i) = X(i) + P(i-1) (2) B(i) = A(i) + A(i+1) (3) P(i) = X(2*i) + 3.0 (4) P(i+1) = B(i) * 2.0 enddo

▪ bucle 6 A[100,100];

do i = 0, 99 do j = 2, 99 A(i,j) = A(i,j-2) * 2 enddo enddo

▪ bucle 7 A[100,100];

do i = 0, 99 k = 2 do j = 0, 97 A(i,k) = A(i,k-2) + A(i+1,j) k = k + 1 enddo enddo

▪ bucle 8 A,B[100,100];

do i = 1, 98 do j = 2, 99 (1) A(i,j) = A(i,j-2) + B(i-1,j-1) (2) B(i,j) = B(i-1,j) + B(i+1,j) enddo enddo

▪ bucle 9 A,B[100,100];

do i = 2, 98 k = 0 do j = 1, 16 A(i,k+1) = A(i,k+2) + A(i+1,k+1) B(i,k+1) = A(i-2,k) + 1 k = k + 1 enddo enddo

1.17 a. Analiza las dependencias del programa y dibuja su grafo de dependencias y el espacio de

iteraciones. Indica razonadamente si el código es vectorizable o no, y, en su caso, escribe el código vectorial correspondiente.

do i = 2, 100 (1) D(i) = A(2*i+5) + 3 (2) A(2*i+3) = B(i+1) + C(i+1) (3) B(2*i) = A(3*i-4) * C(i) enddo

Page 9: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores vectoriales ▪ 9 ▪

b. Una técnica clásica de vectorización es la fusión de bucles. ¿Puede aplicarse esa técnica a este caso?

do i = 0, 99 A(i) = B(i) + C(i+1) enddo do i = 0, 99 C(i) = A(i+2) + 3 enddo

c. ¿Puede vectorizarse este bucle? En caso afirmativo, escribe el código vectorial correspondiente.

do i = 1, 100, 2 A(i) = A(99-i) + B(2*i) endd

1.18 Considera los dos bucles siguientes:

j = 2 k = -1 do i = 1, 100 k = k + 2 A(100-i) = A(k)*B(i+1) + 3.0 C(j) = C(j+1) enddo

j = 2 k = -1 do i = 1, 100 k = k + 2 A(200-2*i) = A(k)*B(2*i+1) + 3.0 C(j+1) = C(j) enddo

a. ¿Son vectorizables? ¿por qué? Si lo son, escribe el código vectorial más eficiente. b. Se quiere analizar la ejecución vectorial de uno de los bucles anteriores en cuatro

configuraciones diferentes de una máquina vectorial:

buses encadenamiento Tciclo 1 no 1 ns 1 si 1,25 ns 2 si 1,75 ns 3 no 1,5 ns

El código vectorial se ejecuta junto con código escalar. Este último requiere en todos los casos de 200 ciclos, y el código vectorial tiene un tiempo de inicio de 30 ciclos. Haz una estimación del tiempo necesario para ejecutar el programa, para poder escoger la mejor máquina de las cuatro anteriores.

c. Para la máquina escogida, calcula los parámetros clásicos de rendimiento: R∞, N1/2 y RN. Considera únicamente el código vectorial. ¿Cuál es el rendimiento global del programa, en Mflop/s, considerando tanto el código escalar como el vectorial?

1.19 a. Analiza las dependencias de este bucle, dibuja el grafo de dependencias y el espacio de

iteraciones, y, en su caso, escribe código vectorial para el mismo.

N = 32 P = 70 R = -2 do i = 1, N R = R + 2 A(R) = A(i+P) + 4 B(R+6) = B(i+1) + A(R+2) enddo

b. Una técnica clásica de vectorización es el intercambio de bucles. ¿Puede utilizarse dicha técnica con este bucle? ¿por qué?

do i = 1, N1 do j = 1, N2 A(i,j) = A(i-1,j+1) + A(i,j-1) enddo enddo

Page 10: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 10 ▪ Arquitecturas Paralelas 12-13

1.20 Un procesador vectorial va a ejecutar el siguiente código vectorial:

LV V0,B(R1) LV V1,C(R1) ADDV V2,V0,V1 ADDVI V3,V2,#2 SV A(R1),V2 SV C(R1),V3

Características del computador

Esquema de segmentación: B/D - L - AM - M (6) - E B/D - L - A(3) - E Memoria: 16 módulos, 2 buses Frecuencia de reloj: 500 MHz Registros vectoriales de 128 elementos Un sumador Encadenamiento de instrucciones

Los vectores del programa tienen un stride de 2 y su longitud es 128.

a. Rellena una tabla de ejecución para dicho programa, y decide dónde colocar los vectores en memoria para evitar conflictos en el acceso a los módulos. Calcula el rendimiento que se obtendrá (Mflop/s) al ejecutar el programa, el máximo rendimiento que se podría obtener, y la longitud de los vectores para obtener, al menos, la mitad de dicho máximo.

b. A continuación (y sin repetir por completo el ejercicio) analiza las siguientes mejoras: -- un bus más -- un sumador más Indica las posibles ventajas que se obtendrían en cada caso y el porqué.

1.21 Se va a ejecutar en un computador vectorial la operación vectorial A = B × C + D. Según los

análisis realizados, se ha estimado que el tiempo de ejecución será de 30 + 2N ciclos. Sin embargo, en dichos análisis no se ha considerado el tamaño de los registros vectoriales de la máquina, que tienen capacidad para 128 elementos; por tanto, si los vectores son más largos, habrá que hacer un bucle (strip mining). El reloj es de 500 MHz, y el tiempo necesario para el control del bucle, tbuc, se estima en 10 ciclos.

a. Calcula el valor máximo del rendimiento, R∞, en Mflop/s, sin tener en cuenta el tamaño de los registros vectoriales.

b. Dibuja en un par de gráficos el tiempo de ejecución y el rendimiento, en función de N, para el caso real, es decir, teniendo en cuenta el tamaño de los registros.

c. Calcula el nuevo valor de R∞. ¿Cuál es la pérdida de rendimiento, en tanto por ciento, en relación al caso ideal? A continuación, demuestra que dicho valor es el mismo que se consigue para el caso N = Lmax.

1.22 En un determinado computador vectorial los programas pueden ejecutarse en dos modos: en

modo escalar, con un rendimiento RE = 400 Mflop/s, y en modo vectorial, con un rendimiento RV = 2000 Mflop/s. Sea f el factor de vectorización medio en esta máquina.

a. Calcula la expresión del rendimiento promedio (RVE) y dibújala en función de f, 0 < f < 1. b. Calcula el factor de vectorización necesario para obtener R = 1200 Mflop/s. c. Si f = 0,7, ¿cuál debería ser el rendimiento del procesador vectorial, RV, para conseguir un

rendimiento global RVE = 1200 Mflop/s? 1.23 Se va ejecutar en un procesador vectorial el siguiente programa:

s = 3 k = 1 do i = 1, 100 k = k + 1 X(i) = P(i-1) + R(i-1) P(i) = R(k) + R(2*k-1) E(i) = X(s) / 2 R(i) = X(k-2) + P(i+1) s = s + 2 enddo

Analiza las dependencias del programa y represéntalas en un grafo de dependencias. A partir de dicho grafo, indica si se puede vectorizar o no (y cómo) y escribe el código resultante.

Page 11: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores vectoriales ▪ 11 ▪

1.24 Se va ejecutar en un procesador vectorial el siguiente programa:

do i = 1, 128 (1) A(i) = A(i+1) + 1 (2) B(i) = A(i) + B(i) (3) D(2*i+1) = A(i-1) + B(i+1) + C(i-1) (4) A(i+1) = 2 * B(i) (5) C(i) = B(i) + C(5) enddo

Analiza y explica las dependencias del programa y represéntalas en un grafo de dependencias. Tras ello, indica si se puede vectorizar o no (cómo y por qué) y escribe el código resultante.

1.25 Un supuesto "compilador vectorial" ha generado el siguiente código vectorial:

k = 4 do i = 1, 31 A(i) = B(i) + 2 A(i+2) = A(k-1) * A(i) + C(i) k = k + 2 enddo

MOVI R1,#0 MOVI VL,#31 MOVI VS,#1

LV V1,B(R1) ADDVI V2,V1,#2 SV A(R1),V2

LV V3,A-1(R1) LV V4,A(R1) MULV V5,V4,V3 LV V6,C(R1) ADDV V7,V5,V6 SV A+2(R1),V7

a. En el código vectorial hay varios errores. Indica cuáles son, por qué, y corrígelos. b. El rendimiento máximo obtenido, con el programa correcto, es de R∞ = 750 Mflop/s, con

una frecuencia de reloj de 750 MHz. Se ha medido el parámetro N1/2 y se ha obtenido un valor de 60. Basándote en esos datos, obtén una expresión para el tiempo de ejecución del programa en función de la longitud de los vectores. A partir de dicha expresión, calcula el número de buses disponibles para acceder a memoria y decide si las instrucciones se pueden encadenar o no.

1.26 Considera el siguiente programa:

do i = 0, 63 do j = 0, 63 S(k,j) = S(k,j) + 2 * A(i,j) enddo enddo

que va a ser ejecutado en una máquina vectorial con las siguientes características: registros vectoriales de 64 elementos; un solo bus a memoria (LV/SV); encadenamiento de las instrucciones; tini = 40 ciclos (para esa operación); tbuc = 15 ciclos (tiempo necesario para el control del bucle); F = 800 MHz.

a. Escribe código vectorial para el programa y calcula el tiempo de ejecución, el rendimiento (Mflop/s) y la eficiencia (%) del mismo. El desplazamiento para direccionar la fila k de la matriz S se encuentra en el registro R5.

b. Analiza los resultados y localiza el "punto débil" en la ejecución del programa que limita el rendimiento obtenido en esta máquina. A continuación, reescribe el código para intentar mejorar el resultado y recalcula los parámetros del apartado (a).

1.27 Queremos comparar dos computadores vectoriales con las siguientes características:

Computador 1

- F = 500 MHz - registros vectoriales de 64 elementos - encadenamiento de instrucciones - dos buses a memoria (LV/SV)

- un sumador y un multiplicador - ti = 40 c tbuc = 15 c

Computador 2

- F = 500 MHz - registros vectoriales de 64 elementos - encadenamiento de instrucciones - dos buses a memoria (LV/SV)

- tres sumadores y tres multiplicadores - ti = 120 c tbuc = 15 c

Page 12: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 12 ▪ Arquitecturas Paralelas 12-13

a. ¿Cuál es el rendimiento máximo (peak performance) que se puede lograr con esas máquinas?

b. Ejecutamos el siguiente programa:

do i = 0, 9999 A(i) = 5 * A(i) * A(i) * A(i) + 1 enddo

Calcula el número de ciclos necesario y el rendimiento (Mflop/s) en ambas máquinas. c. Repite el ejercicio anterior, pero con el siguiente programa:

do i = 0, 99 A(i) = 5 * A(i) enddo

¿Qué consecuencias sacas de estos resultados? 1.28 Los dos grafos siguientes representan las dependencias de un par de bucles. Escribe para cada

caso un bucle que esté de acuerdo con el grafo correspondiente. A continuación, indica si son vectorizables o no. Caso de serlo, escribe el código vectorial resultante (las matrices son de 100 × 100 elementos).

caso 1: espacio de iteraciones (una sola instrucción) caso 2: grafo de dependencias y espacio de iteraciones 1.29 La siguiente figura presenta los grafos de dependencias de 4 programas diferentes. Escribe

para cada uno de ellos un bucle sencillo que quede representado por dicho grafo e indica si sería vectorizable o no y por qué. En los casos en que sí lo sea, escribe el código resultante.

(a) (b) (c) (d) 1.30 Un procesador vectorial va a ejecutar el siguiente código vectorial:

LV V0,A(R1) MULVI V1,V0,#3.0 LV V2,B(R1) MULVI V3,V2,#2.0 ADDV V4,V1,V3 SV D(R1),V4

El periodo del reloj de la máquina es de 1,25 ns y el valor de K∞, relación de velocidad entre el procesador vectorial y el escalar, es 5.

a. El tiempo de ejecución del programa es del orden de 2N. Indica de manera justificada las características básicas de la máquina: unidades funcionales, buses, encadenamiento.

b. Supón que el tiempo de ejecución es TV = 30 + 2N. ¿Cuál será el rendimiento en Mflop/s que se alcance con este programa procesando vectores de 128 elementos?

c. El código anterior se ejecuta junto a código escalar. Calcula el valor mínimo que debe tomar f, fracción de código vectorizable, para obtener al menos la mitad del rendimiento anterior.

j

i

j

i 1

2

A, (1,-1)

1

2

3

1

2

3

1

2

2 1

3

Page 13: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores vectoriales ▪ 13 ▪

1.31 Resuelve los siguientes ejercicios básicos:

1 Un computador vectorial dispone de 5 UF y el reloj es de 500 MHz. ¿Cuál es el rendimiento máximo (peak performance) que puede alcanzar dicho computador?

2 Los buses con memoria son muy importantes en un computador vectorial (CV). Estamos

diseñando un CV y hemos entrelazado la memoria en 32 módulos; el tiempo de respuesta de la misma es 12,5 ns y el reloj es de 800 MHz. ¿Cuántos buses a memoria pondrías en dicho sistema?

3 La memoria de un computador vectorial se direcciona al byte. En un determinado bucle se

procesa la diagonal principal de una matriz de 128×128 elementos de 64 bits, que está almacenada por filas. ¿Cuál es el paso del vector definido por la diagonal de la matriz?

4 ¿Cuál debe ser el contenido del registro VS para leer el vector A, para leer el vector B, y para

escribir el vector C en este bucle?

do i = 3, 100 k = k – 3 C(k) = A(2*j-1) + B(i-3) j = j + 5 enddo

5 La memoria de un computador vectorial está entrelazada en 16 módulos y su latencia es de 4

ciclos. Se ejecuta en esa máquina el siguiente trozo de código (los elementos del vector A están en posiciones consecutivas de memoria) ¿Cuántas veces se accederá al módulo m12 de memoria? ¿Y al modulo m14?

MOVI VL,#100 MOVI VS,#4 LV V2,A+2(R1) ; inicialmente R1 = 0, y el elemento A0 se encuentra en el módulo m0

6 El reloj de un CV es de 2 ns. ¿Cuál es el rendimiento máximo (Mflop/s) que se puede obtener

ejecutando el siguiente bucle en los casos que se indican?

do i = 0, N-1 Z(i) = (Z(i) + 1) * 2 enddo

a. un bus de memoria, sin encadenamiento b. un bus de memoria, con encadenamiento c. dos buses de memoria, sin encadenamiento d. dos buses de memoria, con encadenamiento

7 Se ejecuta en un computador vectorial el siguiente bucle:

do i = 1, N A(i) = B(i) + C(i) D(i) = A(i) * A(i) enddo

a. El computador dispone de dos buses para acceder a memoria, y no encadena la ejecución

de las instrucciones. Indica, de manera razonada, de qué orden será el tiempo de ejecución.

b. Se ha medido el tiempo de ejecución del bucle para dos valores concretos de N y se han obtenido los siguientes resultados: T(20) = 200 ns y T(70) = 600 ns. Calcula el valor de los parámetros R∞ (MF/s) y N1/2 para ese bucle y esa máquina. ¿Cuál es la frecuencia de reloj del computador?

Page 14: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 14 ▪ Arquitecturas Paralelas 12-13

8 Se ejecuta en un computador vectorial el siguiente bucle de dos dimensiones. El tiempo de ejecución de la operación vectorial resulta ser TV = 20 + 2N ciclos, y se necesitan 15 ciclos para el control del bucle externo. Si intercambiáramos el orden de los bucles, ¿cómo sería la ejecución?

do i = 0, 99 do j = 0, 9 A(i,j) = A(i,j) * B(i,j) enddo enddo

a. 10 veces más rápida b. 10 veces más lenta c. 2 veces más rápida d. 2 veces más lenta e. esos dos bucles no pueden intercambiarse

9 ¿Puede vectorizarse este bucle? Si no, indica por qué; si sí, escribe el código vectorial

correspondiente.

do i = 0, N-2 A(i) = B(i+1) B(i) = A(i+1) enddo

10 ¿Puede aplicarse intercambio de bucles a estos bucles? ¿Por qué?

do i = 1, N-1 do j = 0, N-2 A(i,j) = A(i-1,j+1) / 2 enddo enddo

do i = 1, N-1 do j = 1, N-1 A(i,j) = A(i-1,j-1) / 2 enddo enddo

11 El siguiente bucle no es muy adecuado, tal como está, para vectorizar. Indica por qué y

transfórmalo para facilitar su vectorización.

do i = 0, N-1 if (X) then A(i) = B(i) else A(i) = C(i) enddo

12 Escribe un bucle, lo más sencillo posible, que se

corresponda con los grafos de dependencias de la figura. Utiliza matrices de tamaño 100×100. A continuación, indica si el bucle es vectorizable o no, y, en su caso, escribe el correspondiente código vectorial.

13 Un CV puede conseguir 1000 Mflop/s procesando los vectores de un determinado programa,

pero el factor de vectorización del mismo es f = 0,8 (los vectores son muy grandes). ¿Cuántos Mflop/s se conseguirán si el procesador escalar es 10 veces más lento procesando los vectores? ¿Qué valor debe alcanzar f para lograr 700 Mflop/s?

14 El grafo de la figura representa las hipotéticas dependencias de

un determinado bucle (do i = 0, … / do j = 0, …; vectores almacenados por filas) en el espacio de iteraciones. Claramente, el grafo es incorrecto. ¿Por qué?

15 En un bucle de 4 dimensiones existe una dependencia entre instrucciones cuyo vector de

distancias es (i = 2, j = –1, k = 0, m = 4). ¿Cuántos intercambios de bucles correctos pueden hacerse en ese bucle?

16 ¿Verdadero o falso?

▪ Un CV que puede obtener 2000 Mflop/s será siempre mejor que uno que sólo puede conseguir 1000 Mflop/s.

▪ Es de esperar que un CV sea muy rápido ejecutando código escalar.

1

2

A(1,-1) A(0,1)

j=0 1 2 … i=0

1

Page 15: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores vectoriales ▪ 15 ▪

▪ Considerando vectores largos, si el factor de vectorización es f = 2/3, el rendimiento obtenido es 2/3 del máximo. Lo anterior no es cierto si los vectores no son muy largos.

▪ Si el test de dependencias (MCD) da positivo (un número entero), entonces hay que marcar una dependencia en el grafo de dependencias.

▪ Si el test de dependencias da negativo (un número no entero), entonces puede que no exista la dependencia.

▪ El tamaño de los registros vectoriales limita la velocidad de cálculo de un CV. ▪ Un buen compilador vectorial es siempre útil, pero mejor gastar el dinero en hardware más

eficiente. ▪ El ancho de banda de la memoria es muy importante en un CV. ▪ Si se sabe hacer bien, todo programa que procesa vectores puede vectorizarse. ▪ Al vectorizar código se desordena el código original. En los años 75-95 el desorden estaba

de moda en esta área, por lo que los CV lograron gran éxito. Hoy en día, en cambio, el desorden está mal visto, lo que ha supuesto un notable decaimiento de los CV.

▪ Es importante que un CV disponga de muchas unidades funcionales, segmentadas, así como de un número elevado de módulos y de buses de memoria.

▪ Según Amdahl, no se puede escribir un programa que logre el rendimiento máximo teórico de un CV.

1.32 Se ejecutan en un procesador vectorial los siguientes bucles. Para cada caso, analiza las

dependencias de datos de los bucles y dibuja los correspondientes grafos. Basándote en ello, decide si el código puede vectorizarse o no (cómo y por qué). En los casos en los que sea posible, escribe el código resultante, indicando todo aquello que sea relevante para el programa.

▪ bucle 1 [registros vectoriales de 128 elementos] do i = 2, 1018 (1) B(i) = A(i) + 2 (2) C(i+5) = E(2*i) + 10 (3) D(i+5) = D(i-2) + C(i-1) (4) C(i)= B(i+2) * B(i) enddo

▪ bucle 2 k = 1 m = 2 do i = 3, 100 m = m + 3 A(i+1)= B(i) C(i) = D(i+1) * A(i) * A(m) D(m) = D(k+2) + 3 k = k + 2 enddo

▪ bucle 3 A[20,50];

do i = 0, 18 do j = 1, 49 A(i,j) = (A(i+1,j) + A(i,j-1)) / 2 enddo enddo

▪ bucle 4 A[128,8];

do i = 1, 125 do j = 0, 5 (1) A(i,j) = A(i-1,j+2) * 3 (2) B(i,j) = B(i+2,j) + A(i,j) enddo enddo

Page 16: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones
Page 17: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores paralelos (conceptos básicos) ▪ 17 ▪

2.1 Explica, breve y concisamente, las características principales de las dos arquitecturas básicas de los computadores paralelos.

2.2 Se ha ejecutado una aplicación en un multiprocesador con 32 procesadores; un 10% del

código se ha ejecutado en los 32 procesadores, un 70% en 16 procesadores, y el resto en 4 procesadores. Calcula el factor de aceleración (speed-up) y la eficiencia que se han conseguido (sin considerar otros factores).

2.3 Un programa se compone de dos partes, f1 y f2; dichas partes (funciones) se deben ejecutar

una después de la otra, y el tiempo de ejecución de ambas es similar. La primera parte se puede ejecutar en paralelo utilizando cualquier número de procesadores, y no hay sobrecarga asociada por ejecutarla en paralelo; con la segunda parte, en cambio, no se pueden utilizar más de 8 procesadores en su ejecución paralela. El sistema que se ha utilizado para ejecutar el programa tiene P procesadores. Calcula:

a. El factor de aceleración en función de P y, en consecuencia, el factor de aceleración máximo teórico.

b. El número de procesadores que se debe utilizar para conseguir un rendimiento de 0,5 y el factor de aceleración que se conseguirá en ese caso.

2.4 Una aplicación se ejecuta en una máquina paralela de 8 procesadores. Durante 50 segundos se

utilizan los 8 procesadores, durante 20 segundos se utilizan 4, y durante 30 segundos sólo 1. La carga que se reparte a los procesadores está equilibrada, aunque en el caso de la ejecución en paralelo ha habido una sobrecarga (overhead) del orden del 10% del tiempo de ejecución.

Haz una estimación del factor de aceleración (speed-up) que se consigue en relación con la ejecución serie y de la eficiencia (efficiency) obtenida.

2.5 Se ejecuta una aplicación en paralelo mediante P procesadores. Cuando se ejecuta en

paralelo, por cada segundo de ejecución en serie se debe realizar una comunicación cuyo coste se puede modelar como: 40 + 16×P1/2 milisegundos.

Sin tener en cuenta otros aspectos, calcula el factor de aceleración máximo que se puede conseguir y el número de procesadores que se debe utilizar para conseguirlo.

2.6 Una determinada aplicación paralela se comporta de acuerdo a la ley de Amdahl. Una parte

de la misma puede ejecutarse en paralelo sin problemas, pero otra parte hay que ejecutarla en serie. Para una máquina con P = 64 procesadores, calcula:

a. Fracción máxima de programa que hay que ejecutar en serie si la eficiencia tiene que ser al menos del 50 %; y factor de aceleración que se conseguirá si f = 0,9.

b. Factor de aceleración que se conseguirá con f = 0,9, si la aplicación se comporta de acuerdo a la ley de Gustafson.

2.7 Un determinado algoritmo de cálculo tiene un tiempo de ejecución de 24 ms en un

procesador, y se repite un número muy elevado de veces, por lo que se decide estudiar su posible ejecución en paralelo en un cluster. En su versión en paralelo, el cálculo se puede repartir de manera muy eficiente entre los procesadores, pero hay que añadir comunicación: una fase inicial de distribución de datos, y una de recogida de resultados al final. Cuando se ejecuta en una máquina de 8 procesadores se consigue una eficiencia del 50%.

Para intentar mejorar ese resultado se decide efectuar el cálculo de manera "más fina" (más cálculo), haciendo que el tiempo de ejecución se multiplique por 10 en el caso serie. ¿Cuál será el speed-up y la eficiencia que conseguiremos ahora al usar 8 procesadores?

Si sabemos que el coste de la comunicación crece logarítmicamente con el número de procesadores, ¿cuál sería el speed-up y la eficiencia esperable si utilizáramos 64 procesadores en lugar de 8?

Page 18: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 18 ▪ Arquitecturas Paralelas 12-13

2.8 El tiempo de ejecución de una determinada aplicación es de 32 segundos. Para acelerar la

ejecución, se va a utilizar una máquina MPP de P procesadores. Sabemos que el cálculo se puede distribuir idealmente entre los procesadores, pero que, al ejecutarse en paralelo, la comunicación entre procesos va a añadir cierta carga. Cuando se ha ejecutado con 16 procesadores, el factor de aceleración ha sido 8; y con 32 procesadores, ha sido 10,67.

a. Basándote en esos datos, calcula el coste de la comunicación en función del número de procesadores.

b. Calcula el máximo factor de aceleración que puede conseguirse, y el número de procesadores que deberemos utilizar para que la eficiencia no baje del 25%.

Page 19: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Coherencia de los datos en los computadores SMP ▪ 19 ▪

3.1 Disponemos de un multiprocesador tipo SMP con 4 procesadores conectados en un bus, que utilizan una cache de dos bloques de una palabra. Las caches son completamente asociativas y la política de reemplazo es aleatoria. La coherencia de los datos se asegura mediante un protocolo snoopy tipo Illinois (MESI).

En un momento dado, el estado de las caches y de la memoria principal es el siguiente:

MC-P0 MC-P1 MC-P2 MC-P3 Memoria principal

bl est dat bl est dat bl est dat bl est dat @0 –1 @1 5

1 E 5 1 I –3 2 S 9 2 S 9 @2 9 @3 10

2 S 9 5 E 2 3 M 6 4 M 0 @4 10 @5 2

y se ejecutan las siguientes operaciones de memoria, una tras otra:

rd0 (@1) wr0 (@1, 22) wr2 (@2, –11) rd1 (@4) rd2 (@5) rd0 (@0) rd3 (@0) wr1 (@1, 8)

[rd0 (@1): lectura en la cache de P0, dir = 1; wr0 (@1, 22), escritura en la cache de P0, dir = 1, dat = 22]

Para cada operación, indica si es un acierto o un fallo, las señales de control y el tráfico de datos que se generará, y el contenido final de las memorias cache y de la memoria principal (repite para cada referencia una tabla como la anterior).

3.2 Disponemos de un multiprocesador SMP con 4 procesadores conectados en un bus. Las

caches son de dos bloques de una palabra y la estructura es de correspondencia directa. La coherencia de los datos se mantiene mediante un protocolo snoopy tipo Berkeley (invalidación, MOSI).

En un momento dado, el estado de las caches y de la memoria principal es el siguiente:

MC-P0 MC-P1 MC-P2 MC-P3 Memoria principal

bl est dat bl est dat bl est dat bl est dat @0 32 @1 –4

0 O 6 4 I 2 2 O 6 0 S 6 @2 10 @3 10

5 M 3 7 I –3 1 I 9 3 M 7 @4 2 @5 7

y se ejecutan las siguientes operaciones de memoria:

rd1 (@0) rd2 (@5) wr3 (@0, 2) wr1 (@3, –5) wr3 (@0, 13) rd2 (@1) rd0 (@1) wr2 (@2, –9)

[rd1 (@0): lectura en la cache de P1, dir = 0; wr3 (@0, 2), escritura en la cache de P3, dir = 0, dat = 2]

Para cada operación, indica si es un acierto o un fallo, las señales de control y el tráfico de datos que se generará, y el contenido final de las memorias cache y de la memoria principal.

3.3 Un sistema multiprocesador está formado por 4 procesadores conectados a un bus común. Las

caches son de dos bloques de dos palabras. La correspondencia es directa. Para mantener la coherencia de las caches se utiliza un protocolo snoopy tipo Dragon.

En un momento dado, el estado de las caches y de la memoria principal es el siguiente:

MC-P0 MC-P1 MC-P2 MC-P3 Memoria principal

bl est dat bl est dat bl est dat bl est dat @0-3 3 9 4 6

4 M 6 0 2 E 8 –1 @4-7 8 –1 7 6

3 S 7 6 @8-11 6 5 0 0

y se efectúan las siguientes operaciones de memoria:

rd0 (@4) rd1 (@9) wr1 (@8, –1) wr3 (@7, 5) wr2 (@6, –3) rd1 (@0) wr3 (@3, 9) wr2 (@7, 0)

[rd0 (@4): lectura en la cache de P0, dir = 4; wr1 (@8, –1), escritura en la cache de P1, dir = 8, dat = –1]

Para cada operación, indica si es un acierto o un fallo, las señales de control y el tráfico de datos que se generará, y el contenido final de las memorias cache y de la memoria principal.

Page 20: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 20 ▪ Arquitecturas Paralelas 12-13

3.4 Invalidación o actualización son las dos alternativas para la gestión de "copias" en las caches particulares de un multiprocesador. ¿Cuál es la solución más adecuada? Dependerá, probablemente, de la aplicación a ejecutar. Por ejemplo, considera estas dos aplicaciones:

A. (N procesos paralelos)

Repetir K veces { P0 escribe en la variable X P1-PN–1 leen la variable X }

B. (2 procesos paralelos)

Repetir K veces { P0 escribe M veces en la variable X P1 lee la variable X }

Calcula el tráfico generado en el bus al ejecutar dichos programas si, para mantener la coherencia, se usa un protocolo (1) de invalidación, o (2) de actualización (en ambos casos, escrituras write-back).

Cada una de las acciones a realizar genera el siguiente tráfico en el bus:

datos direcciones control - Fallo de cache: 64 bytes 5 bytes 1 byte - Invalidación: – 5 bytes 1 byte - Actualización: 8 bytes 5 bytes 1 byte

Como ejemplo, toma K = 10, N = 16 y M = 10. 3.5 Un multiprocesador dispone de 4 procesadores con cache local. En un momento determinado,

los cuatro procesadores efectúan una operación de lectura (en orden 1, 2, 3 y 4) sobre un bloque de datos que no se encuentra inicialmente en ninguna cache.

Indica en qué estado quedará finalmente dicho bloque en cada cache y el tráfico de datos que se generará, en estos dos casos:

a. protocolo de invalidación, con estados E, M, S e I. b. protocolo de actualización, con estados M, S y O.

Repite el ejercicio, pero suponiendo ahora que las operaciones que realizan los cuatro procesadores sobre el bloque son de escritura y que la política de escritura es write-back.

3.6 Se ejecutan en un multiprocesador SMP las siguientes operaciones de memoria, una tras otra:

rd0 (@1) rd1 (@0) wr2 (@3, 2) wr1 (@0, 4) rd0 (@2) wr1 (@2, 5) wr2 (@1, 3) rd2 (@5)

Las caches de los procesadores son de dos bloques, los bloques de dos palabras, y la correspondencia es directa. Las caches están inicialmente vacías y el contenido de la memoria es todo 0.

Indica, para cada operación, cómo evoluciona el contenido de la cache y de la MP, las señales de control generadas y el tráfico de datos, en cada uno de estos dos casos: (a) protocolo de coherencia MESI (Illinois, invalidación); y (b) protocolo de coherencia MOES(I) (Dragon, actualización).

3.7 Un multiprocesador utiliza un protocolo de coherencia de datos con las siguientes

características: snoopy, actualización y write-back. El autómata de control utiliza 2 estados para los bloques de las caches locales: O y S.

a. Describe el comportamiento de este autómata mediante una tabla de transición de estados y un grafo; indica las transferencias de datos que se producen y las señales de control que se generan.

b. Supongamos que existen 3 procesadores en dicho sistema, con caches de 1 palabra. Las caches están inicialmente vacías y el contenido de la MP es M(@1) = 0, M(@2) = 7. Indica de manera razonada el contenido y el estado de cada cache y de la MP según se van ejecutando las siguientes referencias:

rd1 (@1), rd2 (@1), rd3 (@1), wr1 (@1, 4), wr2 (@1, 5), rd2 (@2), rd1 (@2)

Page 21: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Coherencia de los datos en los computadores SMP ▪ 21 ▪

3.8 Write-back (WB) y write-through (WT) son las dos políticas de escritura habituales en la cache. En función del uso de las variables, unas veces es más eficiente un tipo de escritura y otras veces el otro. Por eso, en algunos protocolos de coherencia es posible utilizar uno u otro tipo de escritura en función de determinada condición (es decir, se hace una apuesta).

Por ejemplo, el protocolo Write-Once utiliza WT cuando se escribe una variable por primera vez y WB en las restantes escrituras. Write-Once es un protocolo de invalidación de 4 estados: I, E, M, y S. No dispone de línea sh (lo cual significa que no puede distinguir entre los estados S y E en lo que a número de copias se refiere).

Diseña este protocolo de coherencia: transiciones entre estados, señales de control, tráfico de datos...

3.9 El grafo de la figura muestra el protocolo de coherencia (snoopy) utilizado por el procesador

Alpha de Digital. Este procesador utiliza cache de dos niveles (interna y externa); la política de escritura es write-back o write-through, en función de los estados; además, las copias pueden ser actualizadas o invalidadas. Para decidir las transiciones entre estados, además de la señal sh (shared), se utiliza otra señal más, mc1; esta señal le indica a cada snoopy si el bloque en cuestión está o no en su cache interna. Las copias se actualizan o se invalidan en función de la señal mc1 (puesto que la señal mc1 es diferente para cada snoopy, es posible que algunas copias se actualicen y otras se invaliden).

Analiza el protocolo, y responde a estas cuestiones:

• ¿Qué estados representan X e Y? • ¿Por qué se producen las transiciones 1, 2 y 3? ¿Qué representa 4? • ¿En qué casos se escribirá un bloque de datos en memoria? ¿Y una palabra? • ¿Qué criterio se utiliza para que las escrituras sean de tipo write-through o write-back?

Resume en una tabla el tráfico de datos que se genera al pasar de un estado a otro. 3.10 El procesador R4000 utiliza un protocolo de coherencia para la cache, tipo snoopy, con las

siguientes características: 5 estados: I, E, M, S, O / invalidación / write-back / línea "shared".

a. Indica el comportamiento de este protocolo —transiciones entre estados, señales de control generadas, tráfico de datos— en una tabla y un grafo.

b. Supón que disponemos de un multiprocesador con tres procesadores que utilizan el protocolo anterior. Cada cache local tiene capacidad para un único bloque de cuatro palabras. La situación actual es la siguiente (bloque / estado / datos):

MC0: 0 / M / 1, 3, 5, 7 MC1: 6 / S / 2, 4, 8, 0 MC2: 5 / E / 3, 3, 1, 1

Se realizan 3 accesos consecutivos a memoria en el procesador P2: rd2 (@2), wr2 (@0, 10) y rd2 (@25). Indica las señales de control y el tráfico de datos que se generará, así cómo el estado y el contenido final de las caches y/o de la memoria principal, al ejecutarse estos accesos a memoria.

PW (fault) = PR (fault) + PW (hit)

PWsh( ) PR BR

PR PR PW

PR PWsh

BR BC/cm1

E

S

I

PW

Alpha

4

X

Y 2

PWnsh (BW) PRnsh (BR)

BC/ncm

PRsh (BR) PWnsh (BW*) BC/ncm1(BW

1 C

3

Page 22: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 22 ▪ Arquitecturas Paralelas 12-13

3.11 Un multiprocesador está formado por tres nodos SMP conectados entre ellos mediante un bus, formándose así una jerarquía de buses de dos niveles. El protocolo de coherencia es de tipo snoopy jerárquico (MSI). Considera la siguiente serie de referencias al mismo bloque de cache: LD1, LD2, LD3, ST1, LD2, LD3, ST2, LD3, ST3 donde LDx / STx indica una operación de load/store de un procesador perteneciente al grupo x (x = 1, 2, 3), siempre sobre la misma variable. El bloque de cache referenciado se encuentra en el segundo sistema SMP.

Rellena una tabla indicando cómo va variando el estado de la cache y el de las caches de coherencia local y remota en cada conjunto de procesadores. Explica brevemente qué ocurre.

SMP 1 SMP 2 SMP 3 f/a MC KR KL MC KR KL MC KR KL tiempo LD1

Calcula el número de ciclos necesario para completar las referencias anteriores (en lo que a la

coherencia se refiere) si el acceso a un bloque local cuesta L ciclos, a un bloque remoto 4L ciclos, y la invalidación 4C ciclos.

3.12 Responde a las siguientes cuestiones con precisión:

1 Cuando se carga un bloque da datos en memoria cache, ¿en base a qué criterio se escoge el estado E o el S en un protocolo de coherencia tipo MESI?

2 Un determinado protocolo de coherencia utiliza 4 estados: M, S, E y O. ¿Es posible que en un

momento determinado exista una única copia de un bloque en las caches y en estado O? ¿Por qué?

3 Con el mismo protocolo anterior ¿es posible que un bloque en estado S no sea coherente con

el contenido de memoria principal?

4 En un protocolo tipo MOESI (invalidación) ¿en qué condiciones podemos tener dos copias de un bloque en estado M?

5 Para mantener la coherencia de los datos utilizamos un protocolo de actualización tipo

MOES(I). ¿Puede pasar un bloque de datos del estado O al estado M? ¿Y del estado E al estado O?

6 ¿Es posible utilizar siempre una política de escritura write-back cuando se utiliza un

protocolo de coherencia tipo MSI? ¿Y con un protocolo MOSI?

7 En un multiprocesador existen en un momento dado dos copias de un bloque, ambas en estado S. Un tercer procesador quiere leer dicho bloque. Explica desde dónde se traerá el bloque y las ventajas y desventajas de cada caso posible. ¿Y si las dos copias estuvieran en estado O y S respectivamente?

8 Usando un determinado protocolo de coherencia, un bloque de cache pasa de estado M a

estado O. ¿A qué es debido ese cambio? ¿Cuál es la política de escritura?

9 Un bloque pasa por los siguientes estados en una cache: I→S→M→I. El protocolo de coherencia es de invalidación. ¿Son posibles las transiciones citadas? ¿Cómo? ¿Y si el protocolo fuera de actualización?

Page 23: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Coherencia de los datos en los computadores SMP ▪ 23 ▪

10 Una máquina SMP utiliza un protocolo tipo snoopy para asegurar la coherencia de los datos, y la política de escritura es write-back siempre que se puede. Un bloque de datos de dos palabras sufre las siguientes transformaciones en la cache del procesador Pi [datos / estado]:

* – * / I → 3 – 4 / M → 6 – 4 / S a. ¿Qué operación se ha realizado para que se haya producido la primera transición? b. ¿Qué debe ocurrir para que se produzca el segundo cambio? c. ¿Qué tipo de protocolo de coherencia se utiliza? ¿Por qué? d. Tras el segundo cambio, ¿cuál será el contenido de la MP?

11 Un multiprocesador de dos procesadores utiliza un snoopy para asegurar la coherencia de los

datos. Un bloque de datos de la cache de P1 pasa por los siguientes estados: I → E → M → O → M → I. ¿Por qué estados ha pasado dicho bloque en la cache del otro procesador?

12 En algunos multiprocesadores se duplica el directorio (tags, estados...) de las memorias

cache. ¿A qué es debida tal duplicación?

13 De cara a evitar problemas de deadlock o de carreras en los protocolos snoopy, es habitual utilizar, además de los estados típicos (E, M...), estados transitorios. ¿Significa esto un aumento en el tamaño del directorio de las caches al tener que añadir más bits para poder representar más estados? ¿Por qué?

14 En un determinado momento, dos caches disponen del mismo bloque en estado S. Los dos

procesadores efectúan a la vez una operación de escritura sobre dicho bloque. Explica concisa y esquemáticamente cómo se resuelve el posible problema de carreras en un protocolo MESI.

15 Los siguientes cuatro casos muestran el hipotético contenido y estado (snoopy) de un

determinado bloque de memoria, de dos palabras, tanto en cache como en memoria principal. ¿Son correctas? En caso de que no lo sean, indica el motivo.

(a) C1: 0 / 2 E C2: — C3: — MP: 0 / 2 E (b) C1: 3 / 2 O C2: 0 / 2 S C3: 0 / 2 S MP: 0 / 2 (c) C1: 5 / 2 M C2: 3 / –9 M C3: — MP: 3 / 2 (d) C1: –1 / –1 E C2 –1 / –1 S C3: — MP: –1 / –1

16 Un protocolo de coherencia de tipo actualización utiliza los estados M, S, O, (I). Es necesario

utilizar la señal de control sh? ¿Y si el protocolo fuera de invalidación?

Page 24: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones
Page 25: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Sincronización de procesos en los computadores SMP ▪ 25 ▪

4.1 Con el par de instrucciones LL/SC puede “simularse” el comportamiento del resto de operaciones atómicas habituales. Escribe código para construir las siguientes operaciones atómicas a partir del par LL/SC:

a. Test&Set b. Swap c. Fetch&Inc d. Fetch&Add e. Compare&Swap

4.2 Responde a las siguientes cuestiones. Razona tus respuestas.

1. El siguiente código presenta un sección crítica construida mediante instrucciones LL/SC ¿Es correcta? ¿Por qué?

espera: LL R1,CERROJO BNZ R1,espera ; libre!, entra en la sección crítica

LD R2,i ; sección crítica ADDI R2,R2,#1 ST i,R2

MOVI R1,#1 SC CERROJO,R1 ; intenta salir de la sección crítica BZ R1,espera ; no lo has logrado; inténtalo otra vez RET

2. ¿Y esta otra sección crítica?

esp1: MOVI R2,#1

esp2: LL R1,CERROJO BNZ R1,esp2 SC CERROJO,R2 ; cierra el cerrojo BZ R2,esp1 ; libre!, entra en la sección crítica

F&Inc i ; sección crítica

MOVI R2,#0 ST CERROJO,R2 ; salir de la sección crítica (abrir el cerrojo) ...

3. ¿En qué puede ayudar la introducción de temporizaciones en una rutina de lock que utilice

el método de tickets? Pon un ejemplo.

4. Una determinada aplicación se ejecuta en paralelo en 16 procesadores. Se ha analizado el código y se ha visto que el 10% del tiempo de ejecución se consume ejecutando código que correspondería a una sección crítica. Sin considerar otros problemas, haz una estimación del factor de aceleración que se conseguirá frente al caso de un solo procesador.

5. La entrada a una sección crítica está controlada por una función de lock que utiliza el método de los tickets/turno. Un proceso ejecuta dicha función y obtiene un ticket de valor 35. El valor del turno en ese momento es 30. Mientras espera su turno de entrada a la sección crítica, ¿cuántas veces necesitará ese proceso que se le transfiera a la cache el bloque de datos que contiene la variable turno?

6. ¿Verdadero o falso? Justifica todas tus respuestas.

▪ Para ejecutar instrucciones atómicas se necesita ayuda del hardware del sistema. ▪ Aunque son útiles, si se programa con cuidado un sistema paralelo, no es necesario utilizar

instrucciones atómicas. ▪ LL y SC son instrucciones atómicas. ▪ La ejecución de la instrucción Test-and-Test&Set es atómica. ▪ Cuando se ejecuta un trozo de código en exclusión mutua se minimiza el tráfico en el bus,

ya que sólo hay un procesador ejecutando ese trozo de código. ▪ En una barrera de sincronización no se pueden sincronizar más de 16 procesos. ▪ Desde el punto de vista del tráfico generado en el bus, una función simple de lock hecha

mediante instrucciones LL/SC y otra hecha mediante el método de tickets generan un nivel similar de tráfico.

Page 26: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 26 ▪ Arquitecturas Paralelas 12-13

▪ Una rutina simple de lock escrita utilizando la instrucción Test&Set es más adecuada que otra que usa el procedimiento Test-and-Test&Set para el caso en que no es de esperar gran contención en el acceso a la sección crítica.

▪ No es bueno sincronizar un productor y un consumidor mediante un flag. Al ser una variable compartida, cuando uno la modifique se producirá un fallo en la cache del otro, y viceversa, por lo que se puede producir una situación de livelock, entrar en un bucle <escribe – invalida – escribe – invalida – ...>, y no hacer nada útil.

▪ El tiempo de ejecución de la instrucción Fetch&Increment no es siempre el mismo. ▪ Cuando se ejecutan barreras de sincronización, hay que usar siempre el mismo valor, 0 o 1,

para indicar que la barrera está abierta o cerrada. 4.3 Un determinado programa paralelo tiene definida una "sección crítica" en la que es posible

que entren a trabajar hasta un máximo de n procesos. Escribe las rutinas de lock y unlock para controlar el acceso a esa sección crítica, utilizando instrucciones LL y SC.

Modifica luego la rutina si los n procesos deben entrar a la sección crítica simultáneamente. 4.4 En una aplicación típica Productor/Consumidor se ejecuta el siguiente código (var, listo:

variables compartidas; aux, variable privada):

Productor (uno) Consumidores (tres) for (i=0; i<99; i++) { leer(aux); PONER(aux,var,listo); }

for (i=0; i<33; i++) { SACAR(aux,var,listo); escribir(aux); }

Productor y Consumidores se comunican mediante la variable var; el productor deja ahí el contenido de aux mediante la función PONER, y los consumidores lo recogen en aux mediante la función SACAR. listo es una variable con dos valores: 1, si var contiene un dato para consumir, y –1, si no tiene.

a. Escribe (bajo nivel) las funciones PONER y SACAR; las instrucciones para sincronización son LL y SC.

b. Se quiere imponer cierto orden entre los consumidores: tienen que consumir los datos uno a uno, siempre en el mismo orden. Para ello, se quiere utilizar un vector de cerrojos, en el que cada proceso avisará al siguiente cuándo le toca consumir un dato. Escribe (b1) una rutina para asignar posiciones del vector de cerrojos a los procesos; y (b2) la nueva función SACAR.

4.5 Una determinada aplicación paralela está compuesta por un productor y dos consumidores. El

productor deja un dato en buf, desde donde uno de los dos consumidores lo cogerá y procesará. Productor y Consumidores sincronizan la producción y el consumo de datos mediante la variable flag. El siguiente código refleja dichas operaciones:

Productor P

Consumidor C1 Consumidor C2 while (true) { while (flag==1) {}; dato = GENERAR_DATO(); LOCK(cerP); flag = 1; buf = dato; UNLOCK(cerP); }

while (true) { while (flag==0) {}; LOCK(cerC1); if (flag==1) CONSUM_DATO(buf); UNLOCK(cerC1); flag = 0; }

while (true) { while (flag==0) {}; LOCK(cerC2); if (flag==1) CONSUM_DATO(buf); UNLOCK(cerC2); flag = 0; }

¿Es correcto el código anterior? ¿En qué fallaría y por qué? ¿En qué podría ser más eficiente? Escribe y justifica todos los cambios que haya que efectuar.

Page 27: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Sincronización de procesos en los computadores SMP ▪ 27 ▪

4.6 Queremos ejecutar en un multiprocesador SMP de P = 16 procesadores el siguiente código:

for (i=0; i<1024; i++) { if (A(i)>0) A(i) = 3*A(i)*A(i) – 5*A(i) – 2 }

Puesto que las iteraciones del bucle son independientes entre sí, pueden ejecutarse en cualquier orden en cualquier procesador (doall). Para repartir las iteraciones entre los procesadores pueden utilizarse diferentes estrategias, tanto estáticas (en tiempo de compilación) como dinámicas (en ejecución). Entre las dinámicas, por ejemplo, tenemos estas tres:

a. Self-scheduling. Las iteraciones se reparten una a una a lo largo de la ejecución del bucle. Para ello, se utiliza un contador que indica hasta qué punto se ha ejecutado ya el bucle. Cada procesador ejecuta la iteración que en ese momento indique el contador; al acabar, ejecutará otra, y otra más... hasta terminar con todas ellas entre todos los procesadores.

Escribe el código a ejecutar en cada procesador para procesar el bucle de esa manera (alto nivel y las funciones de sincronización que necesites).

b. Chunk scheduling. Es una estrategia similar a la anterior, pero en la que se reparten trozos de bucle de más de una instrucción; para este ejemplo, trozos de tamaño N/P iteraciones (N = número de iteraciones, 1024).

Escribe nuevamente el código a ejecutar e indica las ventajas e inconvenientes de esta política en relación a la anterior.

c. Guided self-scheduling. En este caso, el tamaño de los trozos de bucle que se reparten se va reduciendo: lo que queda por ejecutar divido por P. Escribe nuevamente el código a ejecutar e indica las ventajas e inconvenientes de esta política en relación a las anteriores.

4.7 Hemos analizado las funciones básicas para sincronizar procesos que se ejecutan en paralelo: secciones críticas y barreras. Si no se hacen con cuidado, es fácil cometer errores en esas funciones, y generar funciones que funcionan a veces sí y a veces no. Veamos un par de ejemplos.

El primer caso representa una rutina para proteger el acceso a una sección crítica, y el segundo una barrera; ni uno ni otro son adecuados para una máquina SMP. Analiza ambas funciones y explica por qué fallan.

A. Código para proteger una sección crítica (sólo dos procesos; inicialmente, turno = flag = 0)

rutina_exclusion_mutua() { flag[pid] = 1; pid = identificador del proc., 0 o 1 while (turno != pid) { while (flag[(pid+1) % 2] == 1) {}; turno = pid; } <sección crítica> flag[pid] = 0; }

B. Barrera de sincronización

while (cond) { <cálculo> BARRERA (parametros); } BARRERA(int &k1; int p) F&A devuelve el valor antiguo { if (Fetch&Add(k1,1) == p-1) k1 = 0; else while (k1 != 0) {}; }

Page 28: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 28 ▪ Arquitecturas Paralelas 12-13

4.8 Se va a ejecutar en paralelo este bucle en un multiprocesador con muchos procesadores, una iteración en cada procesador:

for (i=0; i<32; i++) { A[i+3] = fun1(B[i]); C[i] = fun2(A[i]); }

Escribe el código que ejecutará cada procesador. 4.9 a. Un productor y un consumidor se comunican mediante una cola de datos "circular"

(cola). El productor genera datos uno a uno, y los deja en la cola siempre que en ella haya 6 datos o menos; en caso contrario, se queda esperando hasta poder cargar el dato en la cola. El consumidor consume los datos de la cola, de dos en dos. Una variable compartida, ndat, indica el número de datos de la cola. Dos punteros, ip e ic, indican, respectivamente, la primera posición libre y la primera posición ocupada de la cola.

Escribe código (alto nivel) para los procesos productor y consumidor. Utiliza las funciones de sincronización que desees, pero define claramente su función y las variables que utilices.

b. Reescribe el código del productor para poder admitir simultáneamente más de un proceso productor. Indica luego qué hay que cambiar en el código si los productores no pueden introducir un segundo dato en la cola hasta que todos hayan cargado el suyo.

c. Reescribe el código del consumidor para poder admitir simultáneamente más de un proceso consumidor. Indica luego qué hay que cambiar en el código si se desea imponer esta relación de orden: los consumidores consumen datos uno a uno siempre en el mismo orden.

4.10 Dos consumidores compiten para conseguir datos de una cola. Para mantener el consumo

equilibrado, se ha puesto un límite: la diferencia entre el que más consume y el que menos no puede ser mayor de 5 datos. Se propone utilizar las siguientes variables: ic, puntero para leer datos de la cola; ndat, número de datos de la cola; dif, diferencia de consumo entre los consumidores. Escribe código (alto nivel) para estos procesos.

¿Puede utilizarse el código que has generado si los consumidores son más de dos? Propón una estrategia para ese caso.

4.11 Una aplicación que se ejecuta en paralelo tiene un trozo de código cuya estructura es de tipo

productor/consumidor, dividido en tres procesos: dos productores y un consumidor. Los productores generan datos uno a uno (función Generar_D()); los datos impares se cargan en la cola CD1 y los pares en la cola CD2. El consumidor consume los datos por parejas, uno de cada cola (Cons_D(...)).

P

ip ic

ndat

GENERAR_DAT() CONSUMIR_DAT(d1,d2)

cola

C

ic

ndat

CONSUMIR_DAT(dat)

cola C0

dif

C1

Page 29: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Sincronización de procesos en los computadores SMP ▪ 29 ▪

Cada cola dispone de un contador, para indicar cuántos datos hay, y de dos punteros, para marcar las posiciones del primer y del último dato.

Escribe código (alto nivel) para los procesos productor y consumidor. Explica claramente todas las variables y funciones de sincronización que utilices.

¿Bajo qué condiciones será eficiente una estructura como la de este ejercicio? ¿Podría bloquearse el sistema?

4.12 Se va a ejecutar este programa entre los 8 procesadores de una máquina SMP:

suma = 0; for (i=0; i<1000; i++) suma = suma + A[i]; for (i=0; i<1000; i++) B[i] = B[i] / suma;

Todos los procesadores colaboran en la ejecución de los dos bucles, y se reparten las iteraciones de la siguiente manera: P0 → 0, 8, 16...; P1 → 1, 9, 17... etc.

Escribe el código que se ejecutará en cada procesador (alto nivel). Utiliza, si lo necesitas, funciones tales como lock, barrier, etc. Una variable local, pid = 0..7, identifica a cada procesador.

4.13 Una imagen en blanco y negro está dividida en M × N píxeles. Cada píxel Pix(i,j)

guarda el nivel de gris de dicho punto, de 0 a k–1. Para conseguir el "histograma de grises" de dicha imagen se ejecuta el siguiente programa en un procesador:

for(i=0; i<M; i++) for(j=0; j<N; j++) { Histo(Pix(i,j)) = Histo(Pix(i,j)) + 1; }

Para acelerar la operación, se va a utilizar un multiprocesador de P procesadores, y se va a

dividir la imagen en P segmentos, cada uno con M/P filas de la imagen original. Una variable local, pid = 0..P–1, identifica a cada procesador.

Escribe el código que debe ejecutar cada procesador para efectuar la operación anterior, e indica razonadamente el speed-up que se puede lograr.

4.14 En una determinada aplicación hay que calcular el máximo de un vector de N elementos. Para

ello se utiliza la siguiente función:

MAX = OBTENER_MAX (dir_comienzo, longitud, paso)

Para acelerar el proceso, se quiere utilizar un SMP de P procesadores, de tal manera que cada procesador procese un trozo del vector (de tamaño fijo N/P).

a. Escribe el código a ejecutar en cada procesador. Utiliza las operaciones de sincronización que consideres necesarias. Una variable local, pid = 0..P–1, identifica a cada procesador.

b. El coste de la función OBTENER_MAX (p.e., el tiempo de ejecución,), es proporcional al tamaño del vector (por ejemplo, el máximo de entre K elementos, K). Supón que el coste de cualquier operación de sincronización es S. Da una expresión para el coste global del proceso, cuando se reparte entre P procesadores. A partir de ella, calcula el número óptimo de procesadores desde el punto de vista del coste. Para el caso particular de N = 1024 y S = 10, calcula el máximo speed-up que puede obtenerse en relación al caso serie.

C

P

CD1(i)

P

CD2(i)

N

M

Pix(i,j)

Page 30: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 30 ▪ Arquitecturas Paralelas 12-13

4.15 En muchas aplicaciones paralelas los procesos utilizan una variable compartida, k, a la que acceden para incrementar su valor en una unidad (por ejemplo, en una barrera). Si el número de procesos es elevado, y todos quieren ejecutar a la vez esa operación, es posible que las latencias sean altas, debido a los conflictos en el acceso a esa variable compartida.

La latencia de la operación puede reducirse si en lugar de utilizar una única variable de sincronización se utilizan más (P), formando con ellas una estructura en árbol.

Escribe código para actualizar un contador entre P = 16 procesos siguiendo esa estrategia 4.16 De cara a paralelizar su ejecución, un determinado algoritmo se ha dividido en 4 tareas, tal

como se muestra a continuación:

for (i=0; i<1000; i++) for (j=0; j<1000; j++) { LEER(file1,&V1); LEER(file2,&V2); LEER(file3,&V3);

V4 = V1 + V2 + V3;

ESCRIBIR(file4,V4); }

/* tX (X = 1,2,3) */

for (j=0; j<1000; j++) LEER(fileX,&VX[j]); /* at4 */

for (j=0; j<1000; j++) { V4[j] = V1[j] + V2[j] + V3[j]; ESCRIBIR(file4,V4[j]); }

Nota: mediante las funciones LEER/ESCRIBIR se leen/escriben los elementos (i,j) de una matriz en un determinado fichero.

Escribe el código que ejecutará cada procesador para ejecutar el bucle original en paralelo; para la sincronización entre procesos, utiliza únicamente barreras.

Haz una estimación del tiempo de ejecución paralelo y del factor de aceleración de acuerdo a estos tiempos: LEER, 8 ciclos; cálculo de V4, 2 ciclos; ESCRIBIR, 8 ciclos; barreras, 10 ciclos.

Finalmente, propón un método más eficiente para repartir la ejecución del bucle original entre cuatro procesadores.

4.17 Una determinada aplicación efectúa cierta transformación sobre el vector A[N] y devuelve

tras ello el número de elementos del vector que han pasado a valer 0. Si éste es menor que un umbral determinado, repite la operación hasta que se supere dicho umbral.

ceros = 0; while (ceros < cerosmin) loop ceros = PROCESAR_VECTOR(A,N); endloop

La operación se puede paralelizar usando P procesadores (pid = 0..P-1). Cada procesador procesa un trozo del vector para calcular el número de ceros correspondiente (no hay dependencias en el procesamiento de los elementos del vector). A partir de ahí resulta sencillo calcular el número total de ceros del vector original.

Escribe el código que ejecutará cada proceso paralelo. Utiliza las funciones de sincronización que desees (no las implementes, pero indica claramente los parámetros que se utilizan).

El tiempo de ejecución de la función PROCESAR_VECTOR es proporcional al tamaño del vector; por simplificar, N. El coste global por proceso asociado a las operaciones de sincronización se puede modelar como P (número de procesos paralelos). Obtén una expresión para el speed-up que se conseguirá; a partir de dicha expresión, calcula el número óptimo de procesos, es decir, aquel que maximiza el speed-up.

4.18 Se ha escrito el siguiente trozo de código para ejecutar en paralelo una determinada tarea en

una maquina SMP. ¿Es correcto? En caso de que haya errores, corrígelos.

for (i=pid; i<pid/N; i++) { A[i] = fun(i); if (A[i]>0) suma = suma + A[i]; } B[pid] = suma * pid;

Page 31: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Sincronización de procesos en los computadores SMP ▪ 31 ▪

4.19 En una determinada aplicación paralela se utiliza un función lógica de 20 variables, de la que se necesita conocer cuántas combinaciones de las variables de entrada dan como resultado 1 (true). Para ello se ejecuta el siguiente bucle:

for (i=0; i<220; i++) num_sol += COMPROBAR_FUN(i);

La función COMPROBAR_FUN(i) devuelve 1 si la representación en binario de i satisface

la función lógica, y 0 en caso contrario. Se quiere ejecutar el bucle for utilizando 16 procesadores. Escribe el código que ejecutará

cada procesador; indica claramente qué tipo de variables utilizas, privadas o compartidas. Haz una estimación del speed-up que se podría obtener.

4.20 En un multiprocesador SMP de P procesadores hay que realizar la siguiente operación con los

N elementos de un vector C: calcular el máximo del vector (MAX), y sumar dicho valor a cada uno de los elementos C(i).

Escribe el código que ejecutará cada procesador (modelo SPMD; variable pid, identificador de cada proceso). Utiliza las funciones de sincronización que consideres adecuadas, e indica la naturaleza de todas las variables que utilices, privadas o compartidas.

4.21 Se ejecuta en paralelo, en una máquina SMP de 10 procesadores, el siguiente programa:

printf("\n Valor de X: "); scanf("%d",&X);

for(i=0; i<1000; i++) for(j=0; j<1000; j++) if (A[i][j] < X) Pix = Pix + 1;

printf("\n Resultado: Pix = %d ", Pix); Escribe el código que ejecutarán los procesadores. El reparto (scheduling) de las iteraciones

es estático consecutivo, en función del pid de los procesos. Utiliza las funciones de sincronización que consideres adecuadas, e indica la naturaleza de las variables que utilices, privadas o compartidas.

Page 32: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones
Page 33: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Consistencia de la memoria en los computadores paralelos ▪ 33 ▪

5.1 Responde a estas cuestiones de manera precisa.

1. Dos procesadores de un sistema paralelo SMP ejecutan las siguientes operaciones de memoria:

P1: LD A ... ST B ... LD B P2: ST C ... ST D ... LD E

La ejecución de las instrucciones se intercala en el tiempo; indica de estas posibles "mezclas" cuáles están de acuerdo con el modelo de consistencia secuencial (SC) y cuáles con el modelo Total Store Ordering (TSO):

a. LD A ST B ST D LD B ST C LD E b. LD A ST C ST D ST B LD B LD E c. ST C LD A LD E ST B ST D LD B d. LD A ST C LD B ST D LD E ST B e. ST C ST D LD A LD E ST B LD B

2. Los procesadores P1 y P2 de un determinado multiprocesador SMP comparten un bloque de memoria que contiene la variable A = 0. P1 modifica el valor de dicha variable a A = 3; después de ello, y antes de que P2 se haya enterado del cambio, éste lee la variable en su valor original A = 0. ¿Es eso posible o hay algún error? ¿Por qué?

3. El modelo de consistencia de un multicomputador indica: a. que los resultados se producen en el mismo orden que en el caso de la ejecución en un

solo procesador. b. que dos instrucciones que tienen entre ellas una dependencia de datos no se pueden

desordenar. c. que si las operaciones de memoria son atómicas pueden desordenarse, y, si no lo son, no. d. restricciones al orden en que se ejecutarán las operaciones de memoria y a la atomicidad

de las mismas.

4. Para mantener la consistencia de un sistema multiprocesador, las instrucciones fence (membar, sync...) se utilizan para... a. proteger el acceso a datos compartidos. b. impedir que el compilador o el hardware reordenen ciertas instrucciones. c. asegurar que la coherencia de datos se mantiene en un sistema de memoria distribuida de

manera similar a como se logra en un sistema de memoria compartida. d. hacer que todas las dependencias de datos se traten como si fueran dependencias “fuertes”.

5.2 Hay que ejecutar estos dos trozos de código en un multiprocesador (valores iniciales, 0):

P1 P2 (1) A = 3; (1) B = ya; (2) ya = 1; (2) C = A;

Demuestra que no es posible conseguir B = 1 y C = 0 en el procesador P2 si el modelo de consistencia del multiprocesador es SC (secuencial).

5.3 Se ejecutan estos dos programas en paralelo (valores iniciales, 0). La operación print es

atómica (imprime todos los datos a la vez; ojo: es una operación de lectura en memoria).

P1 P2 (a) X = 1; (d) Z = 1; (b) Y = 1; (e) T = 1; (c) print X,T; (f) print Z,Y;

Se mantiene el orden de las instrucciones y la atomicidad de los accesos a memoria en todo el sistema. Haz un listado con todos los posibles ordenes de ejecución de las seis instrucciones (a b c d e f, ...) y con los posibles valores de salida (X T Z Y = 1 1 1 1, ...).

Si no se mantuviera la atomicidad ¿cambiarían los valores de salida?

Page 34: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 34 ▪ Arquitecturas Paralelas 12-13

5.4 Se van a ejecutar estos tres programas, en paralelo, en una máquina cuyo modelo de consistencia es el secuencial, SC (valore iniciales, 0):

P1 P2 P3

(1) A = 1; (1) B = 1; (1) C = 1; (2) print B,C; (2) print A,C; (2) print A,B;

¿Podrían obtenerse estos valores en las instrucciones print (B C – A C – A B)?

a. 0 0 – 1 0 – 1 1; b. 1 1 – 1 1 – 1 1; c. 0 0 – 0 0 – 0 0

¿Qué restricción del modelo SC se ha eliminado si la salida es 0 1 – 1 0 – 0 1? 5.5 Un multiprocesador utiliza los modelos de consistencia TSO (Total Store Ordering) y PSO

(Partial Store Ordering). Para estos tres casos, ¿se mantendría siempre la semántica del modelo de consistencia secuencial al ejecutar los programas? ¿por qué?

caso a: P1 P2 (1) A = 1; (1) while (B==0) {}; (2) B = 1; (2) print A; caso b: P1 P2 P3 (1) A = 1; (1) while (A==0) {}; (1) while (B==0) {}; (2) B = 1; (2) print A; caso c: P1 P2 (1) A = 1; (1) B = 1; (2) print B; (2) print A;

5.6 Se ejecutan los siguientes programas en dos procesadores, en paralelo:

Pi (productor) ... aux = GEN_DAT(); while (ya == 1) {}; dat = aux; ya = 1; ...

Pj (consumidor) ... while (ya == 0) {}; aux = dat; ya = 0; CONS_DAT(aux); ...

El programador puede elegir el modelo de consistencia de la máquina entre uno de estos tres:

secuencial (SC), Partial Store Ordering (PSO) y Weak Ordering (WO). Si es necesario, pueden utilizarse instrucciones de tipo MFence para imponer orden estricto en el acceso a memoria.

Para cada modelo, indica si hay que utilizar o no esas instrucciones especiales y dónde.

Page 35: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: La red de comunicación. Paso de mensajes. ▪ 35 ▪

6.1 Diseña un conmutador de tamaño 2×2 para una red multietapa (sin búferes). 6.2 Con un conmutador de 2×2 pueden realizarse cuatro conexiones útiles diferentes. Calcula

cuántas conexiones "útiles" diferentes pueden lograrse con un conmutador de tamaño 3×3, y con uno de tamaño 4×4. Para el primer caso, dibuja las conexiones "entrada → salida" que se pueden realizar.

6.3 a. Teniendo en cuenta conmutadores de grado 2, dibuja una red omega de 8 procesadores e

indica cómo conectar los procesadores 2 y 7. b. ¿Qué conexiones se efectúan entre los procesadores si todos los conmutadores realizan la

misma conexión: (1) pasar sin cruzar o (2) pasar cruzando? c. Dado el siguiente patrón de comunicación: 0→2; 1→3; 2→1; 3→4; 4→5; 5→7; 6→6;

7→0, dibuja las conexiones necesarias en una red Omega e indica si es posible efectuar todas ellas simultáneamente.

d. El coste de los elementos necesarios para formar una red Omega se puede modelar de la siguiente manera: cada conmutador, A × k2, siendo k el número de puertos (el grado) del conmutador, y cada enlace, B. De acuerdo a ello, calcula el coste de una red Omega para P = 256 procesadores, para los casos k = 2, 4, 16 y 256.

6.4 Una red multietapa permite efectuar comunicaciones de tipo "permutación", en las que

simultáneamente cada procesador se comunica con un módulo de memoria diferente (por ejemplo, P0 con M2, P1 con M6...) (o los procesadores entre sí). Sin embargo, una red Omega no permite cualquier tipo de permutación. Comprueba si estos patrones de comunicación pueden ejecutarse sin conflictos sobre una red Omega de 8 nodos:

a. rotación: 0→1→2→...6→7→0 b. barajado: (an–1, an–2, ...a1, a0) → (an–2, ..., a1, a0, an–1) (direcciones) c. inversión: (an–1, an–2, ..., a1, a0) → (a0, a1, ..., an–2, an–1)

6.5 Mediante conmutadores pueden generarse

múltiples topologías para la red de comunicación. Por ejemplo, la de la figura se conoce como butterfly.

¿Cómo se escoge un camino para llegar al destino en esta red? Pon un ejemplo. ¿A qué se "parece" esta red?

6.6 a. Dibuja una red Omega para 8 procesadores. En un momento dado se produce una

comunicación simultánea del procesador 4 al 6 y del 6 al 7. Indica el recorrido efectuado por los mensajes. Caso de existir algún problema, explícalo y propón una solución.

b. Supón que el conmutador del segundo nivel por donde pasa el mensaje que va del procesador 4 al 6 se estropea. ¿Hay alguna posibilidad de poder seguir efectuando la comunicación? Pon un ejemplo.

c. ¿Cuántos conmutadores y cuántos enlaces hay que añadir a la red anterior para construir una red de 16 procesadores? Explica la respuesta.

d. Supón ahora que la red de comunicación es un toro 3×3. Indica el camino recorrido (DOR) por los mensajes simultáneos del caso anterior (4→6 y 6→7). ¿Algún problema?

e. Indica el registro de encaminamiento de un mensaje que fuera del nodo 0 al nodo 8 en este toro, y dibuja sobre la red el camino que recorrerá el mensaje si el encaminamiento es estático de tipo "primero-X-luego-Y".

f. Se estropea el primer enlace que debe recorrer el mensaje. ¿Es posible seguir manteniendo la comunicación? ¿Bajo qué condiciones?

0

2

4

6

1

3

5

7

0

2

4

6

1

3

5

7

Page 36: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 36 ▪ Arquitecturas Paralelas 12-13

6.7 Para analizar y comparar diferentes topologías de red pueden utilizarse múltiples parámetros. Queremos comparar estas siete topologías —hipercubo, malla 2D, toro 2D, malla 3D, toro 3D y fat tree de grado 2 y 4— utilizando estos parámetros: distancia media, diámetro, número de enlaces y ancho de banda de la bisección.

Calcula la expresión algebraica de cada parámetro para cada red y dibuja cómo evoluciona cada parámetro en función del número de nodos (por ejemplo, hasta P = 4096 nodos).

6.8 Considera un toro 2D y un hipercubo de 256 nodos. Calcula el tanto por ciento de los nodos

accesibles desde uno dado con una distancia d menor o igual que la mitad de la distancia media de la red. ¿Y a distancia menor o igual que la distancia media?

6.9 Una red de comunicación de 64 nodos debe enviar un mensaje del nodo 9 al 52. Calcula el

registro de encaminamiento del mensaje (routing record) y los nodos intermedios por los que pasará si la red es: (a) un hipercubo; (b) una malla 2D; y (c) un toro 3D. Considera un encaminamiento estático en orden de dimensiones.

6.10 Una determinada aplicación se ejecuta en un MPP de 256 nodos con una red de comunicación

en forma de toro 2D. El patrón de comunicación de la aplicación genera mensajes con probabilidad decreciente en función de la distancia:

distancia: 1 2 3 4 >4 probabilidad: 0,4 0,3 0,2 0,1 0

Calcula la distancia media de este patrón de comunicación. Si la comunicación con los nodos a una determinada distancia es equiprobable, calcula

cuántas veces más mensajes recibe el nodo i a distancia 1 que el nodo j a distancia 4. 6.11 Calcula el ancho de banda de la bisección de una red de 64 nodos con topología (a)

hipercubo, (b) malla 2D, y (c) toro 2D; los enlaces son de 16 bits y el ciclo de transmisión de 4 ns. En base a ello, indica el máximo número de paquetes de 128 bytes que pueden procesarse en la red por nodo y segundo de manera sostenida (con un patrón de comunicación aleatorio).

6.12 Un multiprocesador de 16 nodos utiliza una red de comunicación como la de la figura: un

anillo en el que cada procesador se comunica con otros 3 procesadores, los dos vecinos y el situado al otro extremo del diámetro.

Calcula la distancia media y el diámetro de dicha red con 16 procesadores. Generaliza el resultado para el caso de P procesadores (potencia de 2).

6.13 Un multiprocesador de 64 nodos utiliza un hipercubo como red de comunicación. Indica la

máxima distancia entre dos procesadores de esta red, así como el/los nodo(s) que se encuentra a dicha distancia del nodo 39.

Para un mensaje que vaya del nodo 10 al 45, indica la distancia que deberá recorrer en la red y los nodos intermedios por los que pasará si el encaminamiento es tipo DOR (empezando por la dimensión más alta).

Page 37: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: La red de comunicación. Paso de mensajes. ▪ 37 ▪

6.14 La red de comunicación de un multicomputador de 64 procesadores es un hipercubo. Los enlaces del mismo trabajan a 2 Gbit/s. Calcula los siguientes parámetros de dicha red:

a. Número de enlaces de cada nodo de la red y número total de enlaces de la red, así como distancia media y diámetro de la red.

b. Ancho de banda de la bisección (en Gbyte/s), y, en función de ello, número máximo de paquetes de 256 bytes que puede inyectar por segundo cada nodo de la red en condiciones de tráfico aleatorio.

c. Se pueden utilizar diferentes parámetros para medir la "complejidad" de una determinada topología de red; por ejemplo, K = Num_Enl_Bisecc / Num_Total_Enlaces. Utiliza este parámetro para comparar un hipercubo con un toro de 2 dimensiones de las mismas características.

d. Registro de encaminamiento, distancia a recorrer y nodos intermedios por los que debe pasar un mensaje que se dirija en el hipercubo del nodo 43 al nodo 28, utilizando encaminamiento DOR.

6.15 La red de comunicación de un MPP de 4×6 nodos tiene la siguiente topología:

a. Calcula el diámetro, la distancia media, y el número de enlaces de la bisección de la red. b. Indica cómo se calcula el registro de encaminamiento (routing record) de un paquete que

va del nodo i al j. Como caso particular, aplícalo a los nodos 7 y 23 (7→23), e indica cómo va variando el registro de encaminamiento al avanzar el mensaje, si se utiliza un encaminamiento estático tipo primero-X-luego-Y (DOR).

c. Siendo el encaminamiento estático (DOR) y si el paso de mensajes se efectúa en modo wormhole, ¿podría ocurrir que se bloqueara la red (deadlock)? Justifica la respuesta.

6.16 Entre los primeros computadores paralelos el ILLIAC IV

fue uno de los más famosos, y su red de comunicación tenía la topología que aparece en la figura. Calcula la distancia media y el diámetro de esta red para el caso de 16 procesadores.

Puede comprobarse fácilmente que una red ILLIAC IV es isomorfa a un anillo con cuerdas. Consideración el patrón de conexionado, redibuja la red en forma de anillo con cuerdas.

¿Cómo se encaminan los mensajes en esa red? Pon un ejemplo.

6.17 En la red bidimensional de la figura, en forma de malla,

cada nodo se conecta con sus 8 vecinos (salvo los del borde de la red). Calcula el diámetro y la distancia media de esta red (de 4×4). Indica un algoritmo de encaminamiento para la misma. Pon un ejemplo de utilización del mismo.

0 2 3 1

4 6 7

5

8 10

11

9

12 14

15

13

7

23

Page 38: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 38 ▪ Arquitecturas Paralelas 12-13

6.18 Los enlaces de la red de comunicación de un sistema MPP de 4096 procesadores son de 1 byte (flit) y de 800 MB/s. Los paquetes que se envían por la red contienen 60 bytes de datos y 4 bytes de cabecera. Procesar el primer flit de cabecera cuesta 2 ns en cada encaminador.

a. Calcula la latencia máxima y media de un paquete, sin tráfico en la red, para cada una de estas topologías de red y mecanismos de paso de mensajes:

- hipercubo – malla y toro 2D – malla y toro 3D – fat tree de grado 2 y 4 - store-and-forward – cut-through

b. Hay que mandar un mensaje de 800 bytes, en un toro 3D y en modo cut-through, a un nodo a la distancia media. El mensaje se divide en paquetes, y éstos se envían uno tras otro, dejando entre paquete y paquete un intervalo de 100 ns. Calcula la latencia de transmisión de dicho mensaje.

c. ¿Cuál sería la latencia del paquete anterior si en lugar de conmutación de paquetes la red utilizara conmutación de circuitos? Supón que el mensaje sonda es de 1 flit.

6.19 Considera un multicomputador con una red de topología hipercubo (512 procesadores,

enlaces de 4 Gbit/s). En condiciones de tráfico nulo, se han enviado una serie de paquetes del mismo tamaño entre nodos de la red a diferente distancia, y se han obtenido los siguientes datos:

Distancia Tiempo de transmisión en la red (ns)

2 136 4 146 8 166

A partir del análisis de dichos datos, calcula lo siguiente:

a. Mecanismo de transmisión de los paquetes en la red. Justifica tu respuesta. b. Tiempo de procesamiento del flit de cabecera (tiempo de routing) en los encaminadores

de mensajes, y tamaño en flits de los paquetes transmitidos. 1 flit = 1 byte. c. Tiempo de transmisión para el tercer caso (distancia 8) si el mecanismo de

encaminamiento de los paquetes fuera “el otro”. 6.20 Un multicomputador dispone de una red de comunicación en forma de toro de 8×8. Los

canales de comunicación son de 1 byte (el tamaño del flit). Los paquetes son de 64 bytes. El encaminamiento de los mensajes de tipo cut-through/wormhole, y el tiempo de routing o encaminamiento en cada encaminador (router) es de 2 ns.

Se ha analizado la latencia media de los paquetes en esta red en función del tráfico cuando éste es aleatorio (en tiempo y destino) y se ha obtenido la siguiente gráfica. El tráfico está indicado como % de la carga máxima de acuerdo a la bisección de la red.

En base a los datos de la gráfica, calcula:

a. Ancho de banda de los enlaces, en Gbit/s. b. Latencia media a tráfico cero si la comunicación fuera tipo store-and-forward.

Page 39: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: La red de comunicación. Paso de mensajes. ▪ 39 ▪

c. El tráfico máximo obtenido a partir de la bisección de la red no es realista, porque a esas cargas la latencia de los paquetes tiende a infinito. En base a los datos de la gráfica, calcula la cantidad máxima de bytes por segundo que puede inyectar en la red cada procesador si la latencia media de los paquetes no debe superar en un 15% la latencia a tráfico 0.

6.21 Considera una red de 64 procesadores, con enlaces de 2 Gbit/s y con topología de malla

(8×8). Los encaminadores de dicha red tienen un tiempo de encaminamiento (routing) de 4 ns. Un flit (mínima cantidad de información necesaria para poder efectuar el encaminamiento) son dos bytes. El encaminamiento es estático DOR. En un determinado momento en la ejecución de un programa se debe enviar un paquete de 256 bytes desde el nodo 14 al 50. Se estima que, dado el tráfico existente en la red, el tiempo total que los paquetes esperan en los búferes de la red es del orden de 50 × d ns, siendo d la distancia a recorrer.

a. Calcula el registro de encaminamiento del paquete y la latencia de la operación anterior, en los dos siguientes casos (a) store-and-forward y (b) cut-through.

b. Se ha analizado el comportamiento del programa anterior y se ha visto que, en media, cada procesador ejecuta 2 ms de cálculo, envía un mensaje a otro nodo, y se queda a la espera de una repuesta. Las latencias de la comunicación son las que acabas de calcular. Los mensajes se responden inmediatamente, sin pérdida de tiempo. Calcula el overhead que añade la comunicación al tiempo de cómputo en cada uno de los dos casos anteriores, SF y CT. ¿Qué conclusión puedes extraer del resultado?

6.22 Una red de comunicación es jerárquica si está estructurada como una jerarquía de niveles, en

la que, tal vez, cada nivel utiliza una topología diferente. Considera una red de este estilo en la que se unen varias redes Omega de 6 etapas (conmutadores de 2×2) en un hipercubo de 4 dimensiones. Es decir, los procesadores se han divido en conjuntos; dentro de cada conjunto se utiliza una red Omega y para comunicar los conjuntos un hipercubo.

La conexión entre conjuntos se hace a través de un nodo especial de cada red Omega, el P0 (es decir, los nodos P0 no son procesadores, sino nodos especiales de comunicación)

Responde a las siguientes cuestiones sobre la red propuesta:

a. ¿Cuántos procesadores se conectan dentro de cada conjunto, es decir, en cada red Omega? ¿Cuántos en la red en total? ¿De cuántas dimensiones sería un hipercubo del mismo número de procesadores? ¿Cuál sería el ancho de banda de la bisección de dicho hipercubo si los enlaces son de 50 MB/s?

b. ¿Cuál es el diámetro de la red? ¿Cuántos procesadores se encuentran a esa distancia de uno dado? ¿Y cuál es la distancia media de la red?

c. El patrón de comunicación de una aplicación en esta red tiene las siguientes probabilidades:

dentro del conjunto: 0,6 a distancia 1 en el hipercubo: 0,25 a distancia 2 en el hipercubo: 0,10 a distancia 3 en el hipercubo: 0,05 más allá: 0

Calcula la distancia media de este patrón de comunicación en esta red. d. Los enlaces de la red son de 4 bytes (un flit) y la longitud de los mensajes que se

transmiten es de 256 bytes (incluida la cabecera). Haz una estimación de la latencia esperada en un mensaje que recorre la distancia media anterior, en condiciones de tráfico nulo, en los siguientes dos casos: (1) store-and-forward y (2) cut-through (un ciclo para transmitir un flit y un ciclo para procesar la cabecera).

e. Propón un algoritmo de encaminamiento para esta red que envíe los mensajes entre fuente y destino por el camino más corto. Pon un ejemplo del mismo.

Page 40: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 40 ▪ Arquitecturas Paralelas 12-13

6.23 Un multiprocesador de 64 procesadores utiliza como red de comunicación un toro de dos dimensiones. En un momento determinado, el procesador (0, 1) debe efectuar el producto escalar de dos vectores (∑ai bi).

Los dos vectores son de 4 elementos y están distribuidos por la red en los siguientes nodos:

a0, b0 → P(1, 6) a1, b1 → P(3, 6) a2, b2 → P(6, 1) a3, b3 → P(1, 2)

La operación se realiza de la siguiente manera. El procesador de origen —P(0, 1)— envía la orden de operar al procesador que contiene a0 y b0; éste multiplica sus datos y envía el resultado al siguiente (a1, b1), y así sucesivamente; el último devuelve el resultado acumulado, el producto escalar, al procesador que solicitó la operación.

Se piden los siguientes resultados:

a. Indica el grado, el número de enlaces y la máxima distancia (diámetro) de esta red. Da un par de nodos que estén a dicha distancia. ¿Cuál es el número de nodos que están a máxima distancia de uno dado? ¿Y si la red fuera de tamaño 7×7?

b. Los paquetes que se intercambian son de 8 bytes, si son de control, o de 32 bytes, si incluyen datos. Los canales de comunicación son de 1 byte, el mismo tamaño que el flit. La cabecera de los mensajes es de un flit. El tiempo de encaminamiento es de 10 ns y los enlaces de 200 MByte/s. Se utiliza encaminamiento estático de tipo DOR.

Por otra parte, el tiempo de cálculo de la operación citada en cada procesador es de 1 microsegundo.

Los mensajes utilizados para resolver el problema recorren un anillo, que comienza en el nodo (0, 1) y termina en el mismo nodo. Calcula los registros de encaminamiento (routing record) de cada mensaje, y dibuja en la red el camino recorrido.

A partir de ello, calcula el tiempo total de esta operación en estos dos casos: (1) comunicación en modo store-and-forward; y (2) comunicación en modo wormhole.

c. El enlace que une los procesadores (1, 6) y (2, 6) está estropeado. ¿Puede efectuarse todavía la comunicación anterior? ¿Cómo? ¿Con qué coste añadido?

6.24 La red de comunicación de un determinado computador paralelo de 512 procesadores es un

toro de tres dimensiones (8×8×8), en la que los enlaces son de 10 Gbit/s. Calcula de manera razonada los siguientes datos para dicha red:

▪ Diámetro y distancia media (aprox.) ▪ Ancho de banda de la bisección (en GByte/s), y, en consecuencia, máximo número de

paquetes de 128 bytes que puede enviar cada nodo por segundo, de manera sostenida, en condiciones de tráfico aleatorio.

▪ Para un mensaje que va desde el nodo 0 al nodo 404, registro de encaminamiento, distancia a recorrer, nodos intermedios por los que pasará y cómo se va actualizando el registro de encaminamiento, siendo el encaminamiento DOR.

Los nodos 0 y 404 de la red anterior ejecutan el siguiente bucle:

Nodo 0 Nodo 404

do i = 1, 50 do i = 1, 50 <calcular> <esperar mensaje de 0> <enviar datos a 404> <calcular> <esperar respuesta del 404> <enviar datos a 0> enddo enddo

Los mensajes que se envían entre P0 y P404 son de 128 bytes, los enlaces de la red son de 1 byte y el flit es también 1 byte. El tiempo de routing en los nodos intermedios es de 3 ns.

El cálculo que se efectúa en cada procesador, junto con las funciones ligadas a la creación y a la recepción de los paquetes, tiene un coste promedio de 1 μs. También se sabe que a lo largo del recorrido los mensajes suelen pararse por falta de recursos un promedio de 50 ns por viaje.

Utilizando los datos anteriores, estima el tiempo de ejecución del bucle cuando la comunicación se efectúa: (a) en modo store-and-forward; y (b) en modo cut-through. ¿En cuánto se reduce el tiempo de ejecución en el caso (b) frente al (a)?

Page 41: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: La red de comunicación. Paso de mensajes. ▪ 41 ▪

6.25 El departamento de informática de una empresa puntera tiene que asesorar en la compra de un computador paralelo de 1024 procesadores. Dispone de dos alternativas, diferentes en estructura y coste:

máquina topología comunicación tr (routing time) enlaces (B) coste

HAL-2020 hipercubo store-and-forward 4 ns 4 Gb/s 2 Matrix++ malla 2D cut-through 6 ns 4 Gb/s 1,5

Las aplicaciones que van a ejecutarse en dicha máquina son de tres tipos:

▪ A1: cada nodo se comunica con sus vecinos (d = 1) ▪ A2: la comunicación es aleatoria en tiempo y espacio (d = d. media) ▪ A3: la comunicación es muy frecuente, densa, y a largas distancias (d = diámetro)

a. Para cada máquina, obtén los parámetros típicos de distancia y el ancho de banda de la bisección.

b. Calcula el tiempo de comunicación de un paquete de 16 bytes, con la red vacía, en cada máquina y para cada aplicación.

c. Justifica, con razonamientos técnicos, qué máquina recomendarías comprar, y por qué, para cada una de las aplicaciones anteriores. En base a ello, y siendo las tres aplicaciones de igual importancia y coste computacional, indica la máquina que finalmente escogerías.

6.26 Origin 2000 ha sido uno de los multiprocesadores más populares de Silicon Graphics (SGI).

Cuando el número de procesadores es elevado, la red de comunicación es un árbol en el que las hojas del árbol son conjuntos de 16 procesadores conectados en un hipercubo. En la siguiente figura aparece un ejemplo de este tipo de red (nota: no se ve la estructura completa del árbol, sino la correspondiente a dos nodos de cada hipercubo; para completar el árbol, habría que repetir la estructura para cada uno de los 16 nodos).

a. Sea una máquina de estas características con 64 nodos. Calcula el diámetro y la distancia media de esta red. ¿Cuántos nodos están a distancia máxima de uno dado? ¿Cuáles son?

b. Considera el etiquetado de los nodos que aparece en el dibujo. Por ejemplo, 000000 a 001111 son los nodos del hipercubo H1. Define una función de encaminamiento para ir de un nodo i a un nodo j. De acuerdo al encaminamiento diseñado, indica los nodos intermedios por los que pasará un mensaje que vaya del nodo 001001 al nodo 101111.

c. Se envía un mensaje entre los nodos 000000 y 011011. Calcula el tiempo de envío del mensaje en las siguientes condiciones: tiempo de encaminamiento (routing), 3 ns; ancho de banda de los enlaces, 250 MB/s; longitud del mensaje, 128 bytes (= flits); mecanismo de paso de mensajes, (a) store-and-forward y (b) wormhole.

d. El ancho de banda del nivel superior de encaminadores del árbol (L2), sumados todos los enlaces, es de 2,5 GByte/s. Los procesadores se comunican entre ellos de manera aleatoria (equiprobable). Calcula el máximo número de mensajes (de 128 bytes) por segundo que puede generar cada procesador sin saturar la red.

proc. 0–15 proc. 48–63

ÁRBOLES→

L11 L12

L2

proc. 32–47 proc. 16–31

H0 H1 H2 H3

Page 42: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 42 ▪ Arquitecturas Paralelas 12-13

6.27 Un computador paralelo de 64 nodos dispone de una red de comunicación cuadrada en forma de malla. Las cuatro esquinas de la red están ocupadas por nodos especializados en operaciones de entrada/salida. Un procesador que quiera, por ejemplo, escribir un mensaje en una impresora debe enviar dicho mensaje a uno de los nodos de las esquinas.

a. Calcula, para el caso de la red citada, la distancia máxima y la distancia media que deberá recorrer un mensaje para llegar a la impresora. Generaliza el resultado para el caso de una malla rectangular de tamaño k1×k2. ¿Cuál sería la posición más adecuada de los cuatro procesadores especializados en entrada/salida si se deseara minimizar la distancia recorrida por los mensajes? ¿Por qué?

b. El procesador (2, 4) quiere imprimir un mensaje. Indica el registro de encaminamiento de dicho mensaje, y por qué puntos de la red pasará.

c. El mensaje que quiere imprimir el procesador (2, 4) es de 10 000 bytes. La comunicación es de tipo conmutación de paquetes de 128 bytes: 120 bytes de datos y 8 bytes de control. Los enlaces, y los flits, son de un byte. La latencia del encaminador de mensajes o router es de 4 ns y los enlaces son de 200 MB/s. El protocolo de comunicación es el siguiente: se envía el primer paquete; cuando el paquete se ha recibido en destino se devuelve un paquete de control (ACK, 8 bytes); se repite el proceso hasta enviar todos los paquetes.

Calcula el tiempo necesario para enviar todo el mensaje, siendo la comunicación en modo (1) store-and-forward; y (2) cut-through.

d. ¿Y si el modo de comunicación fuera conmutación de circuitos? (el mensaje sonda, 8 bytes, avanza en modo store-and-forward).

6.28 El encaminamiento dinámico de los mensajes permite una mejor utilización de la red de

comunicación en aquellos casos en que el uso de ésta no es muy regular, o para solventar problemas puntuales de congestión.

Considera una malla 2D de 6×6 nodos en la que los procesadores se comunican siguiendo un patrón que se conoce como “matriz transpuesta”: el nodo de coordenadas (i, j) se comunica exclusivamente con el de coordenadas (j, i). Haz una esquema del tráfico esperado en la red (dibuja los caminos utilizados) suponiendo que se utiliza encaminamiento estático X-Y. Explica en qué medida mejoraría la latencia de los mensajes y el throughput de la red si se pudiera utilizar encaminamiento adaptativo.

6.29 Las redes que hemos visto permiten cierto nivel de tolerancia a fallos. Por ejemplo, considera

una malla de 6×6 en la que se estropee el enlace entre los nodos (3, 3) y (3, 4). La red utiliza encaminamiento estático. ¿Qué tipo de estrategia podría utilizarse para seguir manteniendo comunicados, por ejemplo, los nodos (3, 0) y (3, 5), considerando que la información sobre fallos en la red es local (en el propio nodo)?

6.30 En la siguiente figura aparece una malla de 8×8. La comunicación entre los procesadores

utiliza encaminamiento adaptativo o dinámico, y para evitar bloqueos (deadlock) se utiliza el mecanismo conocido como turn model (versión west-first). Algunos de los enlaces de la red no pueden utilizarse por estar ocupados o fuera de uso.

a. Estudia los tres ejemplos de comunicación de la figura e indica, razonadamente, si los caminos elegidos son posibles o no. Si no son correctos, corrígelos; si sí lo son, propón una alternativa a los mismos.

b. Propón un camino más corto para M2. c. Dibuja un camino mínimo para enviar un mensaje, de

acuerdo a este tipo de encaminamiento: → del nodo (3, 5) al nodo (1, 2) → del nodo (7, 5) al nodo (6, 5) → del nodo (4, 0) al nodo (3, 0)

(0, 0) (0, 7)

(7, 0) (7, 7)

M1

M3

M2

Page 43: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: La red de comunicación. Paso de mensajes. ▪ 43 ▪

6.31 Entre dos procesadores de una malla bidimensional existen múltiples caminos. Si el encaminamiento es estático, DOR, sólo se utiliza uno de ellos. Un encaminamiento adaptativo podría sin embargo utilizar otros para, por ejemplo, evitar algún fallo en la red o una zona de alto tráfico. ¿Cuántos caminos distintos existen en una malla entre los nodos A(a1, a0) y B(b1, b0)? Dibuja esos caminos en una malla para el caso particular en que el registro de encaminamiento sea [3, 2]. Para el caso particular anterior, ¿qué enlaces generarían más problemas en caso de estropearse?

6.32 Un patrón típico de comunicación entre procesadores es el conocido como multicast, en el

que un procesador manda un mismo mensaje a un subconjunto de K procesadores de la red. En lugar de enviar K mensajes, se envía un único mensaje especial con múltiples direcciones, que va replicándose en los encaminadores de mensajes intermedios para distribuirse a todos los destinos. Considera el siguiente multicast en una malla de 8×8:

(2,4) → (0,0), (0,1), (0,5), (1,0), (1,6), (3,0), (4,4), (4,6), (5,0), (5,2), (6,4).

Dibuja en una malla los caminos que seguirán los mensajes (a) si se desea minimizar el número de enlaces utilizados, o (b) si se desea minimizar la distancia recorrida.

6.33 El comportamiento de la red de comunicación de un computador paralelo puede analizarse

mediante la teoría de colas. El modelo más sencillo para las colas de los encaminadores de la red es el que se conoce como M/M/1, en el que se utilizan estos dos parámetros:

µ: nº de mensajes que salen del sistema por segundo (inverso del tiempo de servicio). λ: nº de paquetes que entran al sistema por segundo.

a partir de los cuales, aplicando la teoría de colas, podemos obtener:

• nivel de utilización del encaminador: ρ = λ / µ • tiempo de estancia de un mensaje en el encaminador: T = (1/µ) / (1–ρ) • probabilidad de tener k mensajes en espera: P(k) = (1–ρ) ρk • población media en las colas de espera: N = ρ / (1–ρ)

El tiempo de servicio de los encaminadores de una determinada red es de 125 ns (para encaminar y transmitir el paquete), y se reciben en el encaminador 1 600 000 paquetes por segundo (en media).

En base a la teoría de colas, calcula para ese sistema: (1) utilización de los encaminadores; (2) número promedio de mensajes en el encaminador; (3) probabilidad de overflow de las colas de espera si sólo pueden contener 3 paquetes; y (4) tiempo medio de espera de los mensajes en un encaminador, y, por tanto, latencia de un paquete que va a un nodo a distancia d = 8.

Finalmente, dibuja una curva para indicar cómo varía el tiempo de espera en el encaminador en función de ρ al variar el ritmo de llegada de los mensajes.

6.34 Un determinado multicomputador MPP está formado por 4096 procesadores estructurados en

una malla de tres dimensiones. Los enlaces de la red de comunicación son de 2 Gb/s, los paquetes son de 64 bytes (=flits) y el tiempo de procesamiento del flit de cabecera de los paquetes es de 4 ns. La comunicación es de tipo cut-through (DOR).

a. Calcula el ancho de banda de la bisección de la red en dicha máquina, la distancia máxima y la distancia media. Dado el nodo 378, ¿cuál es la distancia máxima que pueden recorrer los paquetes que envíe dicho nodo? ¿qué nodo o nodos se encuentran a dicha distancia máxima? Dado que la red no es simétrica, las distancias dependen de la posición de cada nodo; ¿cuál es la mínima de las distancias máximas? ¿qué nodo o nodos de la red tienen dicha distancia máxima?

b. Estamos analizando la posibilidad de añadir enlaces exteriores entre las caras de la malla y convertir la red en un toro. Ello trae consigo una reducción en la distancia media de la red, pero, como ahora es posible que se produzcan deadlocks, el mecanismo de encaminamiento deberá ser algo más complejo; es decir, el tiempo de encaminamiento de

Page 44: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 44 ▪ Arquitecturas Paralelas 12-13

los paquetes será más alto. En concreto, ¿cuál es el valor máximo de tr que podemos admitir para que siga siendo preferible el toro frente a la topología inicial en malla en lo que a la latencia de las comunicaciones se refiere?

6.35 Resuelve las siguientes cuestiones:

1. ¿Cuál es la distancia media de una red multietapa tipo Omega para 32 procesadores? ¿Y el diámetro? ¿Qué consecuencia puedes extraer de esos datos?

2. Un patrón de comunicación tipo perfect shuffle comunica el nodo 24 de una red Omega de

32 procesadores con el nodo... 3. ¿Cuál es la diferencia básica entre una red Omega y, por ejemplo, un toro o un hipercubo? 4. Un pequeño multicomputador está compuesto por 8 nodos que forman un cubo. Cada nodo

tiene 5 procesadores, cuatro de cálculo y uno de comunicaciones, conectados entre sí mediante un crossbar. Los enlaces son de 1 Gbit/s. Calcula (a) la distancia media de la red de comunicación de dicho multicomputador; y (b) el ancho de banda de la bisección.

Escribe un algoritmo de encaminamiento para esta máquina, que permita enviar paquetes del nodo X (x4, x3, x2, x1, x0) al Y (y4, y3, y2, y1, y0); por ejemplo, del procesador 01001 al procesador 11010.

5. En un toro de 32×32 nodos, ¿cuál es la distancia entre los nodos 900 y 257? En una máquina

cuya red de comunicación es la anterior, se ejecuta una aplicación en la que el tráfico de mensajes tiene las siguientes características: 50% a nodos vecinos; 30% a nodos a la distancia media; y 20% a nodos a la máxima distancia. Calcula la distancia media de los paquetes de dicha aplicación.

6. Queremos comparar dos redes de topología diferente: una malla 3D con un toro 2D. Siendo

el resto de parámetros los mismos, ¿a partir de qué número de procesadores es mejor el ancho de banda de la bisección en un caso que en el otro?

7. Un multicomputador utiliza una red de comunicación en la que los enlaces son de 1 Gbit/s y

la comunicación es store-and-forward. Mandar un paquete de 32 bytes a un nodo a distancia 6 cuesta 1,56 µs. ¿Cuántas veces más rápida sería dicha transmisión si la comunicación fuera cut-through? (en condiciones de tráfico 0, flits de 8 bits, 1 flit de cabecera).

8. El sistema de comunicación de un multicomputador emplea los siguientes tiempos (en ns)

para enviar un paquete de L = 128 bytes a distancia d = 10, siendo el ancho de banda de los enlaces B = 1 Gbit/s: generación del paquete, 200 + 10×L; transmisión del paquete, 5×d + L/B; recepción del paquete, 200 + 10×L.

Si mejoramos la velocidad de transmisión de los enlaces hasta 4 Gbit/s, ¿cuántas veces más rápido será el proceso completo de comunicación entre emisor y receptor? Justifica la respuesta que obtengas.

9. En una red de comunicación se utilizan canales virtuales. Por tanto:

a. Puede usarse encaminamiento dinámico en mallas e hipercubos, pero no en toros. b. Hay que añadir un nuevo enlace por cada canal virtual. c. Hay que estructurar los búferes en clases y multiplexar el uso de los enlaces. d. Dependiendo de la topología de la red, en unos casos es necesario añadir enlaces (toro) y

en otros no (malla). 10. ¿Qué distancia hay entre los nodos 13 y 44 de un hipercubo de 6 dimensiones? ¿Cuántos

nodos están a dicha distancia del nodo 13?

Page 45: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: La red de comunicación. Paso de mensajes. ▪ 45 ▪

11. Un multicomputador utiliza comunicación de tipo wormhole. En un momento de tráfico elevado, la latencia de los paquetes resulta ser un 20% más alta que en la situación de tráfico nulo. Si la comunicación fuera de tipo cut-through: a. La latencia sería similar, ya que ambos modos de comunicación son equivalentes. b. La latencia sería mayor, ya que, habiendo tráfico en la red, los recursos de la misma se

utilizan de manera más eficiente en modo wormhole. c. La latencia sería menor, ya que los paquetes avanzan de forma segmentada en el caso

cut-through. d. La latencia sería menor, ya que los paquetes que se paran se guardan en los búferes de

los encaminadores, para no estorbar al resto. e. Las conclusiones anteriores no son correctas.

12. ¿Verdadero o falso? ¿Por qué?

▪ Cuando el tráfico es aleatorio, el tráfico necesario para saturar la red de comunicación de un multicomputador es mayor si la comunicación es en modo CT que si es en modo WH.

▪ Para formar canales virtuales hay que estructurar en colas los búferes de los encaminadores, una cola por cada canal virtual (y, tal vez, añadir más búferes).

▪ Cuando se utilizan canales virtuales, el tiempo de encaminamiento (routing) de los paquetes es menor, ya que se evita que los paquetes se detengan.

▪ Turn model es una estrategia de encaminamiento que permite encaminamiento adaptativo sin bloqueos en las mallas (pero no en los toros).

▪ La cantidad de paquetes que puede gestionar la red sin saturarse es directamente proporcional a la distancia que recorren los paquetes (crece con la distancia).

13. La red de comunicación de un multicomputador de 128 procesadores es un hipercubo. La

comunicación es de tipo cut-through, de acuerdo a los siguientes parámetros: ancho de banda de los enlaces, 0,5 Gbit/s; tiempo de procesamiento de los paquetes en los encaminadores, 3 ns; flit = byte.

Se envía un paquete de 128 flits del nodo P42 al nodo P115. El tiempo de generación del paquete e inyección en la red es de 1 µs, y el mismo tiempo se necesita en el receptor para recoger el paquete. Calcula qué porcentaje del tiempo de comunicación corresponde al transporte físico en la red (no hay tráfico en la red).

14. La red de comunicación de un multicomputador utiliza

encaminamiento adaptativo de tipo west-first. Para los dos casos de la figura, calcula y dibuja cuántos caminos mínimos diferentes puede utilizar un paquete que va de P1 a P2.

15. Hemos analizado el comportamiento de la red de

comunicación de un multicomputador, utilizando tres modos diferentes de control del flujo de información entre encaminadores, y hemos obtenido la latencia de los paquetes en función del tráfico, tal como aparece en la figura.

¿Qué técnica de paso de información se ha utilizado en cada caso? ¿Por qué? Razona tus respuestas.

16. Un computador de 256 procesadores utiliza una red Omega para la comunicación. Los

conmutadores son de tamaño 4×4 (4 entradas y 4 salidas). ¿Cuántos conmutadores se necesitan para formar la red? ¿Qué tipo de "red" es en realidad cada conmutador? ¿Por qué? Se envía un paquete desde el procesador 156 al 122. ¿Qué puertos de salida utilizará en cada uno de los conmutadores para llegar al destino?

P1

P2

P2

P1

late

ncia

(s)

tráfico (B/s)

(a)

(b) (c)

Page 46: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 46 ▪ Arquitecturas Paralelas 12-13

17. En base al análisis macroscópico de las latencias de comunicación, la latencia de un mensaje resulta ser proporcional al tamaño del mismo, L, pero también hay un tiempo de inicio (tini).

Se ha medido el ancho de banda de la red de comunicación de un cluster, en base al tamaño de los mensajes, y se ha obtenido el resultado de la figura. De acuerdo a los datos del gráfico, calcula el valor del parámetro L1/2; a partir de ello, y teniendo en cuenta que el tiempo para transmitir un byte es de 7 ns, calcula el tiempo de trasmisión de paquetes pequeños (unos bytes).

18. La latencia de los paquetes y el throughput de la red son dos de los parámetros más

utilizados para caracterizar el comportamiento de la red de paso de mensajes de un multicomputador. Dibuja y explica razonadamente el comportamiento de estos dos parámetros, latencia y throughput, en función del tráfico que exista en la red (en una red “típica” con tráfico aleatorio).

19. ¿Qué es un protocolo de comunicación de "0 copias"? ¿Para qué y por qué se utiliza ese tipo de protocolos?

20. El encaminamiento adaptativo presenta ventajas sobre el encaminamiento estático en

determinadas condiciones. Sin embargo, también presenta inconvenientes. Indica concisa y brevemente la ventaja y el inconveniente principal y cómo se trata de solucionar este último.

21. Como sabes, el ancho de banda de la bisección de la red de un multicomputador marca un

límite teórico al tráfico máximo que puede admitir dicha red en condiciones de tráfico aleatorio. Sin embargo, análisis reales sobre redes de multicomputadores indican claramente que la red se satura con niveles de tráfico notablemente inferiores a dicho valor, típicamente entre el 25 y el 50% en función del mecanismo de encaminamiento (siendo el tráfico aleatorio). Explica breve y concisamente el porqué de este fenómeno.

22. Define, de manera concisa y clara, los siguientes términos:

• adaptive routing • bandwidth • bisection bandwidth • blocking network • broadcast • circuit switching • communication pattern • cut-through • directed network • DOR • fat tree • hypercube • latency • mesh • message deadlock • message passing • message router • multistage network • packet • permutation • routing record • store-and-forward • switch • throughput • torus • virtual channel • wormhole

0

20

40

60

80

100

120

140

160

100 1000 104 105 106

Ancho de bandaobtenido

(MB/s)

L, tamaño de los mensajes (bytes)

Page 47: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Coherencia de los datos en los computadores DSM ▪ 47 ▪

7.1 Un sistema multiprocesador está compuesto de 2048 procesadores. Cada procesador dispone de una memoria principal de 1 GB y una cache de 2 MB, con un tamaño de bloque de 256 bytes. Para mantener la coherencia de los datos se utiliza la técnica de directorios.

Calcula el tamaño global del directorio en bytes, y el % que representa sobre la memoria global del sistema, en cada uno de los siguientes casos:

a. directorio basado en la memoria, esquema full bit vector, con 2 bits para el estado del bloque.

b. directorio basado en la memoria, esquema limited bit vector, máximo número de copias por bloque igual a 10, y 2 bits de estado por bloque.

c. directorio basado en las caches (colas), colas doblemente enlazadas, y 6 bits de estado por bloque en las caches y 2 bits en memoria principal.

7.2 La red de comunicación de una máquina CC-NUMA es una malla de 8×8. Para mantener la

coherencia de los datos se utilizan directorios en MP. El procesador P0 tiene un fallo en cache al leer una variable que corresponde a la memoria de P37, y que está modificada en la cache de P50.

En la figura aparecen tres alternativas para la comunicación que requiere un fallo de lectura. Calcula la latencia de la operación en P0 en los tres casos, de acuerdo a los siguientes datos: la comunicación es de tipo cut-through, y el flit y los enlaces de la red son de 1 byte; los mensajes de coherencia son de 6 o de 70 bytes (control o datos); los enlaces de la red son de 250 MB/s y el encaminamiento de un mensaje en un nodo cuesta 3 ns; no hay tráfico en la red; inyectar paquetes (en el emisor) y recoger paquetes (en el receptor) cuesta 75 ns cada uno.

1. pregunta/respuesta 2. intervention forwarding 3. reply forwarding

7.3 En un MPP (una malla de 8×8) el sistema de coherencia de los datos está estructurado en

forma de colas doblemente ligadas. El protocolo de comunicación es de tipo <petición-respuesta>.

En un determinado momento existen 4 copias de un bloque dado, en los procesadores (0, 0) → (2, 6) → (4, 1) → (7, 7). El bloque utilizado es del espacio de direcciones del nodo (0, 0). Un procesador que tiene una copia del bloque efectúa una escritura sobre el mismo. Calcula, usando los datos del ejercicio anterior, el tiempo (mínimo) de la operación citada si:

a. el procesador que escribe es el (0, 0) b. el procesador que escribe es el (4, 1)

7.4 Un multiprocesador MPP mantiene la coherencia de las caches mediante directorios, tipo full

bit vector con 1 bit (dirty) para el estado. En un momento determinado, el procesador P0 realiza una escritura sobre un bloque que está compartido (S) en P0 y en P1, y que corresponde a la memoria de P8. Antes de completarse la operación, P1 efectúa una escritura en dicho bloque, y P2, un procesador que no tiene dicho bloque, efectúa una lectura del mismo. El orden de llegada de peticiones al directorio es el indicado: primero la escritura de P0, luego la de P1, y finalmente la lectura de P2.

Indica qué mensajes, y con qué contenido, se intercambiarán entre los nodos si el directorio sigue el modelo de comunicación <petición-respuesta>. Brevemente, indica en qué se modificará lo anterior si el protocolo es de tipo reply forwarding.

L

H

R 1. Petición

4. Resp. (Bloque) 3. Resp. (Bloque)

2. Petición

L

H

R 1. Petición

3b. Bloque (actual.)

3a. Resp. (Bloque)

2. Petición

L

H

R 1. Petición

2. Resp. 4b. Bloque (actual.)

4a. Resp. (Bloque)

3. Petición

Page 48: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 48 ▪ Arquitecturas Paralelas 12-13

7.5 Un multicomputador DSM utiliza el protocolo SCI para mantener las coherencia de los datos (listas encadenadas en las caches, invalidación). En un momento determinado, existen tres copias de un bloque de datos de la memoria de P6, las tres coherentes, en P2 (primera), P4 y P7 (última).

Indica cómo se irá modificando la información de coherencia al ejecutarse estas tres operaciones sobre ese bloque, una tras otra: rd4, rd5, wr7.

7.6 Sea un multiprocesador MPP con una red de comunicación general y en el que la coherencia

se mantiene mediante directorios estructurados en forma de colas (SCI). Se produce la siguiente serie de referencias a un mismo bloque de memoria de P2 (el número indica el procesador; inicialmente no existen copias del bloque): LD1, LD2, LD3, ST1, LD2, LD3, ST2, LD3, ST3.

a. Indica en una tabla cómo va cambiando la lista de copias del bloque: estados y punteros. b. Explica más en detenimiento las acciones a realizar por el hardware de coherencia para la

cuarta referencia, ST1. Calcula para este caso el tiempo de ejecución de la operación de coherencia. Los procesadores forman una cadena P0–P1–P2–... y los mensajes de coherencia tardan un tiempo proporcional a la distancia (d × T).

7.7 Un multiprocesador CC-NUMA de 64 nodos tiene un hipercubo de 6 dimensiones como red

de comunicación. Cada nodo de la máquina dispone de 512 MB de memoria y 1 MB de cache, con bloques de 64 bytes. La coherencia de los datos se mantiene mediante directorios en memoria (full bit vector + 3 bits de estado, invalidación, MESI, reply forwarding).

a. Indica la cantidad total de memoria que consume el directorio de esta máquina. b. En un determinado momento, el nodo 0 efectúa una escritura sobre una variable que no

está en su cache. La variable pertenece a la memoria principal del nodo 12, y existen dos copias, en los nodos 27 y 44. Indica paso a paso cómo se resuelve este fallo de cache (mensajes que se intercambian, contenido de los mismos, estados finales, etc.).

c. Si el tiempo de comunicación se puede modelar como T = 200 + 2 × (D × L) ns, siendo D la distancia a recorrer y L la longitud del mensaje en bytes, calcula el tiempo necesario para completar la operación, sabiendo que los mensajes de control son de 6 bytes y los mensajes que llevan datos son de 70 bytes.

d. Aunque el directorio cree que hay una copia de la variable en el nodo 44, la realidad es que dicha copia no existe ¿Es posible esa situación? ¿Cuál sería la respuesta de dicho nodo si así fuera? ¿Por qué?

7.8 Un multiprocesador CC-NUMA de 64 nodos tiene como red de comunicación un toro de

tamaño 8×8. Cada procesador dispone de 1 GB de memoria y 512 KB de cache, con bloques de 128 bytes. La coherencia de los datos se mantiene mediante directorios basados en cache en forma de cola (protocolo SCI).

a. Indica la cantidad total de memoria que consume el directorio de coherencia de esta máquina. Para los estados se utilizan 2 bits en memoria principal y 4 en las caches.

b. Partiendo de una situación vacía, se efectúa la siguiente secuencia de acciones en los procesadores de la máquina (direccionamiento al byte): rd1 (@1); rd2 (@2); wr1 (@2, 4); rd25 (@10); rd31 (@1250); rd54 (@25); wr19 (@533, 6); wr25 (@33, 0)

1 Dibuja, referencia a referencia, cómo se va construyendo la cola de copias del bloque 0 (memoria principal del procesador P0). Utiliza un esquema como el del dibujo.

Dir MP

Pi estado

Dir. caches

Pj estado

Pk estado

Page 49: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Coherencia de los datos en los computadores DSM ▪ 49 ▪

2 Para la última de las referencias —wr25 (@33, 0)—, indica paso a paso las acciones a tomar para mantener la coherencia de los datos (mensajes que se intercambian y entre quiénes, contenido de los mismos, estado final de la cola y del bloque, etc.).

3 El tiempo de comunicación entre los procesadores se puede modelar como T = 100 + 2 × (4D + L) ns, siendo D la distancia a recorrer y L la longitud del mensaje en bytes. Los mensajes de control son de 10 bytes y los de datos (un bloque) son de 140 bytes Calcula el tiempo necesario para completar la última referencia (en lo que a la coherencia respecta; los mensajes se responden sin demora).

7.9 Un multiprocesador CC-NUMA de 128 nodos tiene como red de comunicación un hipercubo.

Cada procesador dispone de 1 GB de memoria principal y 512 KB de cache, con bloques de 128 bytes. La coherencia de los datos se mantiene mediante directorios: full bit vector, invalidación, estados de 4 bits.

a. Indica la cantidad total de memoria que ocupa el directorio de coherencia de esta máquina. ¿A cuánto (%) se reduciría el tamaño del directorio si se utilizara la técnica limited bit vector, con un máximo de 5 copias por bloque? Con un directorio de 5 copias, ¿qué habría que hacer si en un momento dado una aplicación necesita utilizar una sexta copia?

b. En un momento dado, el procesador P10 dispone, en estado E, de la única copia de un bloque correspondiente a la memoria del nodo P0. En ese momento, el procesador P50 lee dicho bloque. Algo después, el procesador P100 efectúa una escritura sobre dicho bloque (su petición al directorio llega más tarde que la del procesador P50, pero antes de que la anterior operación haya concluido). 1 Indica esquemáticamente, mediante un grafo y una explicación sencilla de cada

mensaje, qué mensajes se intercambian entre los procesadores y en qué estado va quedando el bloque en los procesadores implicados y en el directorio, hasta que finalizan ambas operaciones.

2 Haz una estimación del tiempo que le va a costar al procesador P100 ejecutar su operación de escritura (en el caso peor). Para simplificar, supón que el tiempo de comunicación de los mensajes es T = 120 + 4×D + L ns, y que los mensajes se procesan sin demora. Los paquetes pequeños son de 4 bytes y los grandes de 132.

3 Para terminar, considera la siguiente situación en el protocolo de coherencia anterior. P50 recibirá en algún momento una orden de invalidación del bloque como consecuencia de la escritura de P100, pero cuando eso ocurre P50 todavía no ha recibido el bloque que solicitó. ¿Es eso posible? ¿Por qué? ¿Cómo se solucionaría esa situación?

7.10 Responde a las siguientes cuestiones:

1. Cuando se organiza el directorio para la coherencia en forma de una lista encadenada, suele utilizarse un doble enlace: atrás y adelante. También es posible utilizar un único enlace. Si ese fuera el caso, indica el procedimiento a seguir para efectuar una operación de roll-out en medio de la lista.

2. En un procesador de una máquina DSM se ha producido un fallo en la cache de datos al

ejecutar la instrucción ST A,R2. El bloque que contiene A está en el siguiente estado en el directorio (full bit vector): 10110 / S.

¿Cuál será el estado final del bloque en el directorio al finalizar la operación? 3. Indica brevemente qué hay que hacer para mantener la coherencia de los datos en una

máquina de tipo Origin 2000 cuando un procesador escribe en un bloque de datos que se encuentra en la cache: (a) en estado E; (b) en estado S; y (c) en estado M.

Page 50: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 50 ▪ Arquitecturas Paralelas 12-13

4. Un procesador de una máquina DSM escribe en una variable en su cache, que se encuentra en estado Head–Dirty. ¿Qué operaciones, y en qué orden, hay que ejecutar? ¿Cuál será el estado final del bloque, en la cache y en memoria principal?

5. Una máquina DSM utiliza el protocolo de coherencia SCI. Se ha copiado en las caches de P2

y P3 un bloque de datos correspondiente a la memoria de P1. La información de coherencia del bloque en el directorio (MP) es: Fresh | P2. ¿Cuál será la información de coherencia en la cache de P3?

Partiendo de esa situación, P3 escribe en una variable de ese bloque. Para ello, ¿cuántos mensajes se intercambiaran en total entre los procesadores?

6. El sistema de coherencia de una máquina DSM de 64 procesadores tiene las siguientes

características: invalidación, full bit vector, reply forwarding. En un momento dado, P0 escribe en la variable A (de la memoria de P5). Indica gráficamente los mensajes que se intercambiarán, cómo quedará el bloque en cache y directorio (estado y contenido), etc., al ejecutarse dicha operación en estos dos casos. a. el bloque está en estado E en su cache, y en estado 100…0 / E en el directorio. b. el bloque está en estado S en su cache, y en estado 110…0 / S en el directorio.

7. Una máquina DSM de 64 procesadores utiliza el protocolo de coherencia SCI: listas

encadenadas en cache, invalidación. En un momento dado, P0 escribe en la variable A (de la memoria de P5). Indica gráficamente los mensajes que se intercambiarán, cómo quedará el bloque en cache y directorio (estado y contenido), etc., al ejecutarse dicha operación en estos dos casos: a. el bloque está en estado Only–Fresh | * - * en su cache, y en estado Fresh | P0 en el

directorio (comienzo de la lista). b. el bloque está en estado Tail–Valid | P1 - * en su cache, y en estado Gone | P1 en el

directorio (comienzo de la lista). 8. En un determinado sistema de tipo MPP, la coherencia de los datos se mantiene mediante un

directorio similar al de las máquinas Origin. De las posibles operaciones sobre variables en la cache (lectura/escritura, fallo/acierto), (1) ¿Cuáles requieren el uso del directorio de coherencia? (2) De las que lo utilizan, ¿en qué casos hay que enviar mensajes a través de la red de comunicación?

9. En una máquina cc-NUMA, los P procesadores disponen de una memoria RAM de 1 GB y

una memoria cache de 1 MB. La información de coherencia de los datos está repartida entre el directorio junto a MP y los directorios de las caches. En lo que a información de coherencia se refiere, en cada nodo de la red tendremos aproximadamente que:

a. el tamaño del directorio junto a MP es unas 2×P veces menor que el directorio de las caches.

b. el tamaño del directorio junto a MP es unas 500 veces menor que el directorio de las caches.

c. el tamaño del directorio junto a MP es unas 500 veces mayor que el directorio de las caches.

d. el tamaño del directorio junto a MP es unas 2×P veces mayor que el directorio de las caches.

Page 51: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Paralelización de bucles y planificación de tareas ▪ 51 ▪

8.1 Se va a ejecutar en paralelo, en tres procesadores de una maquina SMP, una determinada aplicación en la que se han identificado 14 tareas. El coste de cada tarea y las dependencias entre ellas son las siguientes:

Tareas A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14

Coste 2 8 2 4 5 1 3 2 2 1 2 1 3 2

Depende de – – – – A1 – A6 A3 A5 A9 A7 A1,A5 A7 A8

Indica cómo repartir esas tareas entre los tres procesadores para conseguir el factor de

aceleración más alto. 8.2 Analiza los siguientes bucles, dibuja los grafos de dependencias, e indica cómo pueden

ejecutarse en paralelo de la manera más eficiente posible.

▪ bucle 1 do i = 0, 98 (1) A(i) = A(i) + 1 (2) B(i+1) = A(i) * 2 (3) C(i) = A(i) + B(i+1)/2 enddo

▪ bucle 2 do i = 1, 99 (1) A(i) = A(i) + C(i-1) (2) B(i) = A(i) * 2 (3) C(i) = B(i) - 1 enddo

▪ bucle 3 do i = 1, 97 (1) A(i) = A(i) + C(i-1) (2) B(i) = A(i) * 2 (3) C(i+2) = B(i) - 1 enddo

▪ bucle 4 do i = 0, 97 (1) C(i) = A(i) * A(i) (2) B(i) = A(i) + C(i+2) enddo

▪ bucle 5 do i = 2, 99 (1) A(i) = C(i) + 1 (2) B(i) = B(i) * 2 (3) D(i) = B(i) - A(i-1) (4) F(i) = D(i-2) enddo

▪ bucle 6 do i = 2, 98 (1) A(i) = A(i) + 1 (2) B(i) = A(i-1) + C(i-2) (3) C(i+1) = B(i-2) * 2 enddo

▪ bucle 7 do i = 1, 99 (1) A(i) = B(i) - 2 (2) C(i) = A(i) * 3 + D(i-1) (3) D(i) = A(i-1) enddo

▪ bucle 8 do i = 2, 99 (1) A(i) = A(i) + D(i-1) (2) B(i) = B(i) * 2 (3) C(i) = A(i-1) * 2 + F(i-2) (4) D(i) = C(i) + B(i) (5) F(i) = G(i) * G(i) enddo

▪ bucle 9 do i = 2, 49 do j = 0, 99 (1) A(i,j) = B(i-2,j) (2) B(i,j) = A(i-1,j) + 1 enddo enddo

Page 52: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 52 ▪ Arquitecturas Paralelas 12-13

8.3 Hay que ejecutar el siguiente bucle entre 10 procesadores en una máquina paralela. Analiza cómo paralelizar el bucle de la manera más eficiente, y escribe el código que ejecutará cada procesador; las iteraciones se reparten de manera estática consecutiva (los procesadores utilizan la variable privada pid = 0..9 como identificador).

do i = 2, 101 do j = 0, 199 (1) A(i,j) = A(i,j+2) * 2 (2) B(i,j) = B(i-2,j) * 3 enddo enddo

8.4 Se ejecuta en un sistema paralelo de 4 procesadores el siguiente bucle:

do i = 1, 40 <código> enddo

Todas las iteraciones son independientes entre sí y se sabe que el tiempo de ejecución de las mismas es T(i) = i (es decir, la primera iteración 1, la segunda 2, etc.).

Calcula el tiempo de ejecución en paralelo del programa, y el factor de aceleración respecto al caso serie, si la panificación de tareas es: a. Estática: 1. consecutiva 2. entrelazada b. Dinámica: 1. autoplanificación (self & chunk scheduling), Z = 1 y Z = 5 2. autoplanificación guiada, Zs = (N – i) / P 3. trapezoidal, Z1 = 9, k = 1

El coste de cada operación de planificación dinámica es 1. 8.5 Para mantener equilibrada la carga de trabajo de los procesadores puede utilizarse, en algunos

casos, una técnica denominada doubling, mediante la cual a cada procesador se le asignan las iteraciones i y (N–i) de un bucle. Ese tipo de reparto es muy adecuado en operaciones tipo “matriz × vector” en un caso concreto, cuando la matriz es triangular (es decir, con todo 0 por encima de la diagonal):

do i = 0, N-1 do j = 0, i-1 C(i) = C(i) + M(i,j) * B(j) enddo enddo

Escribe código para ejecutar en paralelo la operación anterior, utilizando planificación estática del bucle tipo doubling.

8.6 Se va a ejecutar en un multiprocesador de memoria compartida el siguiente programa:

do i = 2, 99 (1) A(i) = A(i) * 2 (2) B(i+1) = A(i) + C(i-1) (3) C(i) = 2 * C(i) + 3.0 (4) D(i) = C(i) / 5 (5) E(i+1) = D(i) + F(i) (6) F(i+1) = E(i-2) - 1.2 enddo

a. Analiza las dependencias del programa y escribe el correspondiente código para ser ejecutado en paralelo, utilizando primitivas de sincronización, de la manera más eficiente posible.

b. A continuación, indica cómo paralelizar el código sin utilizar funciones de sincronización. Aproximadamente, ¿cuántas veces más rápido se ejecutaría el programa en este caso frente al caso serie?

Page 53: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Paralelización de bucles y planificación de tareas ▪ 53 ▪

8.7 Se va a ejecutar en un multiprocesador el siguiente programa:

do i = 1, 63 do j = 4, 63 A(i,j) = A(i-1,j) * A(i,j-4) enddo enddo

La máquina dispone de 4 procesadores, y la planificación de las iteraciones es estática. Analiza las dependencias del programa en el espacio de iteraciones e indica cómo paralelizar

el código de la manera más eficiente posible. Indica, igualmente, el método de planificación estática más adecuado para este caso y por qué. Escribe el código resultante (alto nivel).

8.8 Analiza las dependencias del siguiente programa e indica si merece la pena paralelizarlo o no,

cómo y por qué. En caso de que sí, escribe el código correspondiente; utiliza vectores de eventos como mecanismo de sincronización.

do i = 2, 98 (1) A(i+1) = X(i) + 2 (2) B(i) = B(i) + 1 (3) C(i) = B(i-2) + A(i+1) + D(i-1) (4) D(i) = X(i) * X(i) (5) E(i) = D(i) + C(i) enddo

8.9 Analiza las dependencias del siguiente programa y, si es posible, paralelízalo sin utilizar

funciones de sincronización.

k = 3 do i = 1, 100 (1) A(i) = A(i) / 3.0 (2) B(2*i) = C(i+2) + X(i) (3) C(i+1) = B(k) + 3.0 / A(i) (4) D(i) = C(i) * C(i) k = k + 2 enddo

8.10 Considera el siguiente bucle a ejecutar en una máquina paralela:

do i = 3, 102 (1) A(i) = F(i) + 1 (2) B(i) = C(i-1) * 2 if (H(i)>0) then (3) C(i) = A(i-2) + D(i-2) (4) F(i) = A(i) / B(i) + F(i-1) endif enddo

a. Genera el grafo de dependencias y decide en qué medida es paralelizable. Escribe el código correspondiente (de manera eficiente); utiliza vectores de eventos para la sincronización. A continuación, indica los cambios a efectuar en el código anterior si se utilizan contadores para sincronizar.

b. ¿Puede paralelizarse el bucle usando barreras como mecanismo de sincronización? ¿Cómo? ¿Y sin utilizar sincronización? ¿Cómo?

c. Se decide efectuar una planificación dinámica del bucle anterior entre 4 procesadores, de tipo guided self-scheduling. Escribe el código correspondiente para el caso que consideres más adecuado entre los anteriores, y calcula el número de operaciones de planificación y las iteraciones que se reparten en cada una de ellas.

Page 54: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 54 ▪ Arquitecturas Paralelas 12-13

8.11 Considera el siguiente bucle a ejecutar en una máquina paralela:

do i = 1, 24 (1) A(i) = B(i) + D(i-1) (2) C(i) = C(i) * 2 (3) D(i) = C(i-1) + F(i) (4) if (F(i) = 0) then E(i+1) = D(i-1) - 1 enddo

a. Paraleliza el código de la manera más eficiente posible, utilizando contadores como mecanismo de sincronización.

b. ¿Es posible paralelizar el código sin utilizar ningún tipo de sincronización? ¿Cómo? 8.12 Considera el siguiente bucle a ejecutar en una máquina paralela:

do i = 1, 24 do j = 1, i (1) A(i,j) = B(i,j) + 1 (2) C(i,j) = A(i-1,j) * 2 enddo enddo

a. Genera el grafo de dependencias y decide cómo paralelizar el código de la manera más eficiente posible. Escribe el código correspondiente al caso de un sistema de 4 procesadores, en el que la planificación de las tareas es dinámica por trozos de tamaño fijo, 4 iteraciones en concreto.

b. Indica el número de tareas de planificación necesarias y haz una estimación razonada del speed-up que se puede conseguir al ejecutar el programa de esa manera. Supón que el coste de ejecución de una instrucción como las del bucle es 1, y que una operación de sincronización tiene un coste de 10.

8.13 Se va a ejecutar en un multiprocesador el siguiente bucle:

do i = 2, 10000 (1) A(i) = B(i-1) + 1 (2) B(i) = B(i) * 2 (3) C(i) = B(i-2) - 3 enddo

Escribe el código que ejecutará cada procesador (pid = 0..7); utiliza planificación estática consecutiva.

8.14 Una determinada aplicación debe ejecutar el siguiente trozo de programa:

do i = 0, 499 if (B(i)>0) then X = X + FUN(A(i),B(i)) enddo

do i = 0, 999 do j = 0, 99 C(i,j) = C(i+2,j) + X enddo enddo

Se quiere ejecutar el programa anterior utilizando 10 procesadores, y para ello se desea escribir el código paralelo más eficiente posible, aquél que minimice la necesidad de sincronización entre procesadores y que maximice el paralelismo. En lo que al reparto de tareas respecta, el primer bucle se debe repartir de manera dinámica por trozos de tamaño fijo (10 iteraciones), y el segundo de manera estática entrelazada.

Escribe el código (alto nivel) que debe ejecutar cada uno de los procesadores tras paralelizar el programa anterior. Cada procesador se identifica mediante la variable pid, de 0 a 9. Utiliza las funciones de sincronización que consideres más adecuadas. Especifica adecuadamente el ámbito de cada variable, local o global.

Page 55: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Paralelización de bucles y planificación de tareas ▪ 55 ▪

8.15 El siguiente bucle hay que ejecutarlo en un procesador vectorial y en un computador paralelo:

do i = 0, 99 do j = 1, 998 (1) A(i,j+1) = A(i,j-1) + B(i,j) (2) B(i,j) = B(i,j) * B(i,j) * A(i,j+1) enddo enddo

Analiza las dependencias entre las instrucciones del bucle y represéntalas en el espacio de iteraciones. En base a ello, y en la medida que sea posible, indica:

a. Cómo vectorizar el bucle. Escribe el código resultante (todo aquello que sea relevante). Para indicar las direcciones de acceso a memoria, considera que A y B son de tamaño 100 × 1000 y que las direcciones A o B apuntan al elemento (0, 0) de cada matriz.

b. Cómo paralelizar el bucle de la manera más eficiente posible. Escribe código en alto nivel y utiliza como mecanismo de planificación scheduling dinámico por trozos de tamaño 10 (chunk scheduling).

Sabemos que el computador paralelo dispone de 8 procesadores y que el coste de ejecución de cada iteración del bucle anterior es aproximadamente el mismo. ¿Resulta adecuado el método de planificación anterior para este caso? ¿Por qué? ¿Alguna alternativa mejor?

8.16 Responde a estas cuestiones:

1. La sincronización por eventos puede implementarse mediante el uso de vectores de eventos o bien mediante contadores. Indica las ventajas y desventajas de cada caso. Pon un ejemplo.

2. Se utiliza un vector de eventos para sincronizar dos procesos. En un momento dado, el contenido de dicho vector es: i = 0 1 2 3 4 5 6 7 8 9...

vA(i) = 1 1 1 1 0 1 0 0 1 1... Si hubiéramos utilizado un contador para la sincronización, ¿qué valor tendría en ese

momento?

3. Hay dos tipos básicos de estrategias de planificación dinámica de las iteraciones de un bucle. ¿En qué se diferencian? ¿Qué se busca con cada una de ellas?

4. Se desea ejecutar este bucle entre cinco procesadores. La planificación es dinámica, por trozos de tamaño 4 (chunk scheduling).

do i = 1, 1000 fun(i) /* una determinada función o procedimiento */ enddo

Escribe el correspondiente código paralelo. Todas las iteraciones son independientes entre sí, y, aproximadamente, el coste de las operaciones de planificación es un 50% del coste de fun(i). Sin considerar otros problemas, ¿cuál será el factor de aceleración que se consiga?

5. Se va a ejecutar un bucle en un sistema paralelo heterogéneo, en el que 4 procesadores son

de tipo A y otros 4 son de tipo B. Si se utiliza un solo procesador, el tiempo de ejecución del bucle es 1 en los procesadores tipo A y 0,5 en los de tipo B.

a. Efectúa la planificación de un bucle de N iteraciones, intentando conseguir el mayor rendimiento del sistema.

b. Escribe código para el caso de planificación self scheduling, e indica las ventajas y/o desventajas frente al caso anterior.

6. Hay que ejecutar 100 iteraciones independientes de un bucle entre 4 procesadores. El tiempo

de ejecución de cada iteración es de 1 s, salvo una de ellas, que dura 20 s. Calcula el factor de aceleración y el rendimiento que se obtendrá en cada uno de estos tres casos:

Page 56: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 56 ▪ Arquitecturas Paralelas 12-13

a. el reparto de iteraciones es estático consecutivo (trozos del mismo tamaño). b. el reparto de iteraciones es estático entrelazado (trozos del mismo tamaño). c. el reparto de iteraciones es dinámico, una a una (calcula el caso mejor y el peor); coste de

asignación de una iteración, 50 ms.

7. Paraleliza el siguiente bucle, de la manera más eficiente posible, para una máquina de 40 procesadores. Utiliza planificación estática consecutiva. Calcula el factor de aceleración que se conseguirá.

do i = 0, 19 do j = 0, 199 A(i,j) = A(i,j) + 1 B(2*i+1,j) = B(2*i,j) * 2 enddo enddo

8. Un determinado bucle de tres dimensiones puede paralelizarse en cualquiera de las dimensiones sin necesitar sincronización. Se ejecuta dicho bucle en una máquina SMP de 8 procesadores. Lo más adecuado sería: a. Paralelizar el bucle interno, para que el tamaño de grano sea grande. b. Paralelizar el bucle externo, para que las tareas que ejecute cada procesador sean grandes. c. Paralelizar los tres bucles, para disponer de muchas tareas independientes para repartir

entre todos los procesadores. d. Ejecutarlo en serie, ya que tenemos muy pocos procesadores para un bucle de tres

dimensiones. e. Todas las alternativas anteriores son correctas, y la elección de una de ellas dependerá del

protocolo de coherencia del multiprocesador: invalidación o actualización.

9. En lo que respecta al reparto (scheduling) de bucles, indica sin son verdaderas o falsas, y por qué, las siguientes afirmaciones: a. El reparto estático entrelazado facilita la localidad en el acceso a los datos. b. Dado un bucle sin dependencias (doall), lo más adecuado es utilizar planificación

dinámica con trozos cada vez más pequeños. c. Si el tiempo de ejecución de las iteraciones es similar y no hay dependencias entre ellas,

lo más adecuado es la planificación estática. d. Si hay que ejecutar 100 iteraciones entre 4 procesadores, la planificación más adecuada

es la dinámica, con trozos de 20 iteraciones. e. Si hay que ejecutar 100 iteraciones entre 4 procesadores, repartidas en modo guided self-

scheduling (parte proporcional de lo que queda), el primer procesador ejecutará 25 itera-ciones, y el resto de las iteraciones tal vez se repartirán entre los otros tres procesadores.

10. Para repartir las iteraciones de un bucle se ejecuta Fetch&Add (i,10). Por tanto, a. La planificación es estática entrelazada, siendo el nivel de entrelazado 10. b. Se trata de un reparto de tipo self-scheduling. c. El tamaño de los trozos de bucle que se reparten se va reduciendo de 10 en 10

(trapezoidal scheduling). d. El reparto es dinámico, con trozos del mismo tamaño (10). e. Las anteriores afirmaciones son todas incorrectas.

11. Hay que ejecutar el siguiente bucle en una máquina SMP de 4 procesadores:

do i = 0, 7 calcular(i) enddo

iteración: 0 1 2 3 4 5 6 7 tiempo: 1 6 20 15 7 13 12 6

a. Calcula el factor de aceleración y la eficiencia que se conseguirán, siendo el reparto de iteraciones estático, entrelazado 2 a 2. Indica qué iteraciones ejecutará cada procesador.

b. Repite el apartado (a), para este otro reparto: self-scheduling. El coste de la operación de reparto es 1. ¿Cuál es la carga añadida (%)?

Page 57: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios: Computadores de alta velocidad. OpenMP, MPI (introd.). ▪ 57 ▪

9.1 En la dirección web www.top500.org, se publica dos veces al año la lista de los computadores paralelos más rápidos. Tal y como aparece en la lista, el computador más rápido de 1993 tenía una velocidad de cálculo de 59,7 GF/s; en el año 2009, el más rápido consiguió una velocidad de 1,105 PF/s.

Teniendo en cuenta que la velocidad de cómputo se ha incrementado a lo largo del tiempo (hasta ahora, por lo menos) de acuerdo a la ley de Moore, calcula (a) cada cuántos meses se duplica la velocidad de los computadores paralelos, y (b) la velocidad de cálculo que, previsiblemente, tendrá el computador paralelo más rápido en el año 2017.

9.2 De la página web www.top500.org se pueden conseguir diversos datos, sobre las

características de los sistemas que pertenecen a la lista (en el apartado statistics). Basándote en esos datos, calcula los siguientes parámetros: 1. El número medio de procesadores de los 500 sistemas paralelos, el porcentaje de sistemas

que tienen entre 2048 y 8192 procesadores, y la velocidad de cálculo media que se consigue con esos sistemas.

2. Las velocidades de cálculo medias que se consiguen por procesador, tanto para el caso de velocidad máxima teórica (Rpeak) en GF/s, como para la velocidad que realmente se consigue (Rmax) en GF/s y en tanto por ciento respecto a la máxima teórica.

3. Velocidad media por procesador vectorial y por procesador escalar. ¿Alguna conclusión? 4. Número medio de procesadores de los sistemas con arquitecturas de tipo MPP y de tipo

cluster, y el porcentaje, respecto al máximo teórico, que se consigue con cada tipo de sistema. ¿Alguna conclusión?

5. En cuanto a la red de conexión, el tanto por ciento de sistemas que utilizan Gigabit Ethernet e Infiniband, y el porcentaje de velocidad máxima teórica que se consigue con estos sistemas. ¿Alguna conclusión?

Realiza el mismo cálculo, pero con la red de interconexión Cray Interconnect. ¿Conclusión? Consigue las principales características de esta red (topología, mecanismos de comunicación, ancho de banda de los enlaces, características de los encaminadores...).

9.3 ¿Qué es un cluster? El Donostia International Physics Center te encarga diseñar un cluster de

altas prestaciones, con 1024 procesadores, para efectuar cálculo intensivo. Indica, breve y concisamente, los elementos que utilizarías, la arquitectura, cómo lo programarías, etc.

9.4 Una determinada aplicación se ejecuta en paralelo dividida en varios procesos. Al comienzo

de la aplicación, uno de los procesos solicita un determinado valor de entrada. ¿Qué hay que hacer, a nivel de programación, para que el resto de los procesos conozca dicho valor si: (a) la máquina es de tipo SMP; y (b) la máquina es de tipo MPP? ¿Qué hacen el resto de procesos mientras se lee el valor de entrada?

9.5 Earth Simulator es un supercomputador vectorial japonés que durante los años 2002-2004

estuvo en la cabeza da la lista top500. Un usuario de esa máquina puede trabajar en tres niveles diferentes: (a) usando un único procesador vectorial; (b) usando un conjunto de 8 procesadores que forman un nodo tipo SMP; y (c) usando varios SMP que forman una máquina tipo DSM.

Indica brevemente qué tipo de herramientas de programación podrá utilizar un usuario que trabaje en cada uno de esos niveles.

9.6 Los sistemas de comunicación basados en paso de mensajes se suelen programar utilizando

librerías de funciones de comunicación como, por ejemplo, MPI, en las que se suelen distinguir funciones de comunicación punto a punto y funciones de comunicación colectivas. Utilizando la sintaxis que prefieras, pon un ejemplo de cada uno de estos dos tipos de funciones de comunicación.

Page 58: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 58 ▪ Arquitecturas Paralelas 12-13

9.7 Una determinada aplicación se está ejecutando en un sistema paralelo de memoria distribuida. En un momento dado en la ejecución, los procesos P1 y P2 deben intercambiarse dos datos, dat1 y dat2. Para ello, ejecutan el siguiente pseudo-código (similar a MPI):

P1 P2 … … Enviar_síncrono(a_P2,dat1,…) Enviar_síncrono(a_P1,dat2,…) … … … … Recibir_sincrono(de_P2,dat2,…) Recibir_sincrono(de_P1,dat1,…) … …

¿Es correcto? ¿Por qué? Razona la respuesta. 9.8 En un sistema de memoria distribuida de 4 procesadores, P0 tiene en memoria un vector A de

4 elementos, cuyo contenido es A0 = 1, A1 = 2, A2 = 3, y A3 = 4. P0 efectúa una operación Scatter de A. Tras ello, todos los procesadores incrementan (+1) los datos recibidos. Finalmente, todos efectúan una operación Gather de A, y una operación Reduce(A,+) sobre B (en ambos casos con destino en P0). Indica el valor final de A y B en P0.

9.9 En una aplicación paralela para una máquina de memoria distribuida (paso de mensajes) se

efectúa en un momento dado una operación de reducción de las variables locales A en la variable B, del estilo MPI_Reduce(A,B,MPI_SUM,...). Escribe el código correspondiente a dicha operación si la aplicación fuera para una máquina de memoria compartida.

9.10 a. El siguiente trozo de código OpenMP se ejecuta en paralelo en una máquina tipo SMP y

no funciona bien. ¿Por qué? ¿Cómo lo solucionarías?

#pragma omp parallel for shared(A,B,C,sum) private(i) for (i=0; i<N; i++) { C[i] = A[i] + B[i+1]; sum = sum + C[i]; } ...

b. El siguiente trozo de código MPI se ejecuta en paralelo en un cluster de memoria distribuida y no funciona bien. ¿Por qué? ¿Cómo lo solucionarías?

if (pid == 0) then { scanf (“%f”, &C); MPI_Bcast(&C, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); } B = B + C; ...

Page 59: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios generales ▪ 59 ▪

10.1 Hay que ejecutar el siguiente bucle en un procesador vectorial y también en un computador paralelo:

k = 3 do i = 2, N+1 (1) A(i) = B(i-2) * A(i) (4 ciclos) (2) B(k) = B(i) / 4 (3 ciclos) (3) C(i) = E(i-1) – 1 (3 ciclos) (4) D(2*k-1) = A(i-1) + C(i) + A(k+3) (6 ciclos) (5) E(i) = C(i+1) (2 ciclos) k = k + 1 enddo

a. Analiza las dependencias entre las instrucciones del bucle, y represéntalas en el grafo de

dependencias.

b. En base al grafo anterior, indica si es posible vectorizar el bucle y cómo. En su caso, escribe el código resultante.

La máquina vectorial dispone de 3 buses a memoria y suficientes unidades funcionales. Las instrucciones se encadenan, y no hay conflictos en los módulos de memoria. Teniendo en cuenta estos datos, haz una estimación de cuántas veces más rápido (speed-up) se ejecutará el programa en esta máquina vectorial que en un procesador escalar. Para estimar el tiempo de ejecución del bucle en un procesador escalar, utiliza los tiempos de ejecución, en ciclos, que se indican en el código del programa.

c. A continuación, analiza cómo puede paralelizarse el bucle anterior, de la forma más eficiente posible. Escribe código en alto nivel, y utiliza como mecanismo de sincronización vectores de eventos. Utiliza sincronización sólo en los casos imprescindibles. Aplica para ello técnicas tales como fisión, peeling, intercambio, etc., para minimizar las necesidades de sincronización.

Considera ahora que la máquina paralela consta de 16 procesadores. Reescribe los bucles paralelos, pero incluyendo la correspondiente planificación (scheduling). Utiliza el método de planificación que dé mejores resultados (tiempo de ejecución y sincronización necesaria) para cada caso.

Finalmente, haz una estimación de cuántas veces más rápido se ejecutará el programa en esta máquina paralela, en comparación con el caso escalar serie. Para el cálculo, supón que cada operación de sincronización tiene un coste de 6 ciclos.

10.2 Se desea ejecutar en paralelo, en un sistema de memoria compartida, el siguiente código:

... printf(“Introduce el valor de X”); scanf (“%d”, &X);

entrada

for (i=0; i<N; i++) A[i] = A[i-1] * X;

for (i=0; i<N; i++) B[i] = B[i] * A[i] + X;

min = MAXINT; for (i=0; i<N; i++) if (B[i]<min) min = B[i];

for (i=0; i<N; i++) B[i] = B[i] – min;

cálculo

for (i=0; i<N; i++) printf(“%d \n”, B[i]); ...

salida

a. Escribe el código (alto nivel) que ejecutaría cada uno de los procesadores del sistema paralelo (modelo de programación SPMD). Utiliza las funciones de sincronización que consideres necesarias —locks, barriers, wait... —. En el caso de ejecutar bucles en paralelo, utiliza una planificación estática consecutiva. Cada proceso utiliza una variable local que lo identifica, pid (de 0 a P-1). Indica claramente qué variables son globales y cuáles son locales o privadas de cada proceso.

Page 60: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 60 ▪ Arquitecturas Paralelas 12-13

b. Análisis de rendimiento. Se ejecuta el código paralelo en una máquina de P procesadores. El coste de cada instrucción de alto nivel es similar, por lo que podemos modelar el coste de ejecución de un bucle de N iteraciones como N. Por otra parte, el coste de una operación de sincronización (cualquiera) se puede modelar como P.

Calcula una estimación del factor de aceleración que se obtendrá (no consideres las operaciones de entrada/salida, sino solamente el cálculo). Dibuja el resultado en función de P, para N = 1024, y obtén el valor máximo del factor de aceleración. En concreto, ¿cuál es el speed-up esperado para el caso de P = 4 procesadores? ¿Y para P = 32? ¿Cómo pueden justificarse esos resultados?

c1. La máquina paralela que ejecuta este código es un sistema SMP de 4 procesadores con un sistema de coherencia tipo snoopy, MESI. Los 4 procesadores van a utilizar la variable X. Indica los estados por los que irá pasando el bloque que contiene X en la cache de cada procesador. Inicialmente, no está cargada en ninguna cache.

c2. Supón ahora que el sistema es una máquina cc-NUMA de 32 procesadores, cuyo protocolo de coherencia es del tipo SCI. Haz el mismo análisis del apartado anterior (para las 4 primeras copias de X, que resultan ser las de P0, P6, P2 y P29; X pertenece al espacio de direcciones de P0), indicando cómo se va construyendo la cola de copias (estados en nodo home y caches).

c3. Finalmente, efectúa el mismo análisis pero considera una máquina cuyo protocolo de coherencia es similar al del Origin2000.

10.3 Un computador paralelo de memoria distribuida privada está compuesto por 64 procesadores

conectados mediante una red en forma de toro de 2 dimensiones, con enlaces de 4 Gbit/s. El tiempo de procesado de los paquetes en los encaminadores de la red es de 5 ns. Los paquetes son de 1+31 bytes (= flits).

a. Se envía un paquete a un nodo a distancia máxima en la red. Calcula el tiempo de transmisión del paquete si la comunicación se efectúa en modo cut-through.

Una determinada aplicación que se está ejecutando en esta máquina sólo efectúa comunicación con los nodos vecinos, con probabilidad 0,7, y con los nodos a distancia máxima, con probabilidad 0,3. Calcula la distancia media recorrida por los paquetes de dicha aplicación.

Finalmente, calcula el máximo número de paquetes por segundo que es capaz de absorber la red de esta máquina en condiciones de tráfico aleatorio (en espacio y tiempo).

b1. La siguiente función efectúa una determinada operación con los elementos de un vector:

double func_A() { int i, lvec; double res, sum=0.0;

printf("\n long_vect? "); scanf("%d", &lvec);

for (i=0; i<lvec; i++) sum = sum + A[i]*A[i]/(A[i]+2.5);

res = sqrt(sum) / lvec; return res; }

Se trata de un cálculo que es fácil de ejecutar en paralelo. En concreto, se va a ejecutar en la máquina anterior, en la que la memoria de cada nodo es privada, por lo que todas las variables son privadas y la comunicación se debe efectuar mediante operaciones explícitas de paso de mensajes. La comunicación se efectúa cuando dos procesadores, emisor y receptor, ejecutan las funciones ENVIAR(dir_dat,num_elem,destino) y RECIBIR(dir_dat,num_elem,origen).

Page 61: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios generales ▪ 61 ▪

Los procesos se identifican mediante la variable pid. Uno de los procesos (p.e. pid = 0) lee la longitud del vector y reparte al resto de procesos, uno a uno, un trozo del vector A. A continuación, cada proceso ejecuta localmente el correspondiente código, y, al finalizar, envía a pid = 0 el resultado parcial obtenido, quien efectuará el cálculo final. En resumen: un proceso se encarga de repartir datos y recoger y acumular resultados parciales y el resto efectúa el cálculo.

El código paralelo podría ser el siguiente:

double func_A() { int i, lvec, nproc=64; double res, sum=0.0, sum_aux=0.0;

if (pid==0) // el pr. 0 { printf("\n long_vect? "); // lee el tamaño del vector scanf("%d", &lvec);

tam = lvec / (nproc – 1); // tamaño de cada trozo de vector

for (i=1; i<nproc; i++) ENVIAR(&A[tam*(i-1)],tam,i); // envía trozos del vector, 1 a 1 } else RECIBIR(A, tam, 0); // el resto espera recibir datos

BARRERA(nproc); // sincronización global antes del cálculo

if (pid==0) // pr. 0 recibe y acumula resultados parciales { sum = sum_aux; for (i=1; i<nproc; i++) { RECIBIR (&sum_aux, 1, i); sum = sum + sum_aux; } res = sqrt(sum) / lvec; // cálculo final return res; } else { for (i=0; i<tam; i++) // cálculo local en el resto de procesadores sum_aux = sum_aux + A[i]*A[i]/(A[i]+2.5); ENVIAR(&sum_aux, 1, 0); // se envian al pr. 0 los resultados parciales } }

Se trata de obtener una estimación del speed-up que se puede conseguir al ejecutar este

bucle en los 64 procesadores, para un vector de 63×105 elementos. Para simplificar el cálculo, vamos a efectuar las siguientes hipótesis de tiempos (en ns): una iteración del bucle for de cálculo, 500; una operación de comunicación <ENVIAR/RECIBIR>, 10000 + 2 × L; una operación de sincronización global, 6000.

b2. ¿Es necesario utilizar en el código anterior la función de sincronización global BARRERA? ¿En qué mejoraría o empeoraría el resultado si no se utilizara? Para razonar tus argumentos, representa en un gráfico (similar a los que hemos utilizado para analizar el comportamiento de las instrucciones T&S, LL/SC...) cómo se va efectuando la comunicación y el cálculo a lo largo del tiempo para el caso de 5 (1+4) procesadores.

b3. Para construir una barrera de sincronización para un sistema SMP basta con utilizar un flag y un contador. Pero, ¿podrías esbozar cuál sería la implementación de una barrera de sincronización global en un sistema de memoria privada?

c. Cambiamos ahora de máquina, ya que vamos a ejecutar el programa anterior en una máquina de memoria compartida tipo SMP: 8 procesadores en un bus. Escribe el código de los procesos que se ejecutarán en cada nodo para efectuar el cálculo en paralelo. Utiliza las funciones de sincronización y las variables que consideres necesarias; en todo caso, indica claramente el ámbito de las variables, global o local.

Page 62: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 62 ▪ Arquitecturas Paralelas 12-13

d. Para efectuar el cálculo en paralelo, se han repartido trozos del vector a cada procesador de acuerdo a una determinada política de scheduling. ¿Qué tipo de scheduling se ha utilizado en programa del apartado 2?

Retoma el código escrito para la maquina de memoria común del apartado 3 y reescribe la planificación del bucle de cálculo utilizando el “otro” tipo de política, en la versión que prefieras.

¿Cuál consideras que es la estrategia de reparto más adecuada para este caso? ¿Por qué?

10.4 Un ejemplo típico de aplicación fácilmente paralelizable es el cálculo de una integral

mediante la suma de pequeños trozos de área bajo la curva.

delta_x = (b – a) / N; x = a; for (i=0; i<N; i++){ A = A + f(x); x = x + delta_x; } A = A * delta_x;

xxfdxxfAN

ii

b

a∑∫−

=

∆≅=1

0

)()(

Cuantos más trozos se hagan, mayor será la precisión del resultado, aunque el tiempo de ejecución en serie es proporcional al número de sumas a efectuar.

a. Escribe código en estilo SPMD, lo más eficiente posible, para ejecutar la operación anterior en una máquina SMP de P procesadores. Toma las decisiones que consideres más adecuadas y explícalas.

b. Supón que el proceso en paralelo implica unos costes añadidos (generación de threads, sincronización...) que, para este caso, pueden modelarse como Tover (µs) = 200 + 10 P.

La eficiencia del programa paralelo depende del tiempo de cálculo serie, Tcalc. Calcula el tiempo mínimo de cálculo (en función de P) del programa original necesario para que la eficiencia conseguida al ejecutarlo en paralelo sea al menos del 50%. Indica el tiempo para el caso de P = 20 procesadores.

c. Supón ahora que Tcalc = 105 µs. Dibuja en un gráfico el comportamiento (grosso modo) que tendrá el factor de aceleración en función del número de procesadores. Calcula el valor de P con el que obtendríamos el mejor resultado en este caso, es decir, el menor tiempo de ejecución. Calcula dicho tiempo de ejecución y el speed-up obtenido.

10.5 Una determinada aplicación se ejecuta en una máquina SMP de 4 nodos. Cada uno de los 4

procesos en que se divide ejecuta la función Producir_Datos(VA), que genera N datos y los deja en el vector VA; tras ello, escribe los N datos en un dispositivo mediante la función Escribir_Datos(VA,dir). La variable dir indica la dirección de inserción del nuevo grupo de datos. Sólo un proceso puede estar escribiendo datos en el dispositivo.

a. Escribe código en estilo SPMD, lo más eficiente posible, para que 4 procesos ejecuten la

operación anterior y escriban entre todos ellos K datos en el dispositivo correspondiente (múltiplo de N×4). Toma las decisiones que consideres más adecuadas, pero explica por qué, las variables que utilizas (privadas o compartidas)…

Si utilizas alguna función de sincronización, escribe luego el código de las mismas (bajo nivel), utilizando instrucciones del tipo LL / SC.

b. Repite el apartado anterior para el caso en que los 4 procesos tengan que escribir los datos en orden estricto: P0, P1, P2, P3, P0, P1…

a b Δx

f

Page 63: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

Ejercicios generales ▪ 63 ▪

c. La función de generación de datos cuesta del orden de 300 ms, mientras que la escritura es del orden de 30 ms. Obtén una estimación del factor de aceleración que se logrará, con relación al caso serie: (1) si se utilizan 2 procesadores; y (2) si se utilizan los 4 procesadores. Supón que el proceso <generación de datos / escritura de datos> se repite 1000 veces.

d. Repite el apartado anterior, pero considerando ahora que la función de escritura cuesta del orden de 200 ms. Justifica de manera razonada los resultados que obtengas.

10.6 a. El objetivo de paralelizar un programa usando P procesadores es conseguir que el tiempo de ejecución sea P veces más pequeño; es decir, que el programa se ejecute P veces más rápido. Sin embargo, en la mayoría de los casos el factor de aceleración que se consigue es (bastante) menor que P.

Explica las cuatro principales razones de la pérdida de eficiencia en la ejecución de programas en paralelo.

b. Analicemos un caso concreto. Supón que un determinado programa se ejecuta en paralelo en 16 procesadores. Al principio y al final del mismo, un proceso lee datos y escribe resultados en disco. Sin tener en cuenta otro tipo de factores, calcula el porcentaje máximo del tiempo de ejecución que deben suponer las operaciones de entrada/salida para que la eficiencia de la ejecución sea al menos del 85%.

c. En el programa anterior, el 2% del tiempo de ejecución se gasta en las operaciones de entrada/salida citadas. El resto se ejecuta en P procesos. A lo largo de la ejecución en paralelo se efectúan operaciones de broadcast desde un procesador al resto, cuyo coste se ha modelado como 20 + 4×P1/2 microsegundos. Las operaciones de broadcast se producen una vez por cada milisegundo del tiempo de ejecución del programa en serie.

Dibuja una curva con el speed-up que se consigue en función del número de procesadores que se utilicen, para estos valores de P: 5, 10, 20, 40, 60, 80, 100 y 120.

Calcula el número óptimo de procesadores, y el speed-up y el rendimiento que se conseguirían en ese caso.

d. El programa anterior se ejecuta en una malla de 4×4 procesadores. La operación de broadcast se ejecuta de la siguiente manera. El procesador que hace el broadcast envía el paquete a todos sus vecinos. Cada uno de ellos lo envía a los siguientes vecinos:

- si el paquete de BC llegó por la derecha o por la izquierda (eje X), se reenvía al siguiente nodo en la misma dirección.

- si el paquete de BC llegó por arriba o por abajo (eje Y), se reenvía en la misma dirección y en ambas direcciones del eje X.

El paso de un paquete de tipo BC de un nodo al siguiente cuesta 200 ns; la generación del nuevo paquete a reenviar cuesta 50 ns.

Dibuja en una malla de 4×4 cómo se efectuará el broadcast partiendo del nodo (2, 1). Calcula el tiempo de la operación de BC en función de la posición del nodo que lo efectúa en la malla de 4×4 nodos.

La latencia de una operación de broadcast según este algoritmo está relacionada con la distancia máxima de la red. En el caso de una malla, dicha distancia varía en función de la posición del nodo, ya que la red no es simétrica. Calcula la media de las distancias máximas de cada nodo en una malla de tamaño 4×4.

Page 64: EJERCICIOS - gipuzkoa€¦ · LV V3,B(R1) MULV V4,V3,V2 B – D/L – A(4) – E. SV C(R1),V4 . El esquema de segmentación de las instrucciones es el indicado. Las instrucciones

▪ 64 ▪ Arquitecturas Paralelas 12-13

10.7 Un multiprocesador de memoria compartida está compuesto por 64 procesadores que utilizan un hipercubo como red de comunicación. Cada procesador dispone de 2 GB de memoria principal y 1 MB de memoria cache, con bloques de 128 bytes. La coherencia de los datos se mantiene mediante un directorio distribuido en las caches (SCI).

En un momento determinado, el procesador P7 efectúa una escritura en una variable que no tiene en la cache, y que corresponde al espacio de memoria asignado a P32. Dos copias de dicho bloque se encuentran en P24 (Head-Fresh) y P56 (Tail-Valid).

a. Calcula el tamaño total que ocupa la información de coherencia en cada nodo del sistema. Los estados de los bloques ocupan 2 bits en MP y 6 bits en MC.

b. Explica de manera detallada mediante un grafo cómo se resuelve el fallo en cache en P7 en lo que al mantenimiento de la coherencia respecta. Indica claramente los mensajes que se intercambian, su contenido y los cambios de estados.

c. Tomando en cuenta el mensaje inicial que se dirige desde P7 al directorio, indica los routers intermedios por los que pasará dicho mensaje. El encaminamiento es DOR (de mayor a menor dimensión). Para ese mensaje, y en la hipótesis de que pudiera utilizarse encaminamiento adaptativo, calcula cuántos caminos diferentes hay en la red para poder ir desde el origen (P7) al destino (directorio).

d. Calcula el tiempo necesario para completar la operación en P7. Para ello, ten en cuenta los siguientes datos: comunicación: cut-through; enlaces de la red de comunicación y flits de los paquetes de 1 byte; velocidad de transmisión entre routers: 4 Gbit/s; tiempo de procesado en routers intermedios: 5 ns; longitud de los paquetes: 132 bytes (con un bloque de datos) o 4 bytes (control); tiempo para responder a un mensaje en los nodos destino: 250 ns; tráfico nulo en la red.

e. Considera ahora que la red no está vacía; de hecho, cada nodo está inyectando en la red 200 MB por segundo. Calcula el tráfico máximo (aleatorio) que puede inyectar cada nodo de la red (MB/s) y, a partir de ese dato, el % del tráfico máximo que se está inyectando en ese momento.

La gráfica adjunta indica cómo se incrementa la latencia de un paquete con el tráfico. En base a la misma, obtén el incremento esperado en el tiempo de comunicación debido al tráfico, y, finalmente, el tiempo total de la operación en P7.

100

200

300

400

500

600

0 10 20 30 40 50

Late

ncia

(ns)

Tráfico (% del tráfico máximo)