Sie sind auf Seite 1von 3

Soluciones a los problemas 9.a y 9.

Problema 9.a

a) Para el caso de que el 99% del código sea paralelizable.


Cuando el enunciado dice que se puede paralelizar el 99% del código no hay
que entender que se puede paralelizar el 99% de las líneas de código ya que
para resolverlo es necesario pensar en tiempo de ejecución del código. Así hay
que entender que del 100% del tiempo de ejecución secuencial del código se
puede paralelizar el código que tarda el 99% del tiempo de ejecución
secuencial. También hay que entender que cuando dice que “se puede
paralelizar” quiere decir que es totalmente paralelo (independiente) y que se
pueden llegar a hacer muchos (tendiendo a infinitos) procesos paralelos.

Si definimos la unidad de tiempo como la centésima parte del tiempo de


ejecución secuencial, resulta que el tiempo secuencial (en un procesador) es de
100 unidades de tiempo.

El tiempo de ejecución mínimo en paralelo T(P)min se obtiene para el caso de


muchos procesadores (P tendiendo a infinito), ya que no hay ningún overhead
debido al paralelismo. En el límite este tiempo tiende a 1 unidad de tiempo,
que es el tiempo del 1% del código secuencial mientras que el 99% del código
que se ejecuta en paralelo lo hace (en el límite con infinitos procesadores) en 0
unidades de tiempo.

Aceleración máxima = A(P) con P tendiendo a infinito = T(1) / T(P) con P


tendiendo a infinito = 100/1 = 100.

b) Para el caso en el que sólo es paralelizable el 90% del código, en el límite la


aceleración es 10. Esto es así, porque T(P)min es 10 unidades de tiempo, que
es el tiempo de la parte secuencial (el 10% del código), mientras que la parte
paralela (el 90% del código) se ejecuta en el límite, para infinitos
procesadores, en un tiempo 0.

Aceleración máxima = A(P) con P tendiendo a infinito = T(1) / T(P) con P


tendiendo a infinito = 100/10 = 10.

Problema 9.b

a)
El tiempo de ejecución secuencial (en un procesador) es el tiempo de ejecución de un
código con 1000 iteraciones y que no tiene ninguna sentencia ni send ni receive. Este
código se ejecutará, en un procesador, en 500 ns (tiempo de ejecución por iteración)
por 1000 iteraciones. Esto es,
T(1) = 500.000 ns = 500 us
b)
Según el código equivalente al de la figura 4, pero ahora utilizando los 10
procesadores (P0, P1, …, P9), cada procesador del P1 al P9 ejecuta 100 iteraciones
del bucle while y envía el resultado al procesador 0, encargado de calcular las
sumas finales. Las 100 iteraciones del while de cada procesador se ejecutan a la vez
en todos los procesadores tardando 50.000 ns (500 ns por iteración x 100 iteraciones).
Luego cada procesador del P1 al P9 ejecuta su send, pero el procesador 0 tiene que
ejecutar las 9 sentencias receive en secuencia. Así, el procesador 0 es el que tarda
más tiempo en ejecutar su código, por lo que el tiempo de ejecución del programa en
paralelo es igual al tiempo de ejecución del procesador 0. Esto es, el procesador 0
tarda (500ns son 0.5 us):

• 0.5us*100 = 50µs en realizar las 100 iteraciones del bucle while, más
• 9*2µs = 18µs en ejecutar las 9 sentencias receive.

Lo que supone un tiempo de ejecución total (con 10 procesadores) de:


T(10) = 50 +18 = 68 µs

c)
La aceleración para 10 procesadores es:
A(10) = T(1) / T(10) = 500 us / 68 us = 7,35

La eficiencia para 10 procesadores es:


Eficiencia(10) = A(10) / 10 = 0,73

d)
Generalizando el cálculo para P procesadores:
• 0.5us*1000/P µs en realizar las 1000/P iteraciones del bucle while, más
• (P-1)*2µs µs en ejecutar las P-1 sentencias receive.

Lo que supone un tiempo de ejecución total en µs (con P procesadores) de:

T(P) = 500/P + (P-1)*2

Una gráfica que muestra como varía T en función de P es:

600
500
Tiempo en us

400
300
200
100
0
0 20 40 60 80 100
Núm Procesadores
Para saber el número de procesadores que minimiza el tiempo de ejecución, de forma
analítica, se deriva T(P) en función de P, se iguala a 0 y se despeja P. Recordad que la
derivada de
f(x) = a/x
respecto de x, siendo a una constante, es:
f´(x) = -a / P2.
Por lo tanto:
T’(P) = -500/P2 + 2;
T’(P) = -500/P2 + 2 = 0 ⇒ P= 15,8
Como tiene que ser entero, tomamos el más próximo:

P = 16
Se puede comprobar que T(15,8) es un mínimo calculando la segunda derivada de T,
evaluándola para P=15,8 y observando que da un valor positivo.

Una ampliación del gráfico anterior entorno a 16 procesadores es la siguiente:

65

64
Tiempo en us

63

62

61

60
12 14 16 18 20
Núm Procesadores

El tiempo de ejecución según la formula anterior para 16 procesadores es:

T(P) = (500/16) + (16-1)2 = 31.25 + 30 = 61,25 µs

Como veis de los gráficos, para este ejemplo, elegir el número exacto de procesadores
a usar no es crítico para reducir el tiempo de ejecución (la curva es bastante plana en
torno a 16 procesadores).

e)
La aceleración para 16 procesadores es:
A(16) = T(1) / T(16) = 500 us / 61,25 us = 8,16

La eficiencia para 16 procesadores es:


Eficiencia(16) = A(16) / 16 = 0,51

Das könnte Ihnen auch gefallen