Está en la página 1de 13

Captulo 1. INTRODUCCIN AL PROCESAMIENTO PARALELO.

1. Considerar la ejecucin de un cdigo objeto con 200.000 instrucciones en un procesador a 40 MHz. Las
mezcla de instrucciones y el nmero de ciclos (CPI) necesarios para cada tipo de instruccin se dan en la
tabla, basados en los resultados de un programa traza.
Tipo de Instrucciones
Aritmtico-Lgicas
Load/Store
Salto
Referencia de memoria con
fallo de cach

CPI
1
2
4
8

Mezcla de Instrucciones
60%
18%
12%
10%

Considerar la ejecucin paralela del programa en un sistema de 4 procesadores con memoria


compartida. El programa se puede dividir en cuatro partes iguales (50.000 cada una) para una
ejecucin balanceada por los cuatro procesadores. Debido a la necesidad de sincronizacin entre las
cuatro partes paralelas, se tienen que aadir 5000 instrucciones extras a cada parte. Asumir la misma
mezcla de instrucciones para cada parte del programa dividido. El CPI para las instrucciones de
referencia a memoria (con fallo de cache) se ha incrementado de 8 a 12 ciclos debido a las contenciones.
El CPI para los restantes tipos de instrucciones no cambia.
a) Calcular el CPI medio cuando el programa se ejecuta en el sistema de 4 procesadores.
Para calcular el CPI podemos hacerlo de dos formas:
1. Forma 1:

Podemos saber los ciclos totales del programa calculndolo as:


1.
2.
3.
4.
Por tanto:

Pero este sera el CPI si la ejecucin fuera con un nico procesador, y se nos pregunta el CPI para una
ejecucin paralela con 4 procesadores, cuando ejecutamos el programa en paralelo se aaden 5.000 a
cada parte (ya que el programa se divide en 4 partes cada una se ejecutar en un procesador)
instrucciones debidos al overhead creado por la sincronizacin, por tanto tendremos un total de
Adems el CPI de las instrucciones de fallo a memoria ha aumentado de 8 a 12
Para saber el CPI hacemos el mismo proceso que antes:
1.

2.
3.
4.
Por tanto:

Ya tenemos el CPI medio, para saber el CPI de un solo procesador:

2. Forma 2:
Tambin podemos calcular el CPI de una forma ms rpida y sencilla:

b) Calcular la correspondiente velocidad en MIPS cuando el programa se ejecuta en el sistema de 4


procesadores.
Para calcular la velocidad la podemos calcular como la frecuencia del procesador divido entre el CPI
Entonces hay una velocidad 1515MIPS por procesador, como tenemos 4 procesadores entonces habr una
velocidad total de:

c) Calcular el speedup (o ganancia de velocidad) del sistema de 4 procesadores sobre el sistema


uniprocesador.

(
) (
)
Para el tiempo paralelo como terminan los procesadores a la vez el tiempo que termina en paralelo es el
tiempo que termina un procesador

d) Calcular la eficiencia del sistema de 4 procesadores comparando el speedup obtenido en el apartado


(c) con el caso ideal.

N=4

En un caso ideal, la eficiencia obtenida sera mxima, del 100%, es decir, G = N procesadores

Podemos concluir que la eficiencia real quedar por debajo de la eficiencia ideal, es comprensible
que tengamos una eficiencia menor porque al introducir el sistema de 4 procesadores, hay un
overhead debido a la sincronizacin y el CPI tambin aumenta.
2. El siguiente segmento de cdigo, formado por seis instrucciones, necesita ejecutarse 64
veces para la evaluacin de la expresin aritmtica vectorial: D(I) = A(I) + B(I)C(I):
Load R1, B(I)
Load R2, C(I)
Multiply R1,R2
Load R3, A(I)
Add R3,R1
Store D(I),R3

/R1<-- Memoria(+I)
/R2 Memoria(+I)
/R1<-- (R1) x (R2)
/R3<-- Memoria(+I)
/R3<-- (R3)+(R1)
/Memoria(+I)<-- (R3)

donde R1, R2, y R3 son registros de la CPU, (R1) es el contenido de R1, y son las direcciones
de comienzo de memoria de los arrays B(I), C(I), A(I) y D(I) respectivamente. Asume cuatro
ciclos de reloj para cada Load o Store, dos ciclos para el Add, y ocho ciclos para la
multiplicacin en un uniprocesador o en un slo PE en una mquina SIMD.
a) Calcula el nmero total de ciclos de CPU necesarios para ejecutar repetidamente
durante 64 veces el cdigo anterior en un computador SISD, ignorando todos los otros
retardos de tiempo.
Tipo
Load/store
Add
Multiply

CPI
4
2
8

En cada iteracin se necesitan estos ciclos:


Tipo
Load
Load
Multiply
Load
Add
Store

NI
4
1
1

Ciclo/inst
16
2
8

CPI
4
4
8
4
2
4
26
Por tanto son 26 ciclos en una sola iteracin, como se dan 64 iteraciones entonces son:

b) Considerar el uso de un computador SIMD con 64 PEs para ejecutar el cdigo anterior
en seis instrucciones vectoriales sincronizadas sobre vectores de datos de 64
componentes, dirigidos por la misma velocidad del reloj. Calcula el tiempo total de
ejecucin en la mquina SIMD, ignorando el resto de retardos.

c) Cul es el speedup del computador SIMD sobre el computador SISD?.

3. Sea el porcentaje de cdigo de un programa que se puede ejecutar simultneamente por n


procesadores. Asume que el cdigo restante se debe ejecutar secuencialmente por un slo
procesador. Cada procesador tiene una velocidad de ejecucin de x MIPS, y se asume que
todos los procesadores tienen la misma capacidad.
a) Obtener una expresin para la velocidad efectiva en MIPS cuando se usa el sistema para
la ejecucin exclusiva de este programa, en trminos de los parmetros n, y x.
=parte paralelizable.
1-=parte secuencial.
n=n de procesadores.
Adems, sabemos que:
(cuando queremos calcular la ganancia, podemos usar tanto el tiempo , como los MIPS, es
decir, si usamos el tiempo pues el tiempo secuencial se pone arriba y el tiempo paralelo se
pone abajo, ya que el tiempo secuencial ser mucho mayor ya que se tarda mucho ms cuando
se ejecuta en un procesador que cuando se ejecuta en paralelo con muchos procesadores, por
tanto imagnate que en secuencial tarda 100 segundos , y en paralelo se tarda 10 segundos,
entonces la ganancia calculndola con el tiempo ser 100/10= 10 , una ganancia

Con la frmula anterior podemos igualarla con la frmula de la ganancia de la ley de Amdahl,
como es la parte paralelizable:
(

)
(

Por tanto tenemos dos frmulas de la ganancia, e igualando las 2 frmulas podemos despejar
el valor de:

{
Entonces conseguimos la expresin

b) Si n=16 y x=4 MIPS, determinar el valor de que nos lleva a un rendimiento del sistema
de 40MIPS.
Un rendimiento de 40MIPS es el rendimiento de los MIPS en paralelo, el rendimiento de los
MIPS en secuencial sera la velocidad de un procesador es decir 4MIPS

Es decir se necesita que un 96% del cdigo sea paralelizable para conseguir una velocidad de
40MIPS en paralelo
4. El siguiente programa Fortran se ejecuta en un uniprocesador, y la versin paralela se va a
ejecutar en un multiprocesador de memoria compartida.
L1:
Do 10 I=1,1024
L2:
SUM(I)=0
L3:
Do 20 J=1,I
L4: 20
SUM(I)=SUM(I)+I
L5: 10 Continue
Supn que las sentencias L2 y L4 necesitan dos ciclos mquina, incluyendo todas las actividades
de la CPU y acceso a memoria. Ignorar el gasto extra causado por el control software del lazo
(sentencias L1, L3 y L5) y todos las dems penalizaciones del sistema (overhead).
a) Cul es el tiempo total de ejecucin del programa en un uniprocesador?
El bucle externo se repite 1024 veces, por tanto el bucle externo necesita:
El bucle interno se repite:


Entre el bucle interno y el bucle externo suman un total de:
Por tanto podemos calcular los ciclos que tarda el algoritmo en secuencial (por un solo procesador):

El tiempo que tarde (el tiempo de ejecucin) depender de la frecuencia del procesador que no nos la dio
el ejercicio, entonces dejamos el tiempo dependiente de la frecuencia:

b) Divide las iteraciones del lazo I entre 32 procesadores con la siguiente asignacin: El
procesador 1 ejecuta las primeras 32 iteraciones (I=1 a 32), el procesador 2 ejecuta las
siguientes 32 iteraciones (I=33 a 64) y as. Cul es el tiempo de ejecucin y el speedup
comparado con el apartado (a). (Tener en cuenta que la carga de trabajo dada por el lazo J no
est balanceada entre los procesadores)
Aqu no hacemos una divisin de carga balanceada, ya que el primer procesador tendr menos
iteraciones y el ltimo procesador tendr que hacer ms iteraciones ya que por ejemplo, en este
caso:
Iteraciones procesador 1:
El procesador dar de la iteracin 1 a la iteracin 32, por tanto:

Iteraciones procesador 32:


El procesador 32 dar las 32 ltimas iteraciones, por tanto:
{

Ahora podemos resolverlo

Por tanto el procesador 32 dar las siguientes iteraciones:


{

Por tanto podemos comprobar que no es una ejecucin balanceada ya que


Procesador
Procesador 1
Procesador 32

N Iteraciones
560
32.304

Debido a esto el algoritmo tardar lo que tarde el ltimo procesador:

Como conocemos el tiempo de ejecucin en secuencial (con un solo procesador) y conocemos el tiempo
de ejecucin en paralelo entonces podemos calcular la ganancia:

c) Modificar el programa para facilitar una ejecucin paralela balanceada de toda la carga de
trabajo en los 32 procesadores. Es decir, igual nmero de sumas asignadas a cada procesador
con respecto a ambos lazos.
Doall l=1,32
Do 10 I=(l-1)*16+1, l*16
SUM(I)=0
Do 20 J=1,I
20 SUM(I)=SUM(I)+J
10 Continue
Do 30 I=(64-l)*16+1, [(64-l)*16 ]+16
SUM(I)=0
Do 40 J=1,I
40 SUM(I)=SUM(I)+J
30 Continue
Endall
Para ejecutar este algoritmo partimos el programa en 64 trozos, el primer procesador ejecutar las 16
primeras iteraciones (las menos pesadas) y ejecutar tambin las 16 ltimas iteraciones (las ms
pesadas), de esta forma iremos balanceando la carga de tal forma que:
Procesador
Procesador 1
Procesador 2

N Iteraciones
Desde i=1 hasta i=16 y Desde i=1009 hasta i=1024
Desde i=17 hasta i=32 y Desde i=993 hasta i=1008
Y as sucesivamente

d) Cul es el tiempo de ejecucin mnimo resultante de la ejecucin paralela balanceada en los 32


procesadores?. Cul es el nuevo speedup sobre el uniprocesador?.
De esta forma todos los procesadores tendran que realizar el mismo nmero de iteraciones, es decir se
reparter igualmente entre los 32 procesadores, como sabemos que en secuencial (un solo procesador)
tiene que hacer 1.051.648 ciclos para terminar el algoritmo entonces con esta nueva forma de balanceo
cada procesador tendra que hacer solamente:

Por tanto el tiempo de ejecucin del algoritmo sera lo que tarde uno de los procesadores , ya que
terminaran a la vez:

El speed up que conseguimos es el siguiente:

Por tanto hemos conseguido una eficiencia perfecta.

5. Dados dos esquemas A y B de multiplicacin de matrices, ambos tienen el mismo nmero de


procesadores. Los tiempos de ejecucin paralelos y las eficiencias de estos sistemas se muestran
en la tabla. Tened en cuenta que el tiempo secuencial para multiplicar dos matrices es
aproximadamente T1= cN3 y la eficiencia viene definida por
Esquemas
A

Tiempo de ejecucin paralelo Tn

Eficiencia E
( )
( )

En cada una de las expresiones de tiempo paralelas, el primer trmino denota el tiempo de clculo
y el segundo el overhead de comunicacin. La diferencia es que B tiene la mitad de overhead que
A pero a expensas de doblar el tiempo de clculo. Qe sistema es ms escalable asumiendo que
queremos mantener (1) E=1/3 y (2) E=1/4? (La carga para un problema de multiplicacin de matrices
NxN es aproximadamente W = N3).
Decimos que un sistema es escalable cuando hay que aumentar poco la carga para mantener la
eficiencia constante.
Para poder comprobar cul de las opciones es la ms escalable debemos de obtener la expresin
de la carga de cada una de las opciones, y una vez que las tengamos podemos comparar dichas
expresiones, la expresin que tenga que aumentar menos la carga para mantener la eficiencia ser
la opcin ms escalable.

a) Qu sistema es el ms escalable si mantenemos una eficiencia de E=1/3?.


En este apartado nos dicen que sistema es el ms escalable si queremos tener una eficiencia
constante de , por tanto nos dan los siguientes datos:
-

Eficiencia=1/3
( )

( )

La carga que implica la multiplicacin de matrices es aproximadamente W=N3

Los que vamos hacer ahora es igualar las expresiones con el valor de la eficiencia el cual nos lo ha
dado el ejercicio:

( )

Una vez que tenemos el valor de N, podemos sustituir este valor en la expresin de la carga:
{

( )

( )

( )

Ya tenemos la expresin de carga para la opcin A, ahora tenemos que repetir el proceso para
calcular la expresin de carga de B.
Los que vamos hacer ahora es igualar las expresiones con el valor de la eficiencia el cual nos lo ha
dado el ejercicio:
( )

Una vez que tenemos el valor de N, podemos sustituir este valor en la expresin de la carga:
( )
{

( )

( )

Una vez que tenemos las expresiones de la carga para la opcin A y para la opcin B, ahora si
podemos compararlas:
( )

( )

Podemos observar que la expresin de la carga es la misma, es decir W(A) = W(B) por tanto
cualquiera de las opciones son igual de escalables si queremos mantener una eficiencia constante
de .
( )

( )

b) En el apartado b seguimos el mismo procedimiento, solo que cambia el dato de la eficiencia.


En este apartado nos dicen que sistema es el ms escalable si queremos tener una eficiencia
constante de , por tanto nos dan los siguientes datos:
-

Eficiencia=1/4
( )

( )

La carga de la multiplicacin de matrices se puede calcular mediante la siguiente funcin:


W=N3
Lo que vamos hacer ahora es igualar las expresiones con el valor de la eficiencia el cual nos lo ha
dado el ejercicio:

( )

Una vez que tenemos el valor de N, podemos sustituir este valor en la expresin de la carga:
( )
{

( )

( )

( )

Ya tenemos la expresin de carga para la opcin A, ahora tenemos que repetir el proceso para
calcular la expresin de carga de B.
Los que vamos hacer ahora es igualar las expresiones con el valor de la eficiencia el cual nos lo ha
dado el ejercicio:

( )

Una vez que tenemos el valor de N, podemos sustituir este valor en la expresin de la carga:
( )
{
( )

( )

( )

Una vez que tenemos las expresiones de la carga para la opcin A y para la opcin B, ahora si
podemos compararlas:
( )

( )

En este caso vemos que las expresiones que describen la carga son prcticamente iguales pero
difieren en el denominador, vemos que el que aumenta menos la carga es la opcin B por tanto en
este caso la opcin ms escalable es la opcin b.
( )

( )

6. Considerar un programa con una carga de trabajo de una unidad W=1 y un cuello de botella
secuencial de cero ( = 0): Estimar el speedup de tiempo fijo, Sn para cada una de las siguientes
asunciones:
a) Cul es la expresin (big-O) del speedup escalado para un overhead T0 = O(n-0,5)? Podras
conseguir un speedup lineal?
Para calcular el speed up escalado se utiliza la ley de Gustafson, y sustituimos las incgnitas de la
frmula con los siguientes datos:
W=1
=0
To=O(n-0.5)
(

)
(

Por tanto la expresin de la ganancia escalada es:

Ahora nos piden la expresin big-O, esta es la cota superior, para calcular esto tenemos que hacer el limite
cuando n(el nmero de procesadores) tiende a infinito, para ver qu ocurre segn la ley de gustafson
conforme vamos aadiendo procesadores

Conseguimos un speedup lineal (superspeed up)

b) Cules son las posibles razones para tener un speedup superlineal en aplicaciones de
computacin paralela reales?
Siempre que el overhead sea constante conseguiremos un superspeedup lineal.
Posibles razones para conseguir un speed up superlineal:
1. Aumento de la memoria cach: cuando aumentamos el nmero de nodos tambin se aumenta la
memoria cach disposible, ya que cada procesador adems de poder procesar tiene una memoria
cach asociada, por tanto se pueden tener ms datos en memoria cach y el tiempo de acceso a los
datos disminuir.
2. Aumento de la memoria RAM: lo mismo que ocurre con la memoria cach, al tener ms procesadores
tambin tendremos ms memoria RAM y por tanto podremos tener ms datos en memoria principal
que el memoria secundara y esto har que el acceso a los datos sea mas rpido.
3. El tipo de algoritmo que se ejecute: hay algoritmo como por ejemplo los algoritmos de backtracking que
permiten podar ramas, cuando un hilo poda una rama evita que otro hilo entre a buscar en esa rama.

c) Repetir el apartado (a) para un overhead T0 = O(1) y comentar los resultados.


W=1
=0
To=O(n-0.5)
(
)
(

Por tanto:

Por lo que, como tenemos un overhead constante, entonces tendremos un speed up lineal
d) Repetir el apartado (a) para un overhead T0 = O(logn) e interpretar el resultado. Es posible
conseguir un speedup lineal si el speedup es ms que una constante?.
W=1
=0
To=O(logn)
(
)
(
)
( )
Por tanto:
Por lo que, tenemos un crecimiento lineal, aunque tendra un crecimiento levemente menor al caso
anterior. Si el overhead es mayor que n, entonces tendramos un crecimiento inferior al lineal mientras que
si es menor que n, entonces si podramos disponer de un crecimiento lineal.

7. Un programa tarda 40 s en ejecutarse en un multiprocesador. Durante un 20% de ese tiempo se


ha ejecutado en 4 procesadores, durante un 60% en tres; y durante el 20% restante, en un
procesador (consideramos que se ha distribuido la carga de trabajo por igual entre los
procesadores que colaboran en la ejecucin en cada momento, y despreciamos la sobrecarga).
Cunto tiempo tardara en ejecutarse el programa en un nico procesador? Cul es la ganancia
en velocidad obtenida con respecto al tiempo de ejecucin secuencial? Y la eficiencia?
a) Cunto tiempo tardara en ejecutarse el programa en un nico procesador?
Separamos cada parte para ver cunto tarda cada una y cuanto procesadores necesita cada parte:
El 20% se ejecut en 4 procesadores:

El 60% se ejecut en 3 procesadores

El 20% que queda se ejecut en 4 procesadores:

En el caso de que quisisemos ejecutar el programa en un solo procesador, entonces el tiempo que
tardar sera el siguiente:

b) Cul es la ganancia en velocidad obtenida con respecto al tiempo de ejecucin secuencial?


Para determinar la ganancia dividimos lo que se tarda en secuencial (con un solo procesador) entre
lo que se tarda con varios procesadores (tiempo en paralelo)

c) Y la eficiencia?

También podría gustarte