Ejercicios1 141010045245 Conversion Gate01

13
Capítulo 1. INTRODUCCIÓN AL PROCESAMIENTO PARALELO. 1. Considerar la ejecución de un código objeto con 200.000 instrucciones en un procesador a 40 MHz. Las mezcla de instrucciones y el número de ciclos (CPI) necesarios para cada tipo de instrucción se dan en la tabla, basados en los resultados de un programa traza. Tipo de Instrucciones CPI Mezcla de Instrucciones Aritmñético-Lógicas 1 60% Load/Store 2 18% Salto 4 12% Referencia de memoria con fallo de caché 8 10% Considerar la ejecución 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 ejecución balanceada por los cuatro procesadores. Debido a la necesidad de sincronización entre las cuatro partes paralelas, se tienen que añadir 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 calculándolo así: 1. 2. 3. 4. Por tanto: Pero este sería el CPI si la ejecución fuera con un único procesador, y se nos pregunta el CPI para una ejecución paralela con 4 procesadores, cuando ejecutamos el programa en paralelo se añaden 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 sincronización, por tanto tendremos un total de Además 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.

description

aaa

Transcript of Ejercicios1 141010045245 Conversion Gate01

  • 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 CPI Mezcla de Instrucciones Aritmtico-Lgicas 1 60%

    Load/Store 2 18% Salto 4 12%

    Referencia de memoria con fallo de cach

    8 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) /R1

  • 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 N Iteraciones

    Procesador 1 560

    Procesador 32 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 N Iteraciones

    Procesador 1 Desde i=1 hasta i=16 y Desde i=1009 hasta i=1024

    Procesador 2 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 Tiempo de ejecucin paralelo Tn Eficiencia E

    A

    ( )

    B

    ( )

    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?