Multiprocesamiento en lenguaje C -...
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/1.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/2.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/3.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/4.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/5.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/6.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/7.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/8.jpg)
¿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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/9.jpg)
¿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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/10.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/11.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/12.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/13.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/14.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/15.jpg)
¿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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/16.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/17.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/18.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/19.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/20.jpg)
#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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/21.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/22.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/23.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/24.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/25.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/26.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/27.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/28.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/29.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/30.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/31.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/32.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/33.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/34.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/35.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/36.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/37.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/38.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/39.jpg)
• 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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/40.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/41.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/42.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/43.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/44.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/45.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/46.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/47.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/48.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/49.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/50.jpg)
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)](https://reader030.fdocument.pub/reader030/viewer/2022011820/5ea870cdca0e6a6f3c0e239e/html5/thumbnails/51.jpg)
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