06.05.2013 Views

Códigos Secuenciales Vs. Paralelos

Códigos Secuenciales Vs. Paralelos

Códigos Secuenciales Vs. Paralelos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Códigos</strong> <strong>Secuenciales</strong> <strong>Vs</strong>.<br />

<strong>Paralelos</strong><br />

Un Análisis desde el punto de Vista<br />

de Ejecucion


Contexto<br />

• Las arquitecturas paralelas están al alcance de<br />

todos<br />

– Sistemas Mul@core<br />

– Sistemas Distribuidos Mul@nodales (Cluster-­‐Grid)<br />

• Muchos Métodos numéricos @enen ya sus<br />

versiones en Paralelo.


Un poco de Arquitectura<br />

• Existen diferentes posibilidades de organizar<br />

procesadores y memoria<br />

• Taxonomia de Flynn<br />

Instruc@ons<br />

CU<br />

Output<br />

Data<br />

Input Data Input Data Input Data Input Data<br />

P P P P<br />

Output<br />

Data<br />

SIMD<br />

Output<br />

Data<br />

Output<br />

Data<br />

Instruc@ons<br />

CU<br />

Input Data<br />

P<br />

Output<br />

Data<br />

Instruc@ons<br />

CU<br />

Input Data<br />

P<br />

Output<br />

Data<br />

MIMD<br />

Instruc@ons<br />

CU<br />

Interconnect Network<br />

Input Data<br />

P<br />

Output<br />

Data


Consideraciones Arquitecturales<br />

Shared Memory • Distributed (Shared)<br />

Systems<br />

CPU<br />

CPU<br />

CPU<br />

Memory<br />

CPU<br />

Memory<br />

SMP<br />

CPU CPU<br />

CPU<br />

Memory<br />

CPU CPU<br />

NUMA<br />

CPU<br />

CPU<br />

CPU<br />

Memory<br />

Memory<br />

CPU<br />

CPU CPU<br />

CPU<br />

memory<br />

CPU<br />

Interconnect Network<br />

memory<br />

CPU<br />

memory<br />

MPP / Clusters<br />

CPU<br />

memory


• Datos<br />

Los Problemas Pueden<br />

– Porciones Pequeñas<br />

– Elementos de una Matriz<br />

– Registros<br />

– Conjuntos de Datos<br />

• La descomposición de<br />

Datos permite<br />

Paralelismo de Datos o<br />

Paralelismo de Dominio<br />

Descomponerse<br />

• Tareas<br />

– Funciones Lineales<br />

– Interacciones<br />

– Operadores<br />

• La descomposición de<br />

tareas permite<br />

Paralelismo de Tareas o<br />

Paralelismo Funcional


Elementos Individuales En Filas<br />

En Grupos de Columnas<br />

En Bloques


• Linealmente<br />

• Recursividad<br />

• … en Eventos<br />

Y las Tareas?<br />

1<br />

3<br />

2


Dependiendo de la Arquitectura Se<br />

define un Modelo de Programación<br />

• Memoria Compar@da (Shared<br />

Memory)<br />

– OpenMP<br />

• Memoria Distribuida (Distributed<br />

Memory)<br />

– MPI – Paso de Mensajes<br />

• Hibrida (Hybrid -­‐ Mul@threads)<br />

– OpenMP + MPI<br />

– CUDA, OpenCL, JAVA


overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

overhead<br />

task<br />

Descomposicion en Grano Fino Descomposicion en Grano Grueso


Modelo de Memoria de OpenMP<br />

• Todos los hilos @enen<br />

acceso a la misma memoria<br />

global compar@da<br />

• Los datos pueden ser<br />

públicos o privados<br />

• Datos privados pueden ser<br />

accedidos únicamente por<br />

su propio hilo<br />

• Transferencia de Datos<br />

transparente al<br />

programador<br />

• Sincronización es implícita Tomado de An Overview of OpenMP<br />

– SUN Microsystems


Arquitectura de OpenMP<br />

• Modelo Fork-­‐Join<br />

• Bloques de construcción<br />

para el trabajo en<br />

paralelo<br />

• Bloques de construcción<br />

para el ambiente de datos<br />

• Bloques de construcción<br />

para la sincronización<br />

• API extensiva para afinar<br />

el control<br />

Modelo de Ejecución -­‐ Tomado de An<br />

Overview of OpenMP – SUN Microsystems


Modelo de Programación<br />

• Paralelismo Fork-­‐Join:<br />

– El hilo maestro se divide en un conjunto de hilos como sea<br />

necesario<br />

– El paralelismo se añade incrementalmente: el programa<br />

secuencial se convierte en un programa paralelo<br />

Tomado de Programación en OpenMP – Robinson Rivas SC-­‐CAMP 2011


Pragmas<br />

• Una pragma es un direc@vo al compilador.<br />

• La sintaxis es<br />

#pragma omp <br />

Ejemplo:<br />

#pragma omp parallel for<br />

es una directriz que dice al compilador que trate<br />

a paralelizar el bucle for


• Define una región<br />

paralela sobre un bloque<br />

de código estructurado<br />

• Los hilos son creados<br />

como “parallel”<br />

• Los hilos se bloquean al<br />

final de la región<br />

• Los datos se comparten<br />

entre hilos al menos que<br />

se especifique otra cosa<br />

Regiones Paralelas<br />

Tomado de Programación en OpenMP – Robinson Rivas SC-­‐<br />

CAMP 2011


Variables Compar@das y Variables Privadas<br />

• Una variable compar@da @ene la misma<br />

dirección en el contexto de ejecución de cada<br />

hilo.<br />

• Una variable privada @ene una dirección<br />

dis@nta en el contexto de ejecución de cada<br />

hilo.<br />

• Un hilo no puede accesar las variables<br />

privadas de otro hilo.


Hola UIS


Para compilar y ejecutar<br />

• Compilar: gcc –openmp –o hello.c hello<br />

• Ejecutar: Hay que especificar el número de<br />

hilos<br />

Fuera del programa con<br />

setenv OMP_NUM_THREADS = número de hilos<br />

Dentro del programa con<br />

omp_set_num_threads( número de hilos)


• MPI es una interfaz de paso de Mensajes<br />

– Librería<br />

– Trabaja Nativamente con C y Fortran<br />

– No es un producto<br />

– Escalable<br />

– Soportado por Arquitecturas Heterogéneas<br />

– Portable<br />

– APIs para Cualquier Sistema Operativo<br />

– Dirigido a Usuario<br />

– Eficiente<br />

– Optimiza la comunicación entre los algoritmos<br />

– Permite Computación y Comunicación Controlada<br />

http://www.mpi-forum.org<br />

MPI –<br />

Message<br />

Passing<br />

Interface


• Possible Programming Workflow<br />

• Estrategias<br />

• Maestro Esclavo<br />

• Pipeline<br />

• Divide y Conquista<br />

MPI<br />

Programming<br />

Version Secuencial Iden@ricar las tareas y<br />

Escoger la estrategia<br />

dependencias<br />

de Paralelizacion<br />

Implementacion con<br />

MPI


• Programa de Test<br />

#include <br />

#include <br />

int main(int argc, char **argv){<br />

/* Initialize MPI */<br />

MPI_Init(&argc, &argv);<br />

printf(“Test Program\n”);<br />

/* Finalize MPI */<br />

return MPI_Finalize();<br />

}<br />

MPI<br />

Programming


• Compilación y Ejecución<br />

– La compilación puede hacerse con gcc o mpicc<br />

$ mpicc mpi_program.c –o my_mpi_executable<br />

– La Ejecución puede realizarse como:<br />

$ mpirun –np 1 my_mpi_executable<br />

$ mpirun –np 2 my_mpi_executable<br />

$ mpirun –np 3 my_mpi_executable<br />

MPI<br />

Programming


#include <br />

#include <br />

#include <br />

int main(int argc, char *argv[])<br />

{<br />

char idstr[32];<br />

char buff[128];<br />

int numprocs;<br />

int myid;<br />

int i;<br />

MPI_Status stat;<br />

Hola Mundo con MPI<br />

MPI_Init(&argc,&argv);<br />

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);<br />

MPI_Comm_rank(MPI_COMM_WORLD,&myid);<br />

if(myid == 0)<br />

{<br />

prinu("Tenemos %d procesadores\n", numprocs);<br />

for(i=1;i


Ejercicio de Clase<br />

• Teniendo en cuenta la forma trapezoidal para<br />

integrar la formula :


Trabajo de Clase<br />

1. Compile y Ejecute las diferentes implementaciones (en la Version mpi<br />

usando 2 procesos)<br />

• gcc fuente.c –openmp –o salida<br />

• ./salida<br />

• mpicc fuente.c –o salida<br />

• ./salida np -­‐2 o mpirun –np 2 ./salida<br />

2. En la versión secuencial, agregue el calculo del error<br />

3. Compare los resultados en términos de @empo de ejecución y factor de<br />

error usando:<br />

• 2 Intervalos<br />

• 10 Intervalos<br />

• 100 Intervalos<br />

• 5000 Intervalos<br />

• 500000 Intervalos<br />

• 1000000 Intervalos


Para Entregar Al final De la Clase<br />

En un documento único de “una pagina” en pdf o<br />

ru envié al email:<br />

1. Que observa en la ejecución de los programas<br />

con los valores iniciales dados?<br />

1. A nivel de errores?<br />

2. A nivel de @empo de ejecución?<br />

3. Cual es el mejor (Si hay uno mejor)?<br />

2. El algoritmo general es el mismo?


Reglas<br />

• Tríos o Parejas (NO se aceptan<br />

Informes Individuales<br />

• Respuestas sustentadas, concisas y<br />

cortas<br />

• Envío máximo una hora después del<br />

curso.<br />

• NO OLVIDEN COLOCAR LOS NOMBRES<br />

DE LOS INTEGRANTES EL TRIO

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!