Está en la página 1de 21

Presentación

Nombres:
Edward Manuel
Apellidos:
Arredondo Maleno
Matricula:
1-17-5078
Materia:
Algoritmo paralelo
Profesor:
Eduardo Arvelo
Fecha:
26/06/2021
ÍNDICE
I. INTRODUCCIÓN.......................................................................................................................3
II. JUSTIFICACIÓN........................................................................................................................4
III. MARCO TEORICO.................................................................................................................5
3.1. DEFINICIÓN DEL ALGORITMOS PARALELOS..............................................................5
3.2. ETAPAS DE LOS ALGORITMOS PARALELOS................................................................5
3.2.1. PARTICIÓN:..................................................................................................................5
3.2.2. COMUNICACIÓN:..........................................................................................................6
3.2.3. AGRUPAMIENTO:........................................................................................................7
3.2.4. ASIGNACIÓN:................................................................................................................7
3.3. TÉCNICAS ALGORITMICAS PARALELAS.......................................................................9
3.4. MODELOS DE ALGORITMOS PARALELOS....................................................................9
IV. CONCLUSIONES..................................................................................................................10
V. LINKOGRAFÍA........................................................................................................................11
I. INTRODUCCIÓN
La mayoría de los algoritmos actuales son secuenciales, es decir, especifican una
secuencia de pasos en los que cada paso consiste en una sola operació n. Estos
algoritmos se adaptan bien a las computadoras actuales, que bá sicamente realizan
operaciones de forma secuencial.
Aunque la velocidad a la que operan las computadoras secuenciales ha mejorado a
una tasa exponencial durante muchos añ os, ahora la mejora tiene un costo cada
vez mayor. Como consecuencia, los investigadores han buscado mejoras má s
rentables mediante la construcció n de computadoras "paralelas": computadoras
que realizan operaciones mú ltiples en un solo paso.
Para resolver un problema de manera eficiente en una má quina paralela,
generalmente es necesario diseñ ar un algoritmo que especifique operaciones
mú ltiples en cada paso, es decir, un algoritmo paralelo
II. MARCO TEORICO

II.1. DEFINICIÓN DEL ALGORITMOS PARALELOS


Son métodos de resolució n de problemas donde ejecuta procesos por partes en el
mismo instante de tiempo por varias unidades de procesamiento para unir las
partes y obtener un resultado correcto. El termino proceso se puede definir como
parte de un programa que se ejecuta por un procesador.
El problema se divide en un conjunto de subproblemas que pueden ser resueltos
simultá neamente por procesadores independientes.
La paralizació n es muy utilizada en los procesadores modernos porque es má s
rá pido resolver tareas de computació n mediante esta técnica en comparació n con
técnicas secuenciales.
Ejemplo de Paralización en la vida cotidiana: En una librería llegan un
conjunto de libros, los bibliotecarios tienen 3 días para guardar los libros. La
solució n basada en paralizació n será que cada uno de ellos agrupe los libros por
determinadas categorías al mismo tiempo.

II.2. PRINCIPIOS DE LOS ALGORITMOS PARALELOS


El desarrollo de algoritmos es un componente crítico de la resolució n de
problemas usando computadoras. Un algoritmo secuencial es esencialmente una
secuencia de pasos bá sicos para resolver un problema determinado usando una
computadora en serie. De manera similar, un algoritmo paralelo es una receta que
nos dice có mo resolver un problema dado usando mú ltiples procesadores. Sin
embargo, especificar un algoritmo paralelo implica má s que solo especificar los
pasos. Como mínimo, un algoritmo paralelo tiene la dimensió n adicional de
concurrencia y el diseñ ador del algoritmo debe especificar conjuntos de pasos
que se pueden ejecutar simultá neamente. Esto es esencial para obtener cualquier
beneficio de rendimiento del uso de una computadora paralela. En la prá ctica, la
especificació n de un algoritmo paralelo no trivial puede incluir algunos o todos de
los siguientes:
Identificar partes del trabajo que se pueden realizar al mismo tiempo.
Mapeo de los trabajos simultá neos en mú ltiples procesos que se ejecutan
en paralelo.
Distribuir los datos de entrada, salida e intermedios asociados con el
programa.
Gestionar accesos a datos compartidos por mú ltiples procesadores.
Sincronizació n de los procesadores en varias etapas de la ejecució n del
programa paralelo.
II.3. ETAPAS DE LOS ALGORITMOS PARALELOS
II.3.1. PARTICIÓN:
Esta etapa consiste en dividir o descomponer el problema en componentes o
tareas pequeñ as, que pueden ser ejecutados concurrentemente (J. Aguilar, E.
Leiss, 2004). Para lograr una buena partició n se divide tanto los cálculos asociados
con el problema
Descomposición de dominio: Conocido como paralelismo de datos, en
donde los datos son divididos en partes de aproximadamente el mismo
tamañ o, para ser asignadas a diferentes procesadores, cada uno de ellos
trabaja só lo con la parte de datos que le son asignados. Por supuesto, los
procesadores pueden necesitar comunicarse para intercambiar datos. El
algoritmo con paralelismo de datos consiste en una secuencia de
instrucciones aplicadas a distintos datos. (Cerverón Vicente, sf).

Descomposición funcional: Conocido como paralelismo de tareas, consiste


en dividir el problema en un gran nú mero de partes má s pequeñ as (muchas
má s partes que procesadores disponibles) y las subtareas son asignadas a los
procesadores disponibles. De manera que, cuando un procesador termina una
subtarea, recibe otra subtarea hasta que queden resueltas todas.
El paralelismo de tareas se implementa sobre un paradigma de maestro y
esclavos. El proceso maestro va asignando las subtareas a los procesos
esclavos, recogiendo los resultados producidos y asignando subtareas
restantes. (Cerveró n Vicente, sf).

Al particionar se deben tener en cuenta los siguientes aspectos:


 El nú mero de tareas debe ser por lo menos un orden de magnitud superior
al nú mero de procesadores disponibles para tener flexibilidad en las
etapas siguientes.
 Tratar que las tareas sean de tamañ os equivalentes, ya que, facilita el
balanceo de la carga de los procesadores.
 El nú mero de tareas debe ser proporcional al tamañ o del problema. Así, se
podrá resolver problemas má s grandes cuando se tenga má s
procesadores. Es decir, que el algoritmo sea escalable. (Hoeger Herbert,
sf).

II.3.2. COMUNICACIÓN:
Las tareas generadas por una partició n pueden ejecutarse concurrentemente
pero no pueden, en general, ejecutarse independientemente. Los cá lculos en la
ejecució n de una tarea normalmente requerirá n de datos asociados con otras
tareas. Los datos deben transferirse entre las tareas y así permitir que los cálculos
procedan.
En la descomposició n por dominio, la comunicació n puede ser difícil de
determinar (hay que identificar las operaciones que requieren datos de diferentes
fuentes). En cambio, en la descomposició n funcional, es fá cil de determinar, ya
que las interrelaciones entre las tareas vienen dadas por las funciones que realiza
cada una, y de las cuales quizá s la otra depende. (J. Aguilar, E. Leiss, 2004).
Los tipos de comunicació n está categorizada de la siguiente manera:
Comunicación local y global: Cuando un nú mero pequeñ o de tareas
necesitan valores de otras tareas se crean canales entre las tareas envueltas.
Una tarea se comunica solamente con sus vecinos. Esta es comunicació n local.
Y la comunicació n global ocurre cuando todas o casi todas tareas necesitan
valores de las otras tareas, es decir, cada tarea se comunica con todas, o casi
todas. Así, en una comunicació n global, muchas tareas pueden participar, lo
que puede conllevar a muchas comunicaciones.
Comunicación estructurada y no estructurada: En este tipo de
comunicació n, el patró n de comunicació n de una tarea con sus vecinos forma
una estructura regular, por ejemplo, del tipo á rbol o malla. Las no
estructuradas pueden generar grafos de comunicació n arbitrarios.
Comunicación estática o dinámica: La comunicació n está tica establece
patrones de comunicació n que no cambian en el tiempo, mientras que la
diná mica puede ser solamente determinada durante el tiempo de ejecució n de
la aplicació n.
Comunicación síncrona o asíncrona: La comunicació n síncrona implica que
las tareas se ejecutan coordinadamente (es decir, se deben sincronizar entre
ellas), y la asíncrona significa que cada tarea puede ejecutarse al obtener los
datos que requiere, sin tener que esperar por otras tareas. (J. Aguilar, E. Leiss,
2004).

La comunicació n requerida por un algoritmo puede ser definida en dos fases.


Primero se definen los canales que conectan las tareas que requieren datos con
las que los poseen. Segundo se especifica la informació n o mensajes que deben ser
enviado y recibidos en estos canales. (Gilberto Díaz, 2010).
En la etapa de comunicació n hay que tener en cuenta los siguientes aspectos:
 Todas las tareas deben efectuar aproximadamente el mismo nú mero de
operaciones de comunicació n. De lo contrario, el algoritmo no sea
extensible a problemas mayores, ya que, habrá cuellos de botella.
 La comunicació n entre tareas debe ser tan pequeñ a como sea posible.
 Las operaciones de comunicació n y los có mputos de diferentes tareas
deben poder proceder concurrentemente. (Hoeger Herbert, sf).

II.3.3. AGRUPAMIENTO:
Las tareas y las estructuras de comunicació n definidas en las dos primeras etapas
del diseñ o son evaluadas con respecto a los requerimientos de ejecució n y costos
de implementació n: Si es necesario, las tareas son combinadas en tareas má s
grandes para mejorar la ejecució n o para reducir los costos de comunicació n y
sincronizació n.
Reduciendo el nú mero de mensajes, a pesar de que se envíe la misma cantidad de
informació n, se reduce el costo de crear un nuevo canal de comunicació n. (J.
Aguilar, E. Leiss, 2004).

En la etapa de agrupació n se debe tener en cuenta los siguientes aspectos:


 Verificar si la agrupació n redujo los costos de comunicació n.
 Si se han replicado có mputos y/o datos, se debe verificar que los beneficios
son superiores a los costos.
 Revisar si el nú mero de tareas es extensible con el tamañ o del problema.
 Si el agrupamiento ha reducido las oportunidades de ejecució n
concurrente, se debe verificar que aú n hay suficiente concurrencia y
posiblemente considerar diseñ os alternativos.
 Analizar si aú n se puede reducir el nú mero de tareas sin introducir
desbalances de cargas o reducir la extensibilidad. (Hoeger Herbert, sf).

II.3.4. ASIGNACIÓN:
En esta etapa, cada tarea es asignada a un procesador de tal modo que intente
satisfacer las metas de competencia al maximizar la utilizació n del procesador y
minimizar los costos de comunicació n. (J. Aguilar, E. Leiss, 2004).
La asignació n puede ser está tica (se establece antes de la ejecució n del programa)
o en tiempo de ejecució n mediante algoritmos de balanceo de carga.
La asignació n de tareas puede ser realizada de las siguientes maneras:
Asignación estática: Aquí, las tareas son asignadas a un procesador al
comienzo de la ejecució n del algoritmo paralelo y corren ahí hasta el final.
En ciertos casos puede resultar en un tiempo de ejecució n menor respecto
a asignaciones diná micas y también puede reducir el costo de creació n de
procesos, sincronizació n y terminació n.
Asignación dinámica: Se hacen cambios en la distribució n de las tareas
entre los procesadores a tiempo de ejecució n, o sea, hay migració n de
tareas a tiempo de ejecució n. Esto es con el fin de balancear la carga del
sistema y reducir el tiempo de ejecució n. Sin embargo, el costo de
balanceo puede ser significativo y por ende incrementar el tiempo de
ejecució n. (Hoeger Herbert, sf).

Entre los puntos que hay que revisar en esta etapa encontramos:
 Si se han considerado algoritmos con un nú mero está tico de tareas y
algoritmos de creació n diná mica de tareas.
 Si se usan algoritmos centralizados de balanceo, hay que asegurarse
de que no sea un cuello de botella.
 Evaluar los costos de las diferentes alternativas de balanceo diná mico,
en caso de que se usen, y que su costo no sea mayor que los beneficios.
(Hoeger Herbert, sf).

II.4.
TÉCNICAS

Ilustración 1: Etapas de los Algoritmos Paralelos

ALGORITMICAS PARALELAS
En el diseñ o de algoritmos paralelos existen técnicas generales que se pueden
utilizar una variedad de á reas. Algunos son variantes de técnicas secuenciales
está ndar y otros son nuevos para los algoritmos paralelos

II.4.1. DIVIDE Y CONQUISTARÁS:


Un algoritmo divide y vencerá s divide el problema a ser resuelto en
subproblemas que son má s fá ciles de resolver que el problema original, resuelve
los subproblemas, y se funde las soluciones a los subproblemas para construir
una solució n al problema original.
El paradigma de dividir y conquistar mejora la modularidad del programa y, a
menudo, conduce a algoritmos simples y eficientes. Por lo tanto, ha demostrado
ser una herramienta poderosa para los diseñ adores de algoritmos secuenciales.
Dividir y vencer juega un papel aú n má s destacado en el diseñ o de algoritmos
paralelos. Debido a que los subproblemas creados en el primer paso son
típicamente independientes, se pueden resolver en paralelo. A menudo, los
subproblemas se resuelven de forma recursiva y, por lo tanto, el siguiente paso de
divisió n produce incluso má s subproblemas para ser resueltos en paralelo. Como
consecuencia, incluso los algoritmos de divisió n y conquista que fueron diseñ ados
para má quinas secuenciales típicamente tienen cierto paralelismo inherente. Sin
embargo, tenga en cuenta que para poder
Dividir y conquistar para producir un algoritmo altamente paralelo, a menudo es
necesario paralelizar el paso de divisió n y el paso de fusió n. También es comú n en
algoritmos paralelos dividir el problema original en tantos subproblemas como
sea posible, de modo que todos puedan resolverse en paralelo.

II.4.2. ALEATORIZACION
Los nú meros aleatorios se utilizan en algoritmos paralelos para garantizar que los
procesadores puedan tomar decisiones locales que, con alta probabilidad, se
suman a buenas decisiones globales. Aquí consideramos tres usos de la
aleatoriedad.
Muestreo: Un uso de la aleatoriedad es seleccionar una muestra
representativa de un conjunto de elementos. A menudo, un problema se
puede resolver seleccionando una muestra, resolviendo el problema en
esa muestra y luego usando la solució n para la muestra para guiar la
solució n para el conjunto original. Por ejemplo, supongamos que
queremos ordenar una colecció n de claves enteras. Esto se puede lograr
dividiendo las llaves en cubetas y luego clasificando dentro de cada
cubeta. Para que esto funcione bien, las cubetas deben representar
intervalos no superpuestos de valores enteros, y cada cubeta debe
contener aproximadamente el mismo nú mero de llaves El muestreo
aleatorio se usa para determinar los límites de los intervalos. Primero,
cada procesador selecciona una muestra aleatoria de sus claves. A
continuació n, todas las claves seleccionadas se ordenan juntas.
Finalmente, estas claves se utilizan como límites. Tal muestreo aleatorio
también se usa en muchos algoritmos de comparació n de geometría
computacional, grafos y cadenas en paralelo.
La ruptura de la simetría: otro uso de la aleatoriedad es la ruptura de la
simetría. Por ejemplo, considere el problema de seleccionar un gran
conjunto independiente de vértices en un grafo en paralelo. (Un conjunto
de vértices es independiente si no hay dos vecinos.) Imagine que cada
vértice debe decidir, en paralelo con todos los demá s vértices, si unirse al
conjunto o no. Por lo tanto, si un vértice elige unirse al conjunto, todos sus
vecinos deben elegir no unirse al conjunto. La elecció n es difícil de realizar
simultá neamente por cada vértice si la estructura local en cada vértice es
la misma, por ejemplo, si cada vértice tiene la misma cantidad de vecinos
Como resultado, el punto muerto se puede resolver mediante el uso de la
aleatoriedad para romper la simetría entre los vértices.
Equilibrio de carga: un tercer uso de la aleatoriedad es el equilibrio de
carga. Una forma de dividir rá pidamente una gran cantidad de elementos
de datos en una colecció n de subconjuntos de tamañ o aproximadamente
uniforme es asignar aleatoriamente cada elemento a un subconjunto. Esta
técnica funciona mejor cuando el tamañ o promedio de un subconjunto es
al menos logarítmico en el tamañ o del conjunto original.
II.4.3. TÉCNICAS DE PUNTERO PARALELAS
Muchas de las técnicas secuenciales tradicionales para manipular listas, á rboles y
grafos no se traducen fá cilmente en técnicas paralelas. Por ejemplo, técnicas
como atravesar los elementos de una lista vinculada, visitar los nodos de un á rbol
en postorden o realizar un recorrido en profundidad de un grafo parecen ser
inherentemente secuenciales. Afortunadamente, estas técnicas a menudo pueden
ser reemplazadas por técnicas paralelas con aproximadamente el mismo poder.
Puntero saltando: Una de las má s antiguas técnicas de punteros paralelos es el
puntero saltando [88]. Esta técnica se puede aplicar a listas o á rboles. En cada
paso de salto del puntero, cada nodo en paralelo reemplaza su puntero con el de
su sucesor (o padre). Por ejemplo, una forma de etiquetar cada nodo de una lista
n-nodo (o á rbol) con la etiqueta del ú ltimo nodo (o raíz) es usar el salto del
puntero. Después de la mayoría de los pasos de ⌉log n⌉, cada nodo apunta al
mismo nodo, el final de la lista (o la raíz del á rbol).
Recorrido de Euler: Un recorrido de Euler por un grafo dirigido es una
ruta a través del grafo en el que cada borde se atraviesa exactamente una
vez. En un grafo no dirigido, cada borde se reemplaza típicamente con dos
bordes opuestos. El recorrido por Euler de un á rbol no dirigido sigue el
perímetro del á rbol visitando cada borde dos veces, una vez en el camino
hacia abajo y una vez en el camino hacia arriba. Al mantener una
estructura enlazada que representa el recorrido de Euler por un á rbol, es
posible calcular muchas funciones en el á rbol, como el tamañ o de cada
subá rbol. Esta técnica usa trabajo lineal y profundidad paralela que es
independiente de la profundidad del á rbol. El recorrido de Euler a
menudo se puede utilizar para reemplazar un recorrido está ndar de un
á rbol, como un recorrido transversal en profundidad.
Contracción del grafo: La contracció n del grafo es una operació n en la
cual un grafo se reduce en tamañ o mientras se mantiene parte de su
estructura original. Normalmente, después de realizar una operació n de
contracció n del grafo, el problema se resuelve recursivamente en el grafo
contratado. La solució n al problema en el grafo contratado se usa para
formar la solució n final. Por ejemplo, una forma de dividir un grafo en sus
componentes conectados es primero contraer el grafo fusionando algunos
de los vértices con los vértices vecinos, luego encontrar los componentes
conectados del grafo contratado y finalmente deshacer la operació n de
contracció n. Muchos problemas pueden resolverse contrayendo á rboles,
en cuyo caso la técnica se llama contracció n de á rbol.
Descomposición del oído: Una descomposició n de oído de un grafo es
una partició n de sus bordes en una colecció n ordenada de caminos. El
primer camino es un ciclo, y los otros se llaman orejas. Los puntos finales
de cada oreja está n anclados en caminos anteriores. Una vez que se
encuentra la descomposició n de un grafo en un oído, no es difícil
determinar si dos bordes se encuentran en un ciclo comú n. Esta
informació n puede usarse en algoritmos para determinar biconnectividad,
triconnectividad, 4-conectividad y planaridad. Se puede encontrar una
descomposició n de la oreja en paralelo usando trabajo lineal y
profundidad logarítmica, independientemente de la estructura del grafo.
Por lo tanto, esta técnica se puede utilizar para reemplazar la técnica
secuencial está ndar para resolver estos problemas, bú squeda de
profundidad en primer lugar.

II.4.4. OTRAS
Muchas otras técnicas han demostrado ser ú tiles en el diseñ o de algoritmos
paralelos. Encontrar separadores de grafos pequeñ os es ú til para dividir datos
entre procesadores y reducir la comunicació n. La funció n hash es ú til para
equilibrar la carga y asignar direcciones a la memoria

II.5. MODELOS DE ALGORITMOS PARALELOS


II.5.1. MODELO DE DATA-PARALLEL
Muchos datos son tratados de una forma igual o similar
Algoritmos numéricos
Datos en arrays o vectores
- Procesamiento vectorial
- Paralelismo asignando partes distintas del array a distintos
procesadores
Memoria compartida (Paralelismo de Datos)
- Distribució n del trabajo en hilos
- Paralelizació n automá tica o implícita
Memoria Distribuida (Particionado de Datos)
- Distribució n de los datos a los procesos
- Técnica de particionado de datos o paralelizació n explícita
Ejemplo: Suma de n datos
Esquema secuencial:
s=0;
for (i=0; i<n; i++)
s=s+a[i];
endfor

Paralelización Automática:
Con opció n de compilació n si no hay dependencia de datos o el compilador
detecta que se puede resolver.
Con Pragma (t(n,p)=n/p):
s=0;
#pragma omp parallel for priate(i) reduction(+:s)
for (i=0; i<n; i++)
S=s+a[i]
endfor

Distintas posibilidades de asignació n de los datos a los hilos, con clá usula
Schedule: bloques contiguos, cíclica, diná mica.

II.5.2. MODELO DE GRÁFICO DE TAREAS


Ejemplo:
Multiplicació n vector x matriz dispersa (sparse)
Computar:
Solo para los A[i,j] diferentes de 0. Suponer que hay n CPUs y se reparten
las filas de A y los valores de b (ej.: CPU0 es dueñ a de b[0]) 

II.5.3. MODELO DE POOL DE TAREAS


El mapeo diná mico de un loop es mucjos sub-loops
Ejemplo:
Mapeo Es el mecanismo por el que las tareas se asignan a los procesos 
Un proceso: proceso como se entiende en sistemas operativos, o parte de
un proceso (hilo)
Generalmente 1 proceso ??1 CPU/ core 
II.5.4. MODELO MAESTRO-ESCLAVO

Ejemplo:
Método de Montecarlo
Este algoritmo consiste en generar experimentos aleatorios
independientes consistentes en generar N puntos x, y que pertenezcan de 0
a 1 y contabilizar C los nú meros que caen dentro del cuadrante de un
circulo de radio 1.
El á rea del circulo es igual a pi*radio **2, el á rea del cuadrante es pi/4, y la
probabilidad es C/N = pi/4 osea pi = 4C/N.

La aproximació n má s precisa es cuando N tiende al infinito.

Este es el algoritmo secuencial en Python:

#!/usr/bin/python

import random
import math
def enCirculo(x, y):
acierta = False
resultado = x ** 2 + y ** 2
if resultado <= 1:
acierta = True
return acierta
def pi(n):
c = 0
for i in range(n):
x = random.random()
y = random.random()
acierta = enCirculo(x,
y)
if acierta:
c = c + 1
return (4.0 * c)/n

Paralelización
Este reparto consiste en la generació n de N experimentos en un conjunto
de P procesadores. Cada procesador puede generar puntos y contar cuales
C caen en el rango del círculo con 1 de radio.
Al iniciar solo el proceso principal conoce cuales son los valores de N, osea
el nú mero de pruebas que se quiere hacer, y cuantos procesadores se van a
tener.
Después se envían a los procesos esclavos la N, para que empiecen a
calcular.
 Inicialmente el proceso maestro del programa paralelo conoce los
valores de N y P.
 Paso 1: Envío de N y P a los procesos esclavos del programa
paralelo

 Paso 2: Cada proceso del programa paralelo realiza el trabajo que le


corresponde. Cá lculo del nú mero de experimentos Np = N/P.
Realizació n de los experimentos para calcular Cp.

 Paso 3: Los procesos esclavos del programa paralelo envían el


resultado Cp que han calculado al proceso maestro
- El proceso maestro calcula el nú mero total de aciertos C = C0+…+Cp-1
- … y a continuació n calcula el valor estimado de π π = 4C/N

Y por ú ltimo los procesos esclavos envían sus resultados al proceso


maestro, para que el maestro calcule el nú mero de aciertos y lo
multiplique por 4 (por la fó rmula que acabamos de ver) y lo divida
entre el total de experimentos N. El siguiente programa en python
emula este comportamiento con hilos para poder mandar cada suma al
#!/usr/bin/python
proceso maestro, este es el programa:
import threading, time
import math, random
lock = threading.Lock()
import Queue

def __init__(self, n, q):


threading.Thread.__init__(self)
self.n = n
self.x = 0
self.y = 0
self.c = 0
def enCirculo(self, x, y):
acierta = False
res = x ** 2 + y ** 2
if res <= 1:
acierta = True
return acierta
def run(self):
for i in range(self.n):
self.x = random.random()
self.y = random.random()
self.acierta = self.enCirculo(self.x, self.y)
if self.acierta:
self.c = self.c + 1
pii = (4.0 * self.c)/self.n
q.put(self.c)
q = Queue.Queue()
hilos = 5 #simula 5 procesadores
n = 100000000 #numero de pruebas
for i in range(hilos):
En donde señ ale que sean 5 procesadores, osea 5 hilos que realicen la tarea
indicada.
Y la ejecució n se ve así:

II.5.5. MODELO DE PIPELINE O PRODUCTO-CONSUMIDOR


El problema se divide en una serie de etapas. Cada etapa se ejecuta, por
ejemplo, en un procesador, y pasa resultados a la siguiente.

Es un tipo de descomposició n funcional, relacionado con la repetició n del


mismo proceso sobre una serie larga de datos (p.e., en tiempo real:
procesado de vídeo).

Condiciones:
-- que se ejecute má s de una vez el mismo problema.
-- que se procese una serie larga de datos.
-- que se pueda pasar datos a la siguiente fase mucho antes del final del
cá lculo de cada fase.
--que el tiempo de proceso asociado a cada fase sea similar (load
balancing).

Topología ideal: cadena / anillo. 

Normalmente no se genera un nú mero muy elevado de procesos.


Algunos ejemplos:
-- procesado de señ al (sonido, vídeo...)
-- simulaciones de procesos segmentados (computació n) 

II.5.6. MODELOS HIBRIDOS


Tradicionalmente el procesamiento paralelo se ha dividido en dos grandes
modelos, el de memoria compartida y el de pasaje de mensajes.
 Memoria compartida: los datos accedidos por la aplicació n se
encuentran en una memoria global accesible por los procesadores
paralelos. Esto significa que cada procesador puede buscar y
almacenar datos de cualquier posició n de memoria
independientemente. Se caracteriza por la necesidad de la
sincronizació n para preservar la integridad de las estructuras de
datos compartidas.
 Pasaje de mensajes: los datos son vistos como asociados a un
procesador particular. De esta manera, se necesita de la
comunicació n por mensajes entre ellos para acceder a un dato
remoto. En este modelo, las primitivas de envío y recepció n son las
encargadas de manejar la sincronizació n.
Relacionado con la aparició n de la arquitectura cluster de multicore surge
el modelo de programació n híbrido, en el cual se combinan las estrategias
recientemente expuestas. Esto implica una combinació n de los modelos de
programació n paralela memoria compartida y pasaje de mensajes.

El objetivo de utilizar el modelo híbrido es aprovechar y aplicar las


potencialidades de cada una de las estrategias que el mismo brinda, de
acuerdo a la necesidad de la aplicació n. Esta es un á rea de investigació n de
gran interés actual. Actualmente, entre los lenguajes que se utilizan para
programació n híbrida aparecen OpenMP para memoria compartida y MPI
para pasaje de mensajes.

II.6. ANALISIS DE ALGORITMOS PARALELOS


En la programació n paralela son necesarias herramientas que permitan estimar el
tiempo de ejecución y la memoria consumidos por el algoritmo, para determinar
si es adecuado o no para la resolució n del problema, teniendo como objetivo
principal el desarrollo algoritmos eficientes
 Se realiza un estudio del algoritmo a priori para identificar si es adecuado
para el problema o para seleccionar entre un conjunto de algoritmos
 Se realiza un estudio del algoritmo a posteriori para comparar entre 2
programas segú n el tamañ o de entrada

II.6.1. FACTORES PRINCIPALES


Lenguaje del programa
Má quina
Compilador
Tipos de datos
Usuarios

II.6.2. FACTORES QUE INFLUYEN EN EL TIEMPO DE EJECUCIÓN


Competencia por la memoria
Fracció n del có digo
Asignació n de procesos
Computació n extra: variables de control, cá lculos, etc.
Sincronizació n

II.6.3. ELEMENTOS
 Tiempo de Ejecución:
Formulas de diapo 12
 Ocupación de Memoria
Formulas de diapo 13

 Conteo de Instrucciones
Diapos 14 y 15
 Notación Asíntota
Diapo 16
 Tiempos de comunicación
Diapos 19 y 20

II.6.4. EJEMPLO DE LA SUMA DE N NÚMEROS


Diapo 21
II.6.5. EJEMPLO DE MEMORIA COMPARTIDA DE SUMA DE N NÚMEROS
Diapo 22,23,24
II.6.6. EJEMPLO DE MEMORIA DISTRIBUIDA DE SUMA DE N NÚMEROS
Diapo 25,26,27
II.6.7. COMPARACIÓN FINAL
Diapo 28
III. CONCLUSIONES

Los algoritmos paralelos son importantes porque es má s rá pido tratar grandes tareas
de computació n mediante la paralelizació n que mediante técnicas secuenciales. Esta
es la forma en que se trabaja en el desarrollo de los procesadores modernos, ya que es
má s difícil incrementar la capacidad de procesamiento con un ú nico procesador que
aumentar su capacidad de có mputo mediante la inclusió n de unidades en paralelo,
logrando así la ejecució n de varios flujos de instrucciones dentro del procesador. Pero
hay que ser cauto con la excesiva paralelizació n de los algoritmos ya que cada
algoritmo paralelo tiene una parte secuencial y debido a esto, los algoritmos paralelos
puedes llegar a un punto de saturació n (ver Ley de Amdahl). Por todo esto, a partir de
cierto nivel de paralelismo, añ adir má s unidades de procesamiento puede só lo
incrementar el coste y la disipació n de calor.
IV. LINKOGRAFÍA

/Users/edwar/Downloads/ALGORITMO%20Y%20COMPUTACIÓN%20PARALELA.pdf
J. Aguilar, E. Leiss (2004). Introducción a la computación paralela. [PDF file]. Mérida,
Venezuela. Disponible en: https://docs.google.com/viewer?url=http%3A%2F
%2Fwww.ing.ula.ve%2F~aguilar%2Fpublicaciones%2Fobjetos%2Flibros%2FICP.pd
Elver Álvarez (2016), ¿Qué son los Algoritmos Paralelos?. Disponible en:
https://prezi.com/8hsxmu4dh47j/que-son-los-algoritmos-paralelos-algoritmos-que-
pueden-s/
Cerverón Vicente (sf). Algoritmos Paralelos. [PDF file]. España. Disponible en:
https://docs.google.com/viewer?url=http%3A%2F%2Finformatica.uv.es%2Fiiguia%2FALP
%2Fmateriales%2F1_2_a_ComputacionParalela.pdf.
Hoeger Herbert (sf). Introducción a la computación paralela. [PDF file]. Mérida, Venezuela.
Disponible en: https://docs.google.com/viewer?url=http%3A%2F%2Fwww.saber.ula.ve
%2Fbitstream%2F123456789%2F15969%2F1%2Fcom_par.pdf
Gilberto Díaz. (2010). Diseñ o de Algoritmos Paralelos [PDF file]. Mérida, Venezuela.
Disponible en: https://docs.google.com/viewer?url=http%3A%2F
%2Fwebdelprofesor.ula.ve%2Fingenieria%2Fgilberto%2Fparalela
%2F08_DisenoDeAlgoritmosParalelos.pdf
Ananth Grama, Anshul Gupta, George Karypis, Vipin Kumar(sf). Introduction to Parallel
Computing, Second Edition. Disponible en: http://parallelcomp.uw.hu/ch03lev1sec6.html

También podría gustarte