PDF de programación - Programación en Paralelo

Imágen de pdf Programación en Paralelo

Programación en Paralelográfica de visualizaciones

Publicado el 27 de Marzo del 2018
351 visualizaciones desde el 27 de Marzo del 2018
1,9 MB
20 paginas
Creado hace 7a (08/03/2013)
Programación en Paralelo
Programación en Paralelo
Por: Jesús Manuel Mager Hois
Por: Jesús Manuel Mager Hois
Asesor: Carlos Pineda Muñoz
Carlos Pineda Muñoz
Asesor:



¿Qué es la programación en
¿Qué es la programación en

paralelo?
paralelo?

La programación paralela es una forma de
La programación paralela es una forma de
computación donde varios cálculos son
computación donde varios cálculos son
efectuados de manera simultánea, bajo el
efectuados de manera simultánea, bajo el
principio de que cada problema puede ser
principio de que cada problema puede ser
separado en partes para su tratamiento. Este
separado en partes para su tratamiento. Este
tiempo de programación es válido para equipos
tiempo de programación es válido para equipos
que tienen procesadores con varios núcleos
que tienen procesadores con varios núcleos
(multicore) y computadoras con varios
(multicore) y computadoras con varios
procesadores de memoria compartida.
procesadores de memoria compartida.



¿Por qué usar la programación en
¿Por qué usar la programación en

paralelo?
paralelo?

Las nuevas computadoras, e incluso los
Las nuevas computadoras, e incluso los
dispositivos móviles han sido equipados con
dispositivos móviles han sido equipados con
procesadores multicore, o incluso con varios
procesadores multicore, o incluso con varios
La programación en paralelo
procesadores. La programación en paralelo
procesadores.
explota al máximo el rendimiento de estas
explota al máximo el rendimiento de estas
caracterísitcas de hardware.
caracterísitcas de hardware.



Equipos multicore
Equipos multicore

un procesador en un
Un equipo multicore es un procesador en un
Un equipo multicore es
único componente con dos o más unidades
único componente con dos o más unidades
centrales de procesamiento llamados cores o
centrales de procesamiento
llamados cores o
núcleos, que son procesadores que ejecutan
núcleos, que son procesadores que ejecutan
instrucciones. Estas instrucciones son
instrucciones. Estas instrucciones son
instrucciones típicas de cada procesador, como
instrucciones típicas de cada procesador, como
puede ver add, mov, etc... que pueden ser
puede ver add, mov, etc... que pueden ser
ejecutadas simultáneamente por sus diferentes
ejecutadas simultáneamente por sus diferentes
núcleos.
núcleos.



Memoria Compartida
Memoria Compartida

Las computadoras paralelas de memoria
Las computadoras paralelas de memoria
compartida son aquellas donde los
compartida son aquellas donde los
procesadores individuales comparten la entrada
procesadores individuales comparten la entrada
y salida de la memoria de tal manera que cada
y salida de la memoria de tal manera que cada
uno de ellos puede acceder a la memoria en
uno de ellos puede acceder a la memoria en
cualquier locación con la misma velocidad, esto
cualquier locación con la misma velocidad, esto
significa que tienen acceso uniforme a memoria.
significa que tienen acceso uniforme a memoria.



OpenMP
OpenMP

OpenMP es API multiplataforma para
● OpenMP es API multiplataforma para
multiprocesos de memoria compartida. Está
multiprocesos de memoria compartida. Está
escrito para usarse de manera nativa desde C,
escrito para usarse de manera nativa desde C,
C++ y Fortran. Es Open Sorce.
C++ y Fortran. Es Open Sorce.
Plataformas en que funciona: Windows, Mac
● Plataformas en que funciona: Windows, Mac
OS X y la familia de sistemas operativos Unix,
OS X y la familia de sistemas operativos Unix,
entre muchos otros.
entre muchos otros.



Mesa de revisión de arquitectura de
Mesa de revisión de arquitectura de

OpenMP
OpenMP



Un pequeño ejemplo en OpenMP
Un pequeño ejemplo en OpenMP

#include <omp.h>
#include <omp.h>
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>

int main (int argc, char *argv[])
int main (int argc, char *argv[])
{{
int n_hilos, id_hilo;
int n_hilos, id_hilo;

omp_set_num_threads(4);
omp_set_num_threads(4);

#pragma omp parallel private(id_hilo, n_hilos)
#pragma omp parallel private(id_hilo, n_hilos)

{{

id_hilo = omp_get_thread_num();
id_hilo = omp_get_thread_num();

printf("Este es el hilo con identidad: %d\n", id_hilo);
printf("Este es el hilo con identidad: %d\n", id_hilo);


if (id_hilo == 0)
if (id_hilo == 0)

{{

n_hilos = omp_get_num_threads();
n_hilos = omp_get_num_threads();

printf("Cantidad total de hilos activos: %d\n", n_hilos);
printf("Cantidad total de hilos activos: %d\n", n_hilos);

}}

} }

}}



¿Cuáles son las directivas más
¿Cuáles son las directivas más

comúnes?
comúnes?

● ForFor
Section
● Section
Single
● Single
Barrier
● Barrier
Critical
● Critical
Atomic
● Atomic
A continuación veremos cada una de estas
A continuación veremos cada una de estas
directivas.
directivas.



Directiva for
Directiva for

La construcción for especifica que las
● La construcción for especifica que las
iteraciones de los ciclos serán distribuidas y
iteraciones de los ciclos serán distribuidas y
ejecutadas entre el equipo de hilos.
ejecutadas entre el equipo de hilos.

#pragma omp for [clausula[[,]clausula]...]
#pragma omp for [clausula[[,]clausula]...]



Directiva section
Directiva section

La construcción de sections contiene una serie
● La construcción de sections contiene una serie
de bloques estructurados que serán
de bloques estructurados que serán
distribuidos y ejecutados entre un equipo de
distribuidos y ejecutados entre un equipo de
hilos.
hilos.

#pragma omp sections [clausula[[,]clausula]...]
#pragma omp sections [clausula[[,]clausula]...]
{{
[#pragma omp section]
[#pragma omp section]
bloque estructurado
bloque estructurado

[#pragma omp section]
[#pragma omp section]
bloque estructurado
bloque estructurado

......
}}



Directiva single
Directiva single

● La construcción

single especifica que el bloque
especifica que el bloque

La construcción single
estructurado asociado es ejecutado
estructurado asociado es ejecutado
únicamente por uno de los hilos que componen
únicamente por uno de los hilos que componen
el equipo de hilos(no necesariamente el hilo
el equipo de hilos(no necesariamente el hilo
maestro), en el contexto de una tarea implícita.
maestro), en el contexto de una tarea implícita.

#pragma omp single [clausula[[,]clausula]...]
#pragma omp single [clausula[[,]clausula]...]



Directiva barrier
Directiva barrier

La construcción \textbf{barrier} especifica una
● La construcción \textbf{barrier} especifica una
barrera explícita en el punto en el cual la
barrera explícita en el punto en el cual la
construcción aparece.
construcción aparece.

#pragma omp barrier
#pragma omp barrier



Directiva critical
Directiva critical

La construcción critical restringe la ejecución
● La construcción critical restringe la ejecución
del bloque estructurado asociado a un solo hilo
del bloque estructurado asociado a un solo hilo
en un momento.
en un momento.

#pragma omp critical [(nombre)]
#pragma omp critical [(nombre)]



Directiva atomic
Directiva atomic

● La construcción

atomic asegura que una
asegura que una

La construcción atomic
locación específica es actualizada
locación específica es actualizada
automáticamente, en vez de exponerla a
automáticamente, en vez de exponerla a
posibles hilos que escriban sobre el de manera
posibles hilos que escriban sobre el de manera
múltiple o simultáneo.
múltiple o simultáneo.

#pragma omp atomic [read | write | update |
#pragma omp atomic [read | write | update |
capture ]
capture ]



Ayuda a la hora de compilar: make
Ayuda a la hora de compilar: make

Antes de comenzar a utilizar OpenMP,
● Antes de comenzar a utilizar OpenMP,
crearemos un sistema de producción con
crearemos un sistema de producción con
Autotools, que nos permitirá compilar nuestro
Autotools, que nos permitirá compilar nuestro
código en nuestro sistema operativo, sin
código en nuestro sistema operativo, sin
importar cual sea, y crear una fácil distribución
importar cual sea, y crear una fácil distribución
del mismo para ser compilado en un sinfín de
del mismo para ser compilado en un sinfín de
plataformas.
plataformas.



Rendimiento
Rendimiento

Es posible obtener mejoras significativas al renidmiento en procesamientos
● Es posible obtener mejoras significativas al renidmiento en procesamientos
de datos muy extensos, mientras que se obtiene rendimientos inferiores con
de datos muy extensos, mientras que se obtiene rendimientos inferiores con
pocos datos. Esto lo muestra la siguiente gráfica de una búsqueda
pocos datos. Esto lo muestra la siguiente gráfica de una búsqueda
secuencial:
secuencial:



Aloritmos propuestos para
Aloritmos propuestos para

desarrollar en el taller.
desarrollar en el taller.
Multiplicación vector por matriz. mxv
● Multiplicación vector por matriz. mxv
Multiplicación de dos matrices
● Multiplicación de dos matrices
Calcular la integral definida de una función
● Calcular la integral definida de una función
dada.
dada.
Regresión lineal.
● Regresión lineal.



Conclusiones.
Conclusiones.

Los algoritmos paralelos son más afectivos con grandes
● Los algoritmos paralelos son más afectivos con grandes
cantidades de datos, y son inferiores con datos reducidos.
cantidades de datos, y son inferiores con datos reducidos.
La programación paralela varía en su rendimietno debido
● La programación paralela varía en su rendimietno debido
al entorno de tiempo de ejecución.
al entorno de tiempo de ejecución.
Una importante limitación es la cantidad de memoria
● Una importante limitación es la cantidad de memoria
disponible.
disponible.
En un mundo donde los procesadores multicore reinan, es
● En
  • Links de descarga
http://lwp-l.com/pdf9911

Comentarios de: Programación en Paralelo (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad