Multiprocesamiento en lenguaje C -...

51
Multiprocesamiento en lenguaje C Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Pertinencia de la enseñanza del cómputo paralelo en el currículo de las ingenierías

Transcript of Multiprocesamiento en lenguaje C -...

Page 1: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Multiprocesamiento en lenguaje C Introducción a

Open Multiprocessing (OpenMP)

Proyecto PAPIME PE104911

Pertinencia de la enseñanza del cómputo paralelo en el currículo de las

ingenierías

Page 2: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Algunas preguntas

• ¿Qué es un proceso?

• ¿Qué es un hilo?

• ¿Qué se comparte entre los hilos?

• ¿Cuál es la diferencia entre hilo y proceso?• ¿Cuál es la diferencia entre hilo y proceso?

2Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 3: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Procesos e Hilos

• Un proceso inicia ejecutando su punto de entrada como un hilo

• Los hilos pueden crear otros hilos dentro del proceso

Procesos e Hilos

thread

main()

…thread thread

Stack Stack

Stack

hilos dentro del proceso– Cada hilo obtiene su propio stack

• Todos los hilos dentro de un proceso comparten código y segmentos de datos

Code segment

Data segment

…thread thread

3

Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 4: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Conceptos importantes que se

deben recordardeben recordar

Page 5: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Concurrencia vs. Paralelismo– Concurrencia: dos o más hilos están en progreso al

mismo tiempo:

Hilo 1Hilo 1

Hilo 2Hilo 2

Concurrency vs. Parallelism

– Paralelismo: dos o más hilos están en ejecucion al mismo tiempo

– Se requieren varios núcleos

Hilo 1Hilo 1

Hilo 2Hilo 2

5Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 6: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Conceptos Importantes

• Condiciones de carrera (Data Race)

• Región Crítica

• Exclusión Mutua• Exclusión Mutua

• Sincronización

• Deadlook

Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez6

Page 7: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Empezando con OpenMP

Page 8: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

¿Qué es OpenMP?

• Modelo de programación paralelo.

• Paralelismo de memoria compartida.

• Extensiones para lenguajes de programación

existentes (C,C++, Fortran)existentes (C,C++, Fortran)

• Combina código serial y paralelo en un solo

archivo fuente.

8Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 9: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

¿Qué es OpenMP?

• Conjunto de

– directivas del compilador

– bibliotecas de funciones

– variables de ambiente,– variables de ambiente,

No un lenguaje.

• Basado en el modelo de hilos.

9Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 10: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Arquitectura de OpenMP

• Fork/join (Maestro esclavo)

• Trabajo Y Datos Compartido entre hilos

• Maneja sincronización (barreras, otras)

10Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 11: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Fork / Join

F

O

R

K

J

O

I

N

J

O

I

N

F

O

R

K

Hilo Maestro Regiones

paralelas

11Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 12: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Sintaxis

• Directivas o pragmas

– #pragma omp construct [clause [clause]…]

– Clausulas: Especifican atributos para compartir – Clausulas: Especifican atributos para compartir

datos y calendarización

Una pragma en C o C++ es un directivo al

compilador.

12Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 13: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Regiones paralelas

#pragma omp parallel

Thread Thread Thread

Master Thread

Thread

1

Thread

2

Thread

3

Implicit Barrier

13Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 14: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Regiones paralelas

• Los hilos son creados desde el pragma

parallel.

• Los datos son compartidos entre los hilos.

C/C++ : #pragma omp parallel

{

block

}

14Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 15: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

¿Cuántos hilos?

• Num. Hilos = Num. Procesadores o núcleos

• Intel lo usa de esta forma.

• Se definen más hilos con la variable de

ambienteambiente

OMP_NUM_THREADS.

15Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 16: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Actividad 1

• Compilar la versión serial.

#include <stdio.h>

int main() {

int i;int i;

printf(“Hola Mundo\n");

for(i=0;i<6;i++)

printf("Iter:%d\n",i);

printf(“Adios \n");

}

16Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 17: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Actividad 1

• Agregar la directiva para ejecutar las primeras

cuatro líneas del main en paralelo.

• Compilar con la opción (-openmp)/Qopenmp

• ¿Qué sucede?

17Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 18: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Actividad 2

• Aumentar el número de hilos a 4 y ejecutar el

programa

• $ export OMP_NUM_THREADS=4

• Ejecutar el programa con más hilos y describir

lo que sucede.

18Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 19: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Work – Sharing

constructor for

#pragma omp paralell

#pragma omp for

for(i=0;i<100;i++) {

Realizar Trabajo();Realizar Trabajo();

}

• Divide los ciclos de la iteración entre los hilos.

• Debe estar especificada en una región paralela

• Debe estar antes del ciclo.

19Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 20: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

#pragma omp parallel#pragma omp for

for(i = 0; i < 12; i++) c[i] = a[i] + b[i]

#pragma omp parallel

#pragma omp for

i = 0 i = 4 i = 8

#pragma omp parallel

#pragma omp for

i = 0 i = 4 i = 8

Implicit barrier

i = 0

i = 1

i = 2

i = 3

i = 4

i = 5

i = 6

i = 7

i = 8

i = 9

i = 10

i = 11

Implicit barrier

i = 0

i = 1

i = 2

i = 3

i = 4

i = 5

i = 6

i = 7

i = 8

i = 9

i = 10

i = 11

20Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 21: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Combinando Pragmas

• Estos dos segmentos de código son equivalentes.

#pragma omp parallel {

#pragma omp forfor (i=0; i< MAX; i++) {

res[ i ] = huge();res[ i ] = huge();}

}

#pragma omp parallel forfor (i=0; i< MAX; i++) {

res[i] = huge();}

21Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 22: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Actividad

• Modificar el programa anterior para dividir el

número de iteraciones entre los hilos.

22Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 23: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Funciones de ambiente

• void omp_set_num_threads(int nthreads)

• int omp_get_num_threads(void)

• int omp_get_max_threads(void)

• int omp_get_thread_num(void)• int omp_get_thread_num(void)

• int omp_get_num_procs(void)

23Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 24: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Variables Compartidas y Privadas

Shared

Variables

Private

Variables

Private

Variables

Thread

Shared-Memory Model and Threads

Thread

24Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 25: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Ejemplo Descomposición Dominio

Sequential Code:

int a[1000], i;

for (i = 0; i < 1000; i++) a[i]=foo(i);a[i]=foo(i);

Thread 0:

for (i=0;i<500; i++) a[i] = foo(i);

Thread 1:

for (i=500;i<1000; i++) a[i] = foo(i);Shared

Private 25Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 26: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Descomposición Funcional• volatile int e;

• main () {• int x[10], j, k, m; j = f(x, k); m = g(x.

k);• }

• int f(int *x, int k)• {

Thread 0

Variables locales a funciones: Private

• {• int a; a = e * x[k] * x[k]; return a;• }

• int g(int *x, int k)• {• int a; k = k-1; a = e / x[k]; return a;• }

Thread 1

26Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 27: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Clausulas shared y private

– shared(varname,…)

Atributos de alcance

– private(varname,…)

27Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 28: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Clausula private

• Realiza una copia de la variable para cada hilo.• Las variables no se inicializan

• Cualquier valor externo a la región paralela se coloca

como indefinido.

void* work(float* c, int N) {float x, y ; int i;

#pragma omp parallel for private(x,y)

for(i=0; i<N; i++) {x = a[i]; y = b[i];c[i] = x + y;

}}

28Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 29: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Actividad

• Realizar un programa que sume dos arreglos

unidimensionales y los almacene en un tercer

arreglo.

• Versión Serial• Versión Serial

• Versión Paralela (OPENMP)

– Indicar que tipo de descomposición se utiliza.

– Indicar con las con las clausulas Shared y Private

cuales son privadas y compartidas.

29Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 30: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Problemas con private

float prod_punto(float* a, float* b, int N) {

float sum = 0.0;#pragma omp parallel forfor (int i=0; i<N; i++)for (int i=0; i<N; i++){

sum += a[i] * b[i];}return sum;

}

30Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 31: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Cláusula reduce

La cláusula reduce funciona de manera similar a al MPI_Reduce. (Cálculo de operaciones parciales y colectivas

//Sintaxis: #pragma omp reduction(operator:variable)

¿Que hace?¿Que hace?

#pragma omp parallel for reduction(+:sum)

for (i=0; i<N; i++)

{

sum += a[i] * b[i];

}

31Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 32: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Operaciones con reduce (C/C++)

Operator Initial Value

+ 0

* 1

Operator Initial Value

& 0

* 1

- 0

^ 0

| 0

&& 1

|| 0

32Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 33: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Ejemplo

• Cálculo del numero Pi

• π= ∫0

1

4/(1+x2) dx

• La Regla de rectángulo consiste de estimar el

área debajo de la curva y=4/(1+x2) entre x=0 y

x=1 mediante áreas de rectángulos

33Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 34: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Ejemplo#include <stdio.h>

#include <time.h>

long long num_steps = 1000000000;

double step;

x = (i + .5)*step;

sum = sum + 4.0/(1.+ x*x);

}

pi = sum*step;

printf(“El valor de Pi es int main(int argc, char* argv[])

{

double x, pi, sum=0.0;

int i;

for (i=0; i<num_steps; i++)

{

printf(“El valor de Pi es %15.12f\n",pi);

return 0;

}

34Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 35: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Actividad

• Paralelizar el código anterior, utilizando los

constructores y clausulas vistos

35Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 36: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Constructor critical

float dot_prod(float* a, float* b, int N) {

float sum = 0.0;#pragma omp parallel forfor (int i=0; i<N; i++){

#pragma omp critical#pragma omp criticalsum += a[i] * b[i];

}return sum;

}

// Sintaxis: #pragma omp critical [(lock_name)]

¿Cuál será el problema aquí?

36Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 37: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Ejercicio- paralelizar#include <omp.h>

#include <stdio.h>

#include <stdlib.h>

#define SIZE 10

int main()

{

}

max = a[0];

for (i = 1; i < SIZE; i++)

{

if (a[i] > max)

{{

int i;

int max;

int a[SIZE];

for (i = 0; i < SIZE; i++)

{

a[i] = rand();

printf_s("%d\n", a[i]);

{

max = a[i];

}

}

printf_s("max = %d\n", max);

}

37Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 38: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Asignando Iteraciones

• La cláusula schedule permite dividir las

iteraciones de los ciclos entre los hilos, indica

como las iteraciones se asignan a los hilos.

38Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 39: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

• schedule(static ,[chunk])– Bloques de iteraciones de tamaño “chunk” a los

hilos

– Distribución Round robin

• schedule (dynamic,[chunk])• schedule (dynamic,[chunk])– Los hilos toman un numero “chunk” de iteraciones

• schedule(guided,[chunck])– Inicia con un bloque grande

– El tamaño del bloque se hace mas pequeño, hasta llegar al tamaño del “chunk”

39Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 40: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Recomendaciones de uso

Scheduling Clause When to Use

Static Predictable and similar work per iteration

Dynamic Unpredictable, highly variable work per iterationDynamic Unpredictable, highly variable work per iteration

Guided Special case of dynamic to reduce schedulingoverhead

40Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 41: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Ejemplo

#pragma omp parallel for schedule (static, 8)

for( int i = start; i <= end; i += 2 )

{{

if ( TestForPrime(i) ) gPrimesFound++;

}

41Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 42: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

a = alice();b = bob();a = alice();b = bob();

Descomposicion de Tareas

b = bob();s = boss(a, b);c = cy();printf ("%6.2f\n",

bigboss(s,c));

b = bob();s = boss(a, b);c = cy();printf ("%6.2f\n",

bigboss(s,c));

42Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 43: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Descomposicion de Tareas

alice bob

boss cyboss

bigboss

cy

43Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 44: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Paralelismo funcional

Secciones Paralelas

•Secciones independientes de código, se

pueden ejecutar de forma concurrente

#pragma omp parallel sections

{

Serial Parallel

{

#pragma omp section

phase1();

#pragma omp section

phase2();

#pragma omp section

phase3();

}

44Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 45: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Constructor single

• #pragma omp single

#pragma omp parallel{

DoManyThings();DoManyThings();#pragma omp single{

ExchangeBoundaries();} // Hilos esperan

DoManyMoreThings();}

45Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 46: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Constructor maestro

#pragma omp master { }

#pragma omp parallel{

DoManyThings();DoManyThings();#pragma omp master { // si no es el maestro,salta

ExchangeBoundaries();}DoManyMoreThings();

}

46Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 47: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Barreras Implícitas

• Algunos constructores tiene barreras

implícitas

– Parallel

– For– For

– Single

• Barreras no necesarias perjudican el

desempeño

47Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 48: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Clausula nowait

• Permite ignorar barreras implicitas

#pragma omp for nowait

for(...)

{...};

#pragma single nowait

{ [...] }

{...};

#pragma omp for schedule(dynamic,1) nowait

for(int i=0; i<n; i++)

a[i] = bigFunc1(i);

#pragma omp for schedule(dynamic,1)

for(int j=0; j<m; j++)

b[j] = bigFunc2(j);

48Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 49: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Constructor Barrier

• Barrera Explicita

• Cada hilo espera hasta que todos lleguen a la

barrera#pragma omp parallel shared (A, B, C) #pragma omp parallel shared (A, B, C) {

DoSomeWork(A,B);printf(“Processed A into B\n”);

#pragma omp barrier DoSomeWork(B,C);printf(“Processed B into C\n”);

}

49Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez

Page 50: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Ejercicio

• Paralelizar los dos códigos proporcionados,

utilizando los constructores y clausulas vistos.

Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez50

Page 51: Multiprocesamiento en lenguaje C - UNAMlcomp89.fi-b.unam.mx/licad/assets/MultiprocesamientoProfesores/... · Multiprocesamiento en lenguaje C Introduccióna Open Multiprocessing (OpenMP)

Referencias

• Introduction to parallel Programming ,Student

book , Intel Software College , 2007

• Multicore Programming for Academia, Intel

Software College, 2007Software College, 2007

• https://computing.llnl.gov/tutorials/openMP/

Proyecto PAPIME PE104911

Karen Sáenz - Oscar Valdez51