You are on page 1of 125

CAP.

V: METODOLOGÍA DE LA
PROGRAMACIÓN PARALELA
INTEGRANTES:
• Yovana Velásquez cruz
• Andrea mollinedo castillo
• Lisbeths d. calderón garrido

2013- 39095
2013- 39080
2013- 39080

5.1 VISIÓN GLOBAL DEL PROCESO DEL
DISEÑO PARALELO
El diseño de algoritmos para sistemas multiprocesador es una tarea mucho más compleja que en ámbito secuencial, ya
que presenta una serie de aspectos añadidos, entre los que cabe destacar los siguientes:

CONCURRENCIA: En lugar de especificar una secuencia de pasos, un algoritmo paralelo describe la ejecución
simultanea de un conjunto de pasos de computo, lo cual lleva implícito la resolución de problemas de sincronización
y comunicación.

ASIGNACIÓN DE DATOS Y CÓDIGOS A LOS PROCESADORES: Muchas de las partes del cómputo que se ejecutarán
simultáneamente deben asignarse de forma inteligente a diferentes procesadores para aprovechar el sistema
paralelo.

ACCESO SIMULTÁNEO A DATOS COMPARTIDOS: En muchas ocasiones, múltiples tareas de un algoritmo paralelo
necesitarán acceder a datos que son comunes a dichas tareas, y habrá que establecer mecanismos de sincronización
que protejan la integridad de los datos compartidos.

ESCALABILIDAD: Para cumplir esta deseable propiedad, denominada escalabilidad, es necesario que las decisiones
tomadas durante el diseño de un algoritmo paralelo no limiten la explotación eficiente de sistemas hardware de
mayor envergadura(importancia).

5.1 VISIÓN GLOBAL DEL PROCESO DEL
DISEÑO PARALELO

FIGURA1:

ESQUEMA

GENERAL

DEL

ENFOQUE

DE

DISEÑO

PARALELO

Cada tarea puede incluir sub cálculos del cálculo principal. la descomposición de un cálculo consiste en trocearlo en partes de menor tamaño con objetivo de que muchas de esas partes se puedan realizar de forma independiente entre sí.2 DESCOMPOSICIÓN EN TAREAS En programación paralela. Cada una de las partes que resulta de una descomposición se encapsula en unidades de cómputo de tamaño arbitrario que aquí denominaremos tareas.5. . así como parte de los datos requeridos por dichos sub cálculos.

5.2 DESCOMPOSICIÓN EN TAREAS • EJEMPLO DE DESCOMPOSICIÓN EN TAREAS DE UNA EVALUACIÓN POLINOMIAL: .

y se habla de granularidad gruesa cuando se obtienen pocas tareas de gran tamaño. Cuando la descomposición genera un número elevado de pequeñas tareas se dice que presenta una granularidad fina. EJEMPLO: .2 DESCOMPOSICIÓN EN TAREAS: GRANULARIDAD DE UNA DESCOMPOSICIÓN Las tareas que resultan de una descomposición podrían ser de diferentes tamaños considerando su coste computacional como media.5.

se le denomina grado medio de concurrencia. Este número se le conoce como el máximo grado de concurrencia del algoritmo.2 DESCOMPOSICIÓN EN TAREAS: GRAFO DE DEPENDENCIAS Y GRADO DE CONCURRENCIA Se pretende que la mayoría de las tareas que resultan de una descomposición sean independientes. En una o diferentes áreas de grado de dependencias se presenta el mayor número de tareas cuya ejecución se podría realizar al mismo tiempo. es muy común que existan tareas que necesitan datos de otras tareas y que como consecuencia. se podría determinar el grado de concurrencia que exhibe un algoritmo paralelo. Estudiando el grafo de dependencias. Este factor determina en gran medida la calidad de la descomposición en tareas que se hecho del problema. Un grafo de dependencia es un grafo acíclico dirigido (si fuera cíclico revelaría situaciones de interbloqueo entre tareas ) donde los nodos representan tareas. Al indicador que dependerá de la forma y tamaño del grafo de dependencias. Este tipo de dependencias se puede describir como un grafo de dependencias. no se puedan ejecutar hasta que las tareas de las que dependen de hayan ejecutado.5. No obstante. .

2 DESCOMPOSICIÓN EN TAREAS: GRAFO DE DEPENDENCIAS Y GRADO DE CONCURRENCIA EJEMPLO DEL GRADO MEDIO DE CONCURRENCIA: .5.

.5. mientras las aristas conectan tareas entre las que existe una relación de comunicación o sincronización. En muchos casos las aristas son dirigidas para indicar el sentido del flujo de datos.2 DESCOMPOSICIÓN EN TAREAS: COMUNICACIÓN Y SINCRONIZACIÓN: ESTRUCTURA DE COMUNICACIÓN Para reflejar con precisión la forma en que las tareas actúan entre sí se debe definir un grafo que represente la estructura de comunicación de las tareas. Los nodos representan tareas.

Descomposición recursiva. Descomposición funcional. . Según se enfoque principalmente en la descomposición de datos o de tareas.5. Las técnicas más difundidas son: Descomposición de dominio.1 TÉCNICAS DE DESCOMPOSICIÓN Las técnicas de programación paralela aplican estrategias de DESCOMPOSICIÓN o PARTICIONAMIENTO de datos y de cómputo. resulta una técnica diferente de programación paralela.2. para dividir un problema en subproblemas de menor complejidad.

5. • La idea de concentrarse primero en las estructuras de datos más grandes o las accedidas con más frecuencia.2 DESCOMPOSICIÓN DEL DOMINIO Se utiliza cuando es posible resolver un problema aplicando la misma operación sobre partes diferentes de su dominio de datos.2. la salida calculada por el programa y datos intermedios calculados por el programa No existe regla general para la división de datos Existen algunas sugerencias obvias dadas por: • La estructura o “geometría” del problema. Los datos a dividir pueden ser: La entrada del programa. .

2.1 Descomposición de dominio centrada en datos de salida Transformación iterativa de un vector .5.2 DESCOMPOSICIÓN DEL DOMINIO 5.2.2.

2.2.5.2 DESCOMPOSICIÓN DEL DOMINIO 5.2 Descomposición de dominio centrada en datos de entrada .2.

5.2.2 DESCOMPOSICIÓN DEL DOMINIO 5.2.2.3 Descomposición de dominio basada en bloques para algoritmos matriciales .

2 DESCOMPOSICIÓN DEL DOMINIO 5.2.3 Descomposición de dominio basada en bloques para algoritmos matriciales .2.5.2.

5.2.2.2.2 DESCOMPOSICIÓN DEL DOMINIO 5.4 Descomposición de dominio centrada en datos intermedios .

• Podemos aplicar cuando la resolución de un problema se puede descomponer en fases diferenciales.2. se examinan los requisitos de datos de dichas tareas. • Se ajusta a la propia arquitectura de la aplicación a paralelizar. .5.3DESCOMPOSICIÓN FUNCIONAL DIRIGIDA POR EL FLUJO DE DATOS • Esta técnica es la más lógica e intuitiva. donde cada fase ejecuta generalmente un algoritmo diferente. • Pasos a aplicar. • Una vez dividida la computación en diferentes tareas. cuando se utiliza este enfoque: • Se identifican las partes funcionales del cálculo que se desea resolver en paralelo. se analiza los requisitos de datos de dichas tareas. • Se asigna una tarea para la realización de cada fase.

Cada tarea se puede considerar como un algoritmo secuencial. si fuera necesario sería posible trabajar a un segundo nivel. descomponiendo cada tarea en sub tareas mediante otra técnica de descomposición. también es usada como técnica de estructuración de programas. La descomposición funcional. la más simple y utilizada es el cauce segmentado de tareas (pipeline). se obtiene como resultado un grafo de dependencia. . Este grafo podrá exhibir diferentes topologías.3DESCOMPOSICIÓN FUNCIONAL DIRIGIDA POR EL FLUJO DE DATOS Tras la descomposición funcional del cálculo.2.5.

𝒂𝟐 . se desea encontrar aquellos números de la lista que son múltiplos de todos los m números primos. 𝒑𝟎 . Se supone que n es varios órdenes de magnitud mayor que m. . 𝒂𝟎 .5. 𝒑𝟏 .2. … .3DESCOMPOSICIÓN FUNCIONAL DIRIGIDA POR EL FLUJO DE DATOS EJEMPLO: . 𝒑𝒎−𝟏 y una lista de n números enteros.Cauce paralelo para filtrar una lista de enteros Dada una serie de m números enteros primos. 𝒂𝟏 . 𝒂𝒏−𝟏 . … .

2.5.3DESCOMPOSICIÓN FUNCIONAL DIRIGIDA POR EL FLUJO DE DATOS .

estos problemas se pueden resolver concurrentemente por tareas diferentes que no requieren ninguna interacción entre sí.4DESCOMPOSICIÓN RECURSIVA Un problema se divide en dos o más sub problemas que se pueden resolver de forma independiente y sus resultados se combinan para dar un resultado final.5. Para implementar esta técnica es muy común usar algún tipo de esquema de planificación basado en granja de tareas. La fuente de paralelismo en este tipo de casos se debe a que la resolución de diferentes sub problemas es completamente independiente. los sub problemas son instancias más pequeñas del problema original. de forma recursiva.2. . En este esquema. por lo que se pueden volver a dividir de la misma forma. las tareas captan sub problemas de una estructura de datos compartida.

• En otro caso. b]. o no interesa que se divida más se obtiene un resultado parcial para el problema global.2. EJEMPLO: aproximar numéricamente el valor de la integral: I= donde f es una función continua en [a.4DESCOMPOSICIÓN RECURSIVA Cuando se resuelve un sub problema pueden ocurrir dos cosas: • Si el sub problema no se puede dividir más. 𝑏 𝑓 𝑎 𝑥 𝑑𝑥 .5. se obtienen nuevos sub problemas que se insertan en la estructura compartida.

5.4DESCOMPOSICIÓN RECURSIVA .2.

5.2.4DESCOMPOSICIÓN RECURSIVA .

5.2.4DESCOMPOSICIÓN RECURSIVA .

EL MODELO DE MEMORIA COMPARTIDA INTEGRANTES: ELVIS VARGAS RAMOS JERSON CORDOVA JUAN HERENCIA JESUS CCALLI .

• Idealizar características que un programador necesita para escribir programas paralelos.INTRODUCCIÓN • Abstracción del multiprocesador con memoria compartida. . • EL PRAM(Parallel Random Acces Machine) es la primera idea del modelo de memoria compartida.

enumerados de 0 a p-1 comparte un espacio único de direcciones de memoria .CARACTERISTICAS Y FUNCIONAMIENTO DEL MODELO • Tenemos un computador paralelo formado por p procesadores .

.

el código se puede particularizar:+ • Cada procesador ejecute un conjunto diferente de instrucciones • Cada procesador ejecute las mismas instrucciones sobres diferentes datos .Funcionamiento computador ideal: • Al iniciar el programa los datos y códigos se encuentran en la memoria • Todos los procesadores ejecutan el mismo código.

• Un procesador cualquiera puede ejecutar operaciones de lectura y escritura .Funcionamiento computador ideal: • Un conjunto de instrucciones se va ejecutando de forma síncrona. Cada instrucción se ejecuta en un ciclo de reloj. • La comunicación entre procesadores se da a traves de la modificación de variables.

REFINAMIENTOS • E = Exclusive (exclusivo) • C =Concurrent (concurrente) • R = Read (lectura) • W =Write (escritura) .

REFINAMIENTOS
• PRAM EREW : No puede contener instrucciones que referencien la
misma posición de memoria , ni para lectura ni escritura

• PRAW CREW : No pueden contener instrucciones que referencien a la
misma posición de memoria para escritura

REFINAMIENTOS
• PRAM ERCW : No pueden contener instrucciones que referencien a la
misma posición de memoria para lectura
• PRAM CRCW: Un programa puede contener instrucciones que
referencien a la misma posición de memoria, para lectura o escritura

NUEVOS REFINAMIENTOS
• Para el caso de los modelos PRAM ERCW y PRAM CRCW se describen
los siguientes protocolos
• Common : Tratan de escribir la misma información. Si la información
es diferente la instrucción fracasa.
• Arbitrary: Se escribe uno de ellos al azar y el resto no se escribe
• Priority: Se escribe con una prioridad preestablecida y el resto no se
escribe
• Sum: Se escribe la suma.

Permite la implementación sencilla de algoritmos paralelos que sigan ciertos estándares. facilitando la labor del programador. • Su inconveniente es la incapacidad de acceder a cualquier posición de memoria en un tiempo constante. modelar máquinas de memoria distribuida y simular sistemas paralelos con memoria caché. .CARENCIAS Y VIRTUDES • El modelo PRAM destaca por su sencillez. capacidad de simular el comportamiento de una gran variedad de máquinas. robustez.

teniendo en cuenta que cada una de ellas consume 1 ciclo de reloj. . El coste del algoritmo se evalúa contando el número de instrucciones efectivas que se ejecutan.ALGORITMO PRAM EREW para el producto Matriz Vector Todos los procesadores del sistema ejecutan simultáneamente el código del algoritmo. Se usa vectores auxiliares para evitar la referenciación simultánea a variables para lectura y/o escritura. particularizándolo en la función del valor de su índice pr.

pr] finpara . Entero m. 14 para f[pr]=0 hasta n[pr] hacer 15 16 x[f[pr]]=x[f[pr]]+A[f[pr]]*B[j[pr].n.i]=b[j] 7 finpara 8 finpara 9 finsi 10 tb[pr]=m[pr]/p 11 Para t[pr]=0 hasta tb[pr]-1 hacer 12 f[pr]=i[pr]+pr*tb[pr] 13 x[f[pr]]=0. Real b[n] Salida Real x[m] tal que x=A+b 1 Si pr=0 entonces 2 Para i=0 hasta p-1 hacer 3 m[i]=m 4 n[i]=n-1 5 Para j=0 hasta n(O) hacer 6 B[j.n]. Real A[m.Entrada: Procesador Pr.

Número de ciclos de reloj en cada instrucción del Algoritmo PRAM EREW Número de instrucción Ciclos consumidos 1 1 2 p(bucle que se repite p veces) 3 1 4 1 5 n(bucle que se repite n veces) 6 1 10 1 11 m/p(bucle que se repite tb=m/p veces) 12 2 13 1 14 n 15 2 .

El número total de ciclos de reloj se obtiene sumando los de cada instrucción y teniendo en cuenta que cada bucle obliga a repetir las intrucciones que contiene el número de veces que se repite. Además por cada paso del bucle debe contarse una instrucción que corresponde al incremento. debemos contarla como 2 ciclos de reloj. Nc=1+p(1+1+1+n(1+1))+ 1 + m/p (1+2+1+n(1+2)) 𝑚 𝑚 Nc = 3𝑛 + 4 + 2𝑛𝑝 + 3𝑝 + 2 𝑝 𝑝 . También si una instrucción contiene una suma y un producto.

Uso de la memoria en las instrucciones 1-10 .

Uso de la memoria en las instrucciones 11-17 .

CARENCIAS Y VIRTUDES El modelo PRAM destaca por su sencillez. robustez. modelar máquinas de memoria distribuida y simular sistemas paralelos con memoria caché. . Su inconveniente es la incapacidad de acceder a cualquier posición de memoria en un tiempo constante. Permite la implementación sencilla de algoritmos paralelos que sigan ciertos estándares. capacidad de simular el comportamiento de una gran variedad de máquinas. facilitando la labor del programador.

. se pasa como parámetro el índice pr del procesador que ejecuta el código. Los índices de las filas y columnas de la matriz A varian de 0 a m-1 y de 0 a n-1. y es un vector de n componentes. m. Supongase que m es un múltiplo del número de procesadores. que resuelven un mismo problema y tratan de ilustrar la forma de funciones de los distintos modelos PRAM Consideremos el problema de escribir y evaluar un algoritmo PRAM que calcule el producto matriz-vector. donde A es una matriz real. x=Ab. y el índice de las componentes del vector b varia de 0 a n-1 .EJEMPLOS DE PROGRAMAS La escritura y funcionamiento de diferentes programas paralelos escritos en pseudocódigo. A. p Expresamos el programa en forma de función que devuelve en memoria el vector x Los parámetros de entrada están también inicialmente en memoria Junto a los datos. respectivamente.m*n . b y sus tamaños. n. Recuerde que cada procesador ejecuta un código que depende de su índice Se ha supuesto que el número de procesadores p es una variable reconocible referenciable por todo los procesadores.

esquema del algoritmo paralelo de multiplicación Matriz-Vector .

algoritmo PRAM CREW para el producto Matrizvectores Este algoritmo muestra cómo se resuelve el problema en el modelo PRAM CREW. . pero al permitir la lectura simultánea ya no es necesario replicar los tamaños de los datos. en este caso continua existiendo la necesidad de crear vectores auxiliares para los índices de los bucles.

finsi Para i[pr]=0 hasta ib-1 hacer F[pr]=i[pr] i pr*ib.n].f[pr]]+b[f[pr]]. Real b[n] Salida Real x[m] tal que x=A+b Si pr=0 entonces ib=m/p.Multiplicación matriz-vector en el modelo PRAM CREW Entrada Procesador px Entero m. X[f[pr]]=0. Para f[pr]=0 hasta n-1 hacer X[f[pr]]=x[f[pr]]+A[f[pr].n Real A[m. Finpara finpara .

uso de la memoria común del algoritmo de multiplicación Matriz Vector en el modelo PRAM CREW .

.

en el caso del producto matriz vector con esta organización. Las únicas escrituras simultáneas del código corresponden al incremento de las variables de control de los bucles. El coste y al temporización de este algoritmo también coincide a con los del Algoritmo PRAM EREW.algoritmo PRAM ERCW COMMON para el producto Matriz-Vector El código para un algoritmo PRAN ERCW COMMON coincide. con el del Algoritmo PRAM EREW. . pero estas deben replicarse por no poder ser accedidas para lectura simultáneamente.

Es como la posibilidad de lectura y/o escritura simultáneamente evita la necesidad de crear copias de los datos y de las variables de índices. lo que hace que este modelo sea mucho más eficiente. .algoritmo PRAM CRCW COMMON para el producto Matriz-Vector El algoritmo en el modelo PRAM CRCW COMMON. Este algoritmo se ejecuta en 3nm/p+4m/p+1 ciclos de reloj.

Para j=0 hasta n-1 hacer X[f[pr]]=x[f[pr]]+A[f[pr]. Para i=0 hasta rb-1 hacer F[pr]=i+pr*ib. X[f[pr]]=0. Real b[n] Salida Real x[m] tal que x=A+b Ib=m/p.multiplicación matriz-vector en el modelo PRAM CGCW COMMON Entrada Procesador pr. Real A[m.n].n.j[*b]j] Finpara finpara . Entero m.

uso de la memoria común del algoritmo de multiplicación Matriz Vector en el modelo PRAM CROW COMMON .

temporización del algoritmo de multiplicación Matriz-Vector en el modelo PRAM CROW COMMON .

con la `propiedad de poder acceder a toda la memoria común . de forma que si se dispone de varios elementos de proceso puede asignarse a cada uno de ellos a un procesador.INFLUENCIA DEL MODELO EN LA PROGRAMACIÓN Una forma de construir un modelo que implemente el modelo de memoria compartida es la utilización de procesos ligeros o threads. . Puede crear threads por cada proceso independiente. Un modelo de programación de esta clase deja al programador la responsabilidad de gestionar el paralelismo utilizando herramientas tradicionales propias de la programación de nivel medio.

. POSIX se a convertido en el estándar de programación mas habitual cuando se usa threads. Otra opción para la programación de los multiprocesadores con memoria compartida es la utilización e compiladores paralelizados.INFLUENCIA DEL MODELO EN LA PROGRAMACIÓN En el mercado actualmente hay disponible diferentes API que permiten utilizar esta técnica de programación en maquinas con memoria compartida. que son capaces de transformar un código escrito en un lenguaje de alto nivel en un código paralelo capaz de ser ejecutado por este tipo de maquinas.

Ventaja del compilador : Permiten al programador expresar a través de directivas de compilación las zonas de código que desea que se ejecute en forma paralela. Determina aquellas operaciones que se pueden ejecutar simultáneamente y generar distintos threads para cada una de ellas. Puede lanzar procesos independientes a nivel de subprogramas o a nivel de bucle. .

OpenMP Trata de unificar el uso de directivas dando mayor compatibilidad y legibilidad a los distintos compiladores existentes hasta el momento. por lo que podemos considerarlo una herramienta fundamental para programar este tipo de maquinas. . El estándar ha sido adoptado por la mayor parte de los fabricantes.

Directivas Parallel – Sección de código a ejecutar en paralelo. – Sections Secciones independientes en paralelo – For Ciclo subdividido en paralelo – Single Código ejecutado por un único thread .

Estándar OpenMP Empresas/Organizaciones involucradas:  Compaq / Digital  Hewlett-Packard Company  Intel Corporation  International Business Machines (IBM)  Kuck & Associates.  U. Inc. Inc.S. Inc. (KAI)  Silicon Graphics. Department of Energy ASC program  Otras… .  Sun Microsystems.

and MacOSX. Windows – Compile with -fopenmp IBM XL C/C++ / Fortran (BlueGene) – Windows.Compiladores OpenMP GNU: gcc (4. – Compile with -Qopenmp on Windows.3. MacOSX. Solaris. AIX and Linux.Linux.2) – Free and open source . or just -openmp on Linux or Mac OSXº . Linux. AIX. – Compile with -qsmp=omp Intel C/C++ / Fortran – Windows.

METODOLOGIAS DE LA PROGRAMACION PARALELA DESCOMPOSICION EXPLORATORIA Franz Cruz Ucharico William Ramos Mendoza Gracian Mamani Tapia Anthony Arribasplata Ramos 2011-119055 2011-119052 2011-119010 2010- .

.DESCOMPOSICION EXPLORATORIA : • Apropiado para descomponer cálculos basado en la búsqueda de un espacio de soluciones. ya que no se tiene demasiada información sobre la principal estructura de datos del problema. • En estos casos puede que no sea posible aplicar descomposición de dominio.

• De esta forma la búsqueda en cada una de las partes se realiza concurrentemente con la búsqueda en el resto de partes. hasta encontrar la solución o soluciones deseadas.Técnica: • Consiste en ir descomponiendo el espacio de búsqueda en partes de menor tamaño (Conforme se va explorando) para. . a continuación. asignar cada parte a una tarea diferente.

Ámbito e ideas generales :
• Ámbito: Búsqueda de soluciones en un espacio de estados.
• Idea: descomposición dinámica del espacio de búsqueda en partes menores mas
exploración concurrente de cada parte por tarea diferente. Interesa establecer
estructura de árbol de posibles soluciones.
• Estrategia de descomposición común: Generar niveles de estados desde estado
inicial. Cuando se tengan suficientes nodos cada tarea explora un conjunto de
nodos diferentes.
• Casos:
• Búsqueda exhaustiva: finaliza cuando no existan nodos.
• Búsqueda primera solución: Terea que encuentra solución informa resto de
final.

Problema de la suma del subconjunto
• Dado un conjunto de n enteros, C={a0, a1,….., an-1}, y un
entero v, se desea encontrar ´C c C tal que:

Representación de un subconjunto ´C c C
• Se indexan los valores enteros de C. Cada ai queda
identificado unívocamente con un i (i=0,…,n-1).
• Un conjunto ´C de C queda representado de forma
univoca mediante una secuencia de n dígitos.

Problema de la Suma del Subconjunto
ESTRUCTURA DEL ESPACIO. ARBOL BINARIO
• Nodo hoja: representa un subconjunto diferente de C= secuencia binaria
particular de n cifras.
• Nodo interno: representa a todos los subconjuntos alcanzables a partir de
sus descendientes. La representación es similar a un nodo hoja pero
usando símbolo comodín (X).
EXPLORACION DE UN NODO INTERNO:
Se determina el símbolo comodín X situado mas a la izquierda en la etiqueta.
• Hijo izquierdo se crea fijando dicha posición a 0.
• Hijo derecho se obtiene fijando dicha posición a 1.

Descomposición de una instancia del problema .

Descomposición Especulativa .

. • Pero aun así es posible obtener alguna ganancia en velocidad bajo ciertas condiciones.• Puede que no exista posibilidad de obtener ninguna ganancia en velocidad mediante una formulación paralela debido a la existencia de dependencia de datos complejas.

• La técnica de descomposición se basa en especular sobre los posibles resultados del calculo de la etapa previa. . realizando la ejecución de los cálculos posteriores de forma anticipada y en paralelo con el calculo previo.

Ejemplo • Supongamos una aplicación en la que cada cierto tiempo se debe realizar el procesamiento rápido de un elemento de un conjunto de datos. Teniendo en cuenta el tipo. Dicho procesamiento se estructura en dos fases. una fase inicial en la cual se establece que tipo de elemento es. y una fase posterior en la que se procesa dicho elemento. Para obtener el resultado deseado. .

Inicio Selección de tipo Inicio Estimación Tipo estimado Procesamiento tipo Procesamiento tipo con retroceso condicional Resultado Resultado Selección tipo .

.En resumen: En este tipo de descomposición se adelanta cálculo que hay que realizar selectivamente (todas las ramas o las estimadas más probables) para reducir el tiempo medio de respuesta.

Enfoques mixtos .

ya que tienen un gran impacto sobre la siguiente etapa de diseño paralelo .Factores a considerar en la descomposición • Se mostrara una serie de factores que deben tenerse en cuenta para obtener una buena descomposición.

 En cambio se habla de creación dinámica cuando las tareas se crean durante la ejecución del programa.Características de las tareas resultantes • Creación estática/dinámica.• Cuando todas las tareas que participan se crean al inicio de su ejecución. se habla de creación estática de tareas.  No se conoce el número de tareas ni la estructura del grafo de dependencia antes de la ejecución . • Por su naturaleza la descomposición funcional de un problema genera un numero fijo de tareas que no cambia en tiempo de ejecución.

de cara a establecer un buen esquema de asignación. conocer el tamaño de las tareas o poder estimarlo antes de la ejecución . es aconsejable obtener un orden de magnitud más de tareas que de procesadores. • Si se conoce cual es el número máximo de procesadores que tiene la maquina.• NUMERO DE TAREAS OBTENIDAS.• Interesa que el número de tareas sea suficientemente grande para no perder flexibilidad en la asignación de tareas a procesadores. • Lo ideal es que el número de tareas escale con el tamaño del problema • CONSIDERACIONES SOBRE EL TAMAÑO DE LAS TAREAS • Generalmente interesa que todas las tareas tengan un cose similar para facilitar la etapa de asignación de tareas • También resulta de enorme interés.

la escalabilidad dl algoritmo se puede ver comprometida en la etapa de asignación • CONSIDERACIONES SOBRE EL TAMAÑO DE LOS DATOS ASOCIADOS A TAREAS • Como los datos ligados a una tarea deben ser accesibles por el proceso que ejecuta dicha tarea.• REPLICACION DE DATOS/CALCULOS. Es muy importante tener en cuenta el tamaño y la localización de los datos que va a requerir cada tarea antes de la fase de asignación.• En la fase de descomposición es aconsejable evitar que las tareas compartan muchos de los cálculos • Si hay demasiada replicación de datos o cómputo entre tareas. • Esta información es decisiva para determinar durante la asignación cual es el proceso que podría realizar dicha tarea sin incurrir en una sobrecarga de comunicación excesiva .

y se pueden caracterizar usando diferentes ejes.La necesidad de comunicación y sincronización entre las tareas concurrentes se plasma. tras la fase de descomposición.TIPOS DE PATRONES DE COMUNICACIÓN ENTRE TAREAS 1. entre los que destacaremos los siguientes .

Patrones Locales/Globales • Un calculo paralelo presenta un patrón de comunicación local cuando cada tarea necesita interactuar con un conjunto pequeño de tareas para realizar dicho calculo. • Se presenta un patrón de comunicación global cuando múltiples tareas deben aportar datos para realizar un calculo en paralelo • El diseño de este tipo de estructuras de comunicación conlleva a la transformación de los patrones de interacción globales en estructuras de comunicación algo mas complejas pero que sigan patrones de interaccion local .

• Patrones Estáticos: un estructura es de comunicación es estática si cada tarea se comunica con otras en tiempos conocidos a priori y el conjunto de tareas con las que se comunica en cada fase también se conocen a priori. . • Patrones Dinámicos: En una estructura dinámica no se conocen a priori ni los momentos en que se producirán las comunicaciones ni que tareas se verán envueltas en cada comunicación.

• Patrones Regulares: Hablamos de que una estructura de comunicación es regular cuando exhibe un topología espacial que podría aprovecharse para mejorar la eficiencia computacional. • Patrones Irregulares: Las estructuras irregulares y dinámicas complican la asignación y la programación cuando se siguen los modelos basados en paso de mensajes. .

• Lectura-escritura: las tareas acceden a los datos compartidos para leer y también para escribir.• Acceso compartido de solo lectura/lectura-escritura: • Solo lectura: las tareas concurrentes solo necesitan acceder a los datos compartidos para lectura pero no para escritura. .

. • Comunicación bilateral: Cuando los datos que necesita una tarea son proporcionados de forma explícita por otra tarea o tareas(productoras).• Comunicación unilateral/bilateral: • Comunicación unilateral: Cuando una tarea inicia la comunicación y la completa sin interrumpir la tarea o tareas productoras de los datos.

Análisis de Algoritmos Paralelos Integrantes: - - José Luis Lanchipa jilaja 119040 2011- - Jackeline ancco chambi 2010-35548 - Edyth Ninahuaman choque 2012-36182 Yordy chura chura 2010-35529 .

Hay otros criterios a tener en cuenta a la hora de desarrollar algoritmos: • Facilidad de programación • Robustez • Posibilidad de reutilización • Portabilidad • Facilidad de mantenimiento Se intenta que los programas se ejecuten en poco tiempo y usen poca memoria.ANALISIS DE ALGORITMOS Se llama eficiencia de un algoritmo a la relación entre lo recursos que consume y los resultados que obtiene. .

• Los tipos de datos utilizados. .Factores externos que influyen en el tiempo de ejecución: • El lenguaje y el programa en que se implemente el algoritmo. • Los usuarios que están trabajando en el sistema. • El compilador utilizado. • La máquina en que se ejecuta.

. • Para determinar si un algoritmo es bueno.ANÁLISIS A PRIORI Y A POSTERIORI Se puede hacer un estudio del algoritmo a priori. Este estudio tiene sentido por varios motivos: • Para identificar puntos del algoritmo que es mejor programar de una cierta manera. • Para poder determinar entre dos algoritmos dados cuál es preferible. • Para determinar el tamaño de los problemas que podemos resolver dependiendo de las limitaciones de tiempo y de la memoria de que dispongamos.

identificar los puntos que .Estudio a posteriori: • Para comparar dos programas de manera que se pueda decidir cuál es preferible utilizar en la solución del problema. • Para encontrar la causa del mal funcionamiento de un programa o pueden ser mejorados.

mientras que el experimental solo se puede hacer a posteriori.El estudio de un algoritmo se puede hacer de manera: • Teórica • Experimental. El estudio teórico puede ser a priori o a posteriori. .

Tipos de estudios teóricos: • El tiempo en el caso más favorable (𝑡𝑚 (𝑛)): es el tiempo de ejecución con la entrada que produce el tiempo mínimo. • El tiempo promedio (𝑡𝑝 (𝑛)): se calcula contando las operaciones y multiplicando cada operación por la probabilidad de que se ejecute. • El tiempo en el caso más desfavorable (𝑡𝑀 (𝑛)): es el tiempo de ejecución con la entrada que produce el tiempo máximo. .

Los tiempos en el caso más favorable y el caso más desfavorable nos sirven como cotas del tiempo de ejecución. se puede intentar acotarlo o calcular la forma en que crece.Tiempos de ejecución El tiempo de ejecución se define como el tiempo que transcurre desde que empieza la ejecución del programa hasta que se obtienen los resultados. Se denota como: t(n) Si no se puede estimar el tiempo. .

Para cualquiera de los tiempos tratados puede ocurrir que por las características del algoritmo. sirve como cota superior de 𝑡 𝑛 . En esto casos se puede intentar encontrar una cota inferior y otra superior. no seamos capaces de determinar su valor. • El tiempo en el caso más desfavorable.𝑡𝑀 (𝑛).• El tiempo en el caso más favorable sirve como cota inferior del tiempo de ejecución. Una cola inferior de 𝑡𝑚 (𝑛) nos sirve como cota inferior de 𝑡 𝑛 . .

Los tiempo de ejecución sirven también para la ocupación de memoria. Tendremos las siguientes medidas de ocupación de memoria: • Memoria en el caso más favorable (𝑚𝑚 (𝑛)) • Memoria en el caso mas desfavorable (𝑚𝑀 (𝑛)) • Memoria promedio 𝑚𝑝 𝑛 .Ocupación de Memoria Es la cantidad de memoria necesaria para poder ejecutar el programa.

mientras que el tiempo sí.Estudio teórico • En muchos casos la ocupación no depende del contenido de la entrada. • El coste del tiempo de ejecución suele ser mayor que el de la ocupación de memoria. .

y si no es posible se puede utilizar el numero de instrucciones de la rama mas costosa para obtener una cota superior. pero asignando costes distintos a instrucciones de distinto tipo. • Si tenemos una bifurcación. . con índices que indican los sucesivos pasos por el bucle. • En el caso de bucles se pueden expresar con un sumatorio.Conteo de instrucciones • Decidir las instrucciones que se quieren contar. • Se puede decidir contar las instrucciones. primero se cuenta el número de instrucciones de las funciones y en cada llamada se sustituye ese número. habrá que contar el número de veces que se pasa por cada rama. • Si tenemos llamadas a funciones. y el de la menos costosa para obtener una cota inferior.

se puede sumar el numero promedio de veces que se ejecuta cada instrucción. así por ejemplo.Conteo en el caso promedio El estudio del caso promedio a veces suele ser muy costoso por lo que es preferible calcularlo por conteo de instrucciones. .

. Cuando el tamaño de la entrada crece.Notaciones asintóticas El coste de las instrucciones y la memoria que se necesita para almacenar un dato depende de diversos factores externos al algoritmo. y cuando estudiamos el tiempo nos interesa poder predecirlo para los distintos tamaños de la entrada. los términos de menor orden en la fórmula teórica pierden importancia.

• Notación Ω Se utiliza para acotar inferiormente la forma en que crece la función. . salvo constantes y asintóticamente la forma en que crece la función.• Notación O Se utiliza para acotar superiormente.

La Notación Ω • La notación Ω se utiliza para acotar inferiormente la forma en la que crece una función. .

Definición
Dada una función f: 𝑁 → R+ b llamaremos Ω de f al conjunto de todas las
funciones de N en R+ acotadas inferiormente por un múltiplo real positivo de f
para valores de n suficientemente grandes. Se denota Ω(f) y se define como:

Algunas relaciones de orden en el conjunto de los omegas de las funciones:

Ω(f)≤ Ω(g)

Ω(f) ⊂ Ω(g)

La Notación ϴ
Dada una función f : N
R+, llamamos orden exacto de f al conjunto de todas las
funciones de N en R+ que crecen (salvo constantes y asintóticamente) de la misma forma
que f. Se denota ϴ(f), y será:

ϴ(f) = O(f) ∩ Ω(f)
ϴ(f) = { t: N → R+ /∃c, d є R+ ,∃n0 є N, ∀n ≥ n0 : c f (n) ≤ t(n) ≤ d f (n)}

Definición: Dada una función f: N → R+ .Notación o (o. llamamos o pequeña de f al conjunto: 𝑡(𝑛) 𝑜 𝑓 = { 𝑡: 𝑁 → lim −1 𝑛→∞ 𝑓(𝑛) .pequeña) Esta notación se utiliza cuando se desea perder los coeficientes del termino de mayor orden.

Ecuaciones de Recurrencia En el análisis de algoritmos se suele llegar a ecuaciones de recurrencia que se presentan como: .

y exponenciales y factoriales en tiempos de ejecución de algoritmos que son inaplicables . logarítmicas y productos de estas.Complejidades mas Frecuentes Las medidas mas frecuentes que aparecen en eel estudio de los algoritmos son las polinómicas. También aparecen en algunos casos raíces.

• Método de la Ecuación característica: Consiste en obtener. una ecuación polinómica cuyas soluciones proporcionan la solución de la ecuación de recurrencia • Utilización de Formulas Maestras: En el estudio de los algoritmos se repiten con mas frecuencia ecuaciones de algunos tipos básicos. a partir de la ecuación de recurrencia y de manera sistémica. . identificar a que tipo pertenece su ecuación.Técnicas para la resolución de ecuaciones de Recurrencia • Expansión de la Recurrencia: ocnsiste en exapndir al recurrencia hasta llegar a un caso base. por lo que se podría tener la solución de estos tipos básicos y dado un algoritmo.

Ley de Amdahl .

• Define el speedup (aceleración) que se puede alcanzar al usar cierta mejora.Definición • Evalúa como cambia el rendimiento al mejorar una parte de la computadora. Speedup  Rendimient o al usar la mejora Rendimient o sin usar la mejora • Alternativamente Speedup  Universidad de Sonora Tiempo de ejecución sin la mejora Tiempo de ejecución con la mejora Arquitectura de Computadoras 110 .

Aceleración de la fracción que puede ser mejorada. Speedupmejora = 20/12. entonces Fracciónmejora = 20/60. Universidad de Sonora Arquitectura de Computadoras 111 .Factores • El speedup depende de dos factores: 1. La fracción del proceso original que puede ser mejorado. Si la mejora hace que la parte que tardaba 20 segundos ahora tarde 12. Si la mejora afecta 20 segundos de un proceso que tarda 60 segundos. 2.

 Fracciónmejora   Tiempo de ejecuciónnuevo  Tiempo de ejecuciónviejo   (1 .Tiempo de ejecución • El tiempo de ejecución mejorado es igual al tiempo que no se usa la mejora mas el tiempo que si usa la mejora.Fracciónmejora)  Speedupmejora   Universidad de Sonora Arquitectura de Computadoras 112 .

• Speedupmejora: 20/12 = 1.333/1.2) = 60 x (0. • Fracciónmejora: 20/60 = 0. • Tiempo de ejecución con la mejora: 60 x ((1 – 0.667) = 60 x (0.667.333) + 0.867) = 52 Universidad de Sonora Arquitectura de Computadoras 113 .Ejemplo • Tiempo de ejecución original: 60 segundos.667 + 0. • Mejora: 20 segundos se hacen ahora en 12.333.

Speedup global • El speedup global es: Tiempo de ejecuciónoriginal Speedupglobal  Tiempo de ejecuciónmejora  Alternativamente: 1 Speedupglobal  (1 .Fracciónmejora)  Universidad de Sonora Arquitectura de Computadoras Fracciónmejora Speedupmejora 114 .

667. Universidad de Sonora Arquitectura de Computadoras 115 .333. • Speedupmejora: 20/12 = 1. • Speedupglobal = 60 / 52 = 1.15.667)) = 1. • Speedupglobal = 1 / ((1 – 0.15. • Tiempo de ejecución original: 60 segundos.333) + (0.333 / 1. • Tiempo de ejecución con la mejora: 52 segundos.Ejemplo • Fracciónmejora: 20/60 = 0.

Otro ejemplo • Un programa tarda 100 segundos en correr. • El programa pasa 80 segundos en un procedimiento. • ¿Qué tanto se debe mejorar ese procedimiento para que todo el programa corra 5 veces más rápido? Universidad de Sonora Arquitectura de Computadoras 116 .

• Tiempo de ejecución nuevo: 20 segundos. Universidad de Sonora Arquitectura de Computadoras 117 . • Fracción mejorada: 80 / 100 = 0.Otro ejemplo • Usamos la ley de Amdahl:  Fracciónmejora   Tiempo de ejecuciónnuevo  Tiempo de ejecuciónviejo   (1 .8 • Falta por saber el speedup de la mejora.Fracciónmejora)  Speedup mejora   • Tiempo de ejecución original: 100 segundos.

8 / Speedupmejora) • 20 = 20 x 80 / Speedupmejora • 20 – 20 = 80 / Speedupmejora • 0 = 80 / Speedupmejora • No hay forma de que el programa mejorado corra en 20 segundos. Universidad de Sonora Arquitectura de Computadoras 118 .8) + (0.2 + 0.Otro ejemplo • 20 = 100 x ((1 – 0.8 / Speedupmejora)) • 20 = 100 x (0.

1 Speedupglobal  1 .Corolario de la ley de Amdahl • El speedup global está limitado por la fracción del programa que se puede mejorar.Fracciónmejora  ¿Cómo se interpreta ese límite cuando Fracciónmejora es 1? Universidad de Sonora Arquitectura de Computadoras 119 .

• ¿Cuál es el speedup global con la nueva CPU? Universidad de Sonora Arquitectura de Computadoras 120 .Ejemplo • Se tiene un servidor de Web. • Se le cambia la CPU por una CPU que es 10 veces más rápida que la antigua. • La CPU antigua estaba 40% del tiempo haciendo cálculos y 60% ociosa esperando I/O.

• El corolario de la ley de Amdahl limita el speedup global: Speedupglobal < 1 / (1 – 0.Fracciónmejora)  Universidad de Sonora Arquitectura de Computadoras Fracciónmejora Speedupmejora 121 .4.4) = 1.67 • Usando la ley de Amdahl. • Speedup de la mejora: 10.Ejemplo • Fracción que se puede mejorar: 40% = 0. el speedup global es: Speedupglobal  1 (1 .

4 / 10)) = 1.4) + (0.56 veces más rápido que el servidor con la antigua CPU. Universidad de Sonora Arquitectura de Computadoras 122 .56 • El servidor con la nueva CPU es 1.Ejemplo • El speedup global es: 1 / ((1 – 0.

Se quiere mejorar un programa que hace ciertos cálculos.6 veces más rápido. Comprar un chip que acelera el 20% del programa 10 veces. Hay dos opciones: 1. • ¿Qué opción ofrece mejor speedup? Universidad de Sonora Arquitectura de Computadoras 123 . 2.Aplicaciones • • La ley de Amdahl se puede usar para comparar entre dos opciones. Recodificar el 50% del programa para que corra 1.

2) + (0.Aplicaciones • Se usa la ley de Amdahl: Speedupglobal  1 (1 .Fracciónmejora)  Fracciónmejora Speedupmejora • Opción 1: • Fracciónmejora = 0.2 / 10)) = 1.2 • Speedupmejora = 10 • Speedupglobal = 1 / ((1 – 0.219 Universidad de Sonora Arquitectura de Computadoras 124 .

5 / 1.Aplicaciones • Opción 2: • Fracciónmejora = 0.5) + (0.231. Universidad de Sonora Arquitectura de Computadoras 125 .5 • Speedupmejora = 1. • Hay que considerar otros factores en la decisión.6)) = 1.6 • Speedupglobal = 1 / ((1 – 0.219 y 1.231 • No hay mucha diferencia entre 1.