C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf ·...

28
omputo paralelo con openMP y C Sergio Ivvan Valdez Pe˜ na Guanajuato, M´ exico. 13 de Marzo de 2012 Sergio Ivvan Valdez Pe˜ na Guanajuato, M´ exico. () omputo paralelo con openMP y C 13 de Marzo de 2012 1 / 27

Transcript of C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf ·...

Page 1: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Computo paralelo con openMP y C

Sergio Ivvan Valdez Pena

Guanajuato, Mexico.

13 de Marzo de 2012

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 1 / 27

Page 2: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Contenido

1 Introduccion.1 ¿Que es computo paralelo?2 ¿Paradigmas de paralelizacion.3 Tareas paralelizables.

2 openMP. Directivas de paralelizacion en C.3 Ejercicios de Parelilzacion.4 Metodos numericos paralelos, ejemplos: integracion, solucion de

sistemas de ecuaciones.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 2 / 27

Page 3: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

¿Que es computo paralelo?

Serial

Suponga que Ud. fabrica zapatos, y necesita fabricar un “lote” de100 pares.

Suponga que cada par le toma un dıa de trabajo.

Esto requiere de 100 dıas de trabajo por su parte.

Paralelo

Si Ud. tuviera 100 trabajadores podrıa dividir la tarea y hacer quecada trabajador fabrique un par de zapatos.

Entonces el tiempo del procesamiento (fabricacion) del trabajoserıa (en teorıa) de solo un dıa.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 3 / 27

Page 4: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

¿Que es computo paralelo?

Serial

Suponga que Ud. fabrica zapatos, y necesita fabricar un “lote” de100 pares.

Suponga que cada par le toma un dıa de trabajo.

Esto requiere de 100 dıas de trabajo por su parte.

Paralelo

Si Ud. tuviera 100 trabajadores podrıa dividir la tarea y hacer quecada trabajador fabrique un par de zapatos.

Entonces el tiempo del procesamiento (fabricacion) del trabajoserıa (en teorıa) de solo un dıa.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 3 / 27

Page 5: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

¿Que es computo paralelo?

Computo paralelo.

Es una forma de c omputo en donde varios c alculos se realizan deforma simultanea por diferentes procesos(procesadores). Es de-cir, se divide una tarea de c omputo en varias subtareas, de formatal que cada subtarea es realizada por una unidad de c omputodiferente.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 4 / 27

Page 6: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

¿Que es computo paralelo?

Ejemplo: Realizar la siguiente operacion: e = a ∗ b+ c ∗ d, dondea, b, c, d, e son escalares. La operacion serial podrıa llevarse a cabo de la siguienteforma:

Procesador unico:e=a*b;e1=c*d;e=e+e1;2 procesadores:i f (miprocesador==1)e1=a*b;if (miprocesador==2)e2=c*d;

if (miprocesador==1)e=e1+e2;

Si ahora a, b, c, d, e son matrices de 1000000 × 1000000. El beneficio de dividir la operacion es

bastante relevante.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 5 / 27

Page 7: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Paradigmas de paralelizacionCon respecto a la memoria

Memoria Compartida

(Una computadora multicore)

Memoria Distirbuida

(Un cluster de computadoras)Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 6 / 27

Page 8: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Tipos de paralelizacion

Paralelizacion por tareas. Hacer diferentes tareas en diferentesprocesadores.

Paralelizacion por datos. Procesar cantidades similares de datoscon operaciones similares en diferentes procesadores (dividir unvetors en conjuntos de elementos, o una matriz en conjuntos derenglones.)

Otros tipos de paralelizacion: por bits y por instrucciones.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 7 / 27

Page 9: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Tareas paralelizables

En general son conjuntos de operaciones en donde cada una sepuede procesar sin necesidad de conocer el resultado de alguna otra.En particular, ejemplos comunes son:Ciclos for donde un indice no depende de otro.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 8 / 27

Page 10: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

OpenMP

OpenMP: Open Multiprocessing. Es un estandar para C/C++ yFORTRAN para realizar computo paralelo en memoria compartidautilizando multi-hilos.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 9 / 27

Page 11: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Estructura de un programa en C

Programa normal Programa paralelo

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

int main() int main(){ {int n,identificador; int n,identificador;

/ / Codigo serial aquı / Codigo paralelo

#pragma omp parallel private(identificador)} }

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 10 / 27

Page 12: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Directivas de OpenMP

Inicia region paralela

#pragma omp parallel

Alcance de las variables#pragma omp parallel private(var01,var02) shared(var03, var04)

Las variables: var01 y var02 son privadas, lo que quiere decir que se genera memoria para cadauna de estas variables para cada proceso, cuando termina la region paralela se regresa lamemoria.

Las variables: var03 y var04, son variables compartidas que quiere decir que todos los procesos

accesan a la misma memoria, que es la memoria que tenia el hilo principal.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 11 / 27

Page 13: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Directivas OMP: region paralela

//Inicio de regi on paralela#pragma omp parallel private(identificador){

/ * Obtiene el numero identificador de cada hilo * /identificador = omp get thread num();

/ * Obtiene el n umero de hilos que se levantaron * /nhilos = omp get num threads();} //fin de regi on paralela

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 12 / 27

Page 14: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Ejercicio 1Hola Mundo Paralelo

Hacer que cada proceso diga que numero de proceso es, e imprima:Hola Mundo!

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 13 / 27

Page 15: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Directivas OMP: for paralelo

#pragma omp for schedule(static,chunk) nowaitfor (i=0; i < N; i++)

chunk: Se procesaran “chunk” ındices en cada proceso por vez.static: quiere decir que se repartira el trabajo de manera estatica unchunk para cada proceso por vez, hasta que se termine de procesartodos los datos.

Otra opcion basica es: “dynamic” y “guided”

nowait: indica que no es necesario esperar a que todos los procesosterminen para continuar procesando.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 14 / 27

Page 16: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Ejercicio 2

a) Hacer un for paralelo para la suma de dos vectores, mostrando enque hilo se procesa cada indice.

b) Comparar el tiempo de proceso serial vs paralelo de la suma de2000 vectores de longitud 230000.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 15 / 27

Page 17: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Secciones paralelas

#pragma omp parallel shared(a,b,c,chunk)private(i,j){#pragma omp sections nowait{#pragma omp section.//operaciones que realiza el primer proceso#pragma omp section.//operaciones que realiza el segundo proceso} //fin de las secciones paralelas}//fin de la regi on paralela

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 16 / 27

Page 18: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Ejercicio 3

Realizar una suma de vectores en dos secciones paralelas la mitad delos indices en una seccion y la otra mitad en otra.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 17 / 27

Page 19: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

omp master

La directiva omp master indica que cierto trabajo solo sera llevado a cabo porel proceso maestro, es util en operaciones criticas como lectura y escritura adisco.

La directiva omp barrier realiza una sincronizacion de los hilos esperandohasta que todos los hilos esten en el mismo segmento de ejecucion.

#pragma omp parallel shared(salida,a) private(i){/ * Sincronizaci on de los hilos * /#pragma omp barrier #pragma omp master{fprint(....);}}

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 18 / 27

Page 20: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Ejercicio

Realizar la suma de vectores en paralelo y imprimir el resultado en unarchivo utilizando solo el nodo maestro.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 19 / 27

Page 21: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

omp single

#pragma omp single nowait{for (i=0; i <N; i++)fprintf(salida2,‘‘El hilo %d imprime %f’’,identificador,a [i]);}

La directiva single indica que solo un proceso realizara la parteindicada de codigo.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 20 / 27

Page 22: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Ejercicio

Imprimir un vector en dos archivos diferentes, un proceso imprime alarchivo 1 y otro al archivo 2, mostrar que elementos del vectorimprimio cada proceso.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 21 / 27

Page 23: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

omp critical

Indica que cierta parte del codigo solo sera ejecutada por un procesoa la vez.

#pragma omp critical

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 22 / 27

Page 24: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Ejercicio. omp critical

Imprimir un vector a un archivo utilizando todos los procesos y ladirectiva omp critical para que no impriman al mismo tiempo.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 23 / 27

Page 25: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

reduction

Si dos o mas procesos trabajan sobre una variable la clausulareduction le aplica un operador a el valor que tenga la variable al finalde la region paralela, el resultado de la operacion es el valor con elque queda la variable al salir de la region paralela.

#pragma omp for reduction(+:resultado)

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 24 / 27

Page 26: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Reduction

Sumar los elementos de un vector en paralelo utilizando reductionpara reducir la suma.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 25 / 27

Page 27: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Ejercicios finales

Hacer un conjunto de funciones en paralelo que realicen las siguientesoperaciones en paralelo:

1 Suma de dos vectores.2 Suma de dos matrices.3 Solucion de un sistema de ecuaciones lineales diagonalmente

dominante por el metodo de Jacobi/Seidel.4 Integracion numerica por el metodo del trapecio.5 Filtrado del ruido de una imagen con un filtro de mediana en

paralelo.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 26 / 27

Page 28: C mputo paralelo con openMP y C - CIMAT3vcomp.eventos.cimat.mx/sites/3vcomp/files/pres_omp.pdf · vetors en conjuntos de elementos, o una matriz en conjuntos de renglones.) Otros

Comentarios finales

OpenMP es un estandar para programacion en paralelo enmaquinas multicore o multiprocesador.

La paralelizacion es relativamente sencilla en comparacion conMPI por ejemplo.

Aunque no sirve para memoria distribuida (un cluster), se puedenutilizar al mismo tiempo que MPI.

El estandar esta definido para FORTRAN y C pero hayextensiones para lenguajes de alto nivel como R y Python.

Sergio Ivvan Valdez Pena Guanajuato, Mexico. ()Computo paralelo con openMP y C 13 de Marzo de 2012 27 / 27