Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios1 141010045245 Conversion Gate01
Ejercicios1 141010045245 Conversion Gate01
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%
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:
2. Forma 2:
Tambin podemos calcular el CPI de una forma ms rpida y sencilla:
(
) (
)
Para el tiempo paralelo como terminan los procesadores a la vez el tiempo que termina en paralelo es el
tiempo que termina un procesador
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
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.
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:
N Iteraciones
560
32.304
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
Por tanto el tiempo de ejecucin del algoritmo sera lo que tarde uno de los procesadores , ya que
terminaran a la vez:
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.
Eficiencia=1/3
( )
( )
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 .
( )
( )
Eficiencia=1/4
( )
( )
( )
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)
(
)
(
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
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.
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.
En el caso de que quisisemos ejecutar el programa en un solo procesador, entonces el tiempo que
tardar sera el siguiente:
c) Y la eficiencia?