Laboratorio de Paralelismo Ejercicios tema 1 1. 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 conseguirán (sin considerar otros factores). [ fa = 10,3; efic = 32% ] 2. 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 el factor de aceleración máximo teórico. b. el número de procesadores que se debe utilizar para conseguir una eficiencia de 0,5 y el factor de aceleración que se conseguirá en ese caso. [ a. fa_max = 16; b. P = 24; fa = 12 ] 3. Se va a ejecutar en paralelo, en tres procesadores de una máquina 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 posible. 4. Se ejecuta una aplicación en paralelo en una máquina de P procesadores. Cuando se ejecuta en paralelo, por cada segundo de ejecución en serie se debe realizar una operación de 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. Dibuja el tiempo de ejecución, el factor de aceleración y la eficiencia en función de P. [ fa_max = 6,25; P = 25; ] 5. Un determinado sistema paralelo MPP de 256 procesadores utiliza como red de comunicación un toro de dos dimensiones, 16 × 16 nodos, con enlaces de 10 Gbit/s. Se envía un paquete desde el nodo P35 al nodo P212. El tiempo de transmisión en la red se puede modelar como d × (10 + 1/B) + L/B ns (d = distancia; L = tamaño del paquete en bytes; B = ancho de banda de los enlaces en byte/s). Además de ello, hay que tener en cuenta una serie de overheads, debidos al tráfico —una media de 5 ns por cada encaminador—, a los protocolos de generación y recogida de mensajes —200 + L ns—, y a la cabecera y otros datos de control de los mensajes —8 bytes—. Calcula el tiempo total de la comunicación y el ancho de banda efectivo obtenido en estos dos casos: (a) se envían 8 bytes de datos; (b) se envían 256 bytes de datos (en ambos casos, un solo paquete). [ a. Tcom = 323,6 ns; AB = 0,19 Gb/s; b. Tcom = 780 ns; AB = 2.63 Gb/s; ] 6. Se ejecutan en paralelo, entre 4 procesadores, 100 iteraciones de un determinado bucle, independientes entre sí. El tiempo de ejecución de cada iteración es de 1 s, salvo una de las iteraciones, que tiene un tiempo de ejecución de 20 s. Calcula el speed-up y la eficiencia que se consigue en los siguientes casos: a. el reparto de iteraciones es estático consecutivo (trozos del mismo tamaño). b. el reparto de iteraciones es estático entrelazado. c. el reparto de iteraciones es dinámico, 1 a 1 (calcula el peor y el mejor caso); coste de una operación de asignación de tareas, 50 ms. [ a/b. su = 2,7; efic = 68%; c. su = 2,6—3,8; efic = 66—96%; ] 7. Se quiere ejecutar en paralelo, en una máquina SMP de 8 procesadores, el bucle indicado. Escribe el código que ejecutará cada procesador, en los siguientes casos: a. se usan barreras como mecanismo de sincronización (planificación estática consecutiva). b. se usan contadores como mecanismo de sincronización (planificación estática entrelazada). c. si es posible, sin utilizar funciones de sincronización (planificación dinámica, tipo guided). for (i=4; i<996; i++) { C[i] = B[i-1] + C[i]; A[i] = FUN1(B[i-4],C[i-2]); B[i] = B[i] * 0,5; } 8. Se quiere ejecutar en paralelo, en una máquina SMP de 4 procesadores, el siguiente bucle: for (i=2; i<1000; i++) for (j=0; j<1000; j++) { A[i][j] = A[i-2][j] } La matriz A está almacenada por filas, y en un bloque de cache caben 8 elementos de la matriz. Escribe el código más eficiente posible para cada procesador de la máquina. 9. Se quiere ejecutar en paralelo, en una máquina SMP de 4 procesadores, el siguiente bucle: for (i=3; i<1000; i++) { A[i] = A[i] * B[i-1]; B[i+1] = A[i-3] * 2 + 1; } Escribe código para cada uno de los threads independientes que se pueden generar para ejecutar dicho bucle en paralelo. 10. Se desea ejecutar en paralelo, en un sistema de memoria compartida tipo SMP, el siguiente código: ... printf(“Introduce el valor de X”); scanf (“%d”, &X); for (i=1; i<N; i++) A[i] = A[i-1] * X; // entrada // cálculo 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; for (i=0; i<N; i++) printf(“%d \n”, B[i]); ... // salida Escribe el código (alto nivel, SPMD) que ejecutaría cada uno de los procesadores del sistema paralelo. Utiliza las funciones de sincronización que consideres necesarias —locks, barriers, wait... —. En el caso de ejecutar bucles en paralelo, la planificación debe ser estática consecutiva. Cada proceso utiliza un variable local que le identifica, pid (de 0 a P–1). Indica claramente qué variables son globales y cuáles son locales o privadas de cada proceso. 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. Obtén una estimación del factor de aceleración que se obtendrá, considerando que el coste de una operación de sincronización (cualquiera) es P. No consideres las operaciones de entrada/salida, sino solamente el cálculo. Dibuja el resultado en función de P, para el caso N = 1.024. Calcula el valor máximo. En concreto, ¿cuál es el speed-up esperado para el caso de P = 4 procesadores? ¿Y para P = 32 procesadores? ¿Cómo pueden justificarse esos resultados? [ fa(P=4) = 2,26; fa(P=32) = 3,2 ] 11. Se ejecuta 8 veces un determinado programa y se mide su tiempo de ejecución. Los resultados obtenidos son (en ms): 23,256 / 24,128 / 23,872 / 24,190 / 25,876 / 144,637 / 22,987 / 23,386. Haz una estimación del tiempo de ejecución del programa. 12. En un determinado experimento se ha medido el tiempo de ejecución de dos alternativas de un programa en función del tamaño de los vectores procesados (y, en consecuencia, en función de la carga de cálculo), y se han obtenidos los datos de la tabla. Representa los datos en un gráfico de la manera más adecuada posible, y saca las conclusiones pertinentes. N (bytes) T1 (ms) T2 (ms) 1 2 5 100 1000 2000 3000 3200 3500 4000 20000 100000 0.081 0.162 0.405 8.104 81.062 162.010 242.013 259.197 283.518 323.998 1620.012 8099.996 20.020 20.053 20.215 22.167 39.893 59.756 80.176 83.830 89.875 99.568 421.532 2020.225 13. Las siguientes tablas muestran los tiempos de ejecución en microsegundos de dos programas diferentes en función del parámetro N. Representa los datos y obtén una expresión matemática que indique cómo varía T en función de N. A partir de ahí, calcula el tiempo de ejecución esperado en cada caso para N = 100. N T1 (µs) N T2 (µs) 10 20 30 40 50 60 83 108 141 179 207 241 1 5 10 15 25 40 53 77 118 185 440 1611