PDF de programación - Programación de Plataformas Paralelas I - Curso de Computación Científica en Clusters

Imágen de pdf Programación de Plataformas Paralelas I - Curso de Computación Científica en Clusters

Programación de Plataformas Paralelas I - Curso de Computación Científica en Clustersgráfica de visualizaciones

Publicado el 22 de Diciembre del 2020
511 visualizaciones desde el 22 de Diciembre del 2020
1,6 MB
54 paginas
Creado hace 14a (10/03/2010)
Curso de Computación Científica en Clusters
Programación de Plataformas Paralelas I:
Programación de Plataformas Paralelas I:

OpenMP
OpenMP

Javier Cuenca

Universidad de Murcia

Nociones básicas
Nociones básicas

• Modelo de programación fork-join, con generación de múltiples threads.





Inicialmente se ejecuta un thread hasta que aparece el primer constructor paralelo,
se crean threads esclavos y el que los pone en marcha es el maestro.

Al final del constructor se sincronizan los threads y continúa la ejecución el maestro.

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

22

Ejemplo inicial: ejemplo_hello.c
Ejemplo inicial: ejemplo_hello.c

#include <omp.h>
int main()
{

int iam =0, np = 1;

#pragma omp parallel private(iam, np)

{

#if defined (_OPENMP)

np = omp_get_num_threads();
iam = omp_get_thread_num();

#endif

printf(“Hello from thread %d out of %d \n”,iam,np);
}

}

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

33

Directivas
Directivas

#pragma omp nombre-directiva [cláusulas]

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

44

Constructores:
Constructores:
parallel
Constructor parallel
Constructor

#pragma omp parallel [cláusulas]

bloque

Se crea un grupo de threads
El que los pone en marcha actúa de maestro.
Con cláusula if se evalúa su expresión



si da valor distinto de cero se crean los threads
si es cero se hace en secuencial.

Número de threads a crear se obtiene por



variables de entorno o llamadas a librería.

Hay barrera implícita al final de la región.
Cuando dentro de una región hay otro constructor paralelo: anidamiento



cada esclavo crearía otro grupo de threads esclavos de los que sería el
maestro.

Cláusulas (private, firstprivate, default, shared, copyin y reduction) forma en

que se accede a las variables.

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

55

Constructores:
Constructores:
Constructor forfor
Constructor

#pragma omp for [cláusulas]

bucle for










Las iteraciones se ejecutan en paralelo por threads que ya existen
La parte de inicialización del for debe ser una asignación
La parte de incremento debe ser una suma o resta
La parte de evaluación es la comparación de una variable entera sin signo con un
valor, utilizando un comparador mayor o menor (puede incluir igual).
Los valores que aparecen en las tres partes del for deben ser enteros.
Hay barrera al final a no ser que se utilice la cláusula nowait.
Hay una serie de cláusulas (private, firstprivate, lastprivate y reduction) para indicar
la forma en que se accede a las variables.

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

66

Constructores:
Constructores:
Constructor forfor: ejemplo_for.c
: ejemplo_for.c
Constructor

#include <omp.h>
int main()
{

int iam =0, np = 1, i=0;
#pragma omp parallel private(iam, np,i)
{

#if defined (_OPENMP)

np = omp_get_num_threads();
iam = omp_get_thread_num();

#endif
printf("Hello from thread %d out of

%d\n",iam,np);

#pragma omp for
for(i=0;i<(np*2);i++)
{

printf("Thread %d, contador %d \n",iam,i);

}

}

}

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

77

Constructores:
Constructores:
Constructor forfor
Constructor









Una cláusula schedule indica la forma como se dividen las iteraciones del for entre los

threads:
schedule(static,tamaño) las iteraciones se dividen según el tamaño, y la asignación
se hace estáticamente a los threads. Si no se indica el tamaño se divide por igual
entre los threads.

schedule(dynamic,tamaño) las iteraciones se dividen según el tamaño y se asignan
a los threads dinámicamente cuando van acabando su trabajo.

schedule(guided,tamaño) las iteraciones se asignan dinámicamente a los threads
pero con tamaños decrecientes, empezando en tamaño numiter/np y acabando en
“tamaño”.

schedule(runtime) deja la decisión para el tiempo de ejecución, y se obtienen de la
variable de entorno OMP_SCHEDULE.

• ver modificaciones ejemplo_for.c

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

88

Constructores:
Constructores:
sections
Constructor sections
Constructor

#pragma omp sections [cláusulas]

{

[#pragma omp section]

bloque

[#pragma omp section

bloque

...

}





Cada sección se ejecuta por un thread.
Hay barrera al final de “sections” a no ser que se utilice la cláusula nowait.
Hay una serie de cláusulas (private, firstprivate, lastprivate y reduction) para indicar
la forma en que se accede a las variables.

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

99

Constructores:
Constructores:
Constructor sections
Constructor

sections: ejemplo_sections.c
: ejemplo_sections.c

#pragma omp parallel private(iam, np,i)
{

#pragma omp sections
{

#pragma omp section

printf("Soy el thread %d, en solitario en la seccion 1ª \n",iam);

#pragma omp section

printf("Soy el thread %d, en solitario en la sección 2ª \n",iam);

#pragma omp section

printf("Soy el thread %d, en solitario en la seccion 3ª \n",iam);

}//sections

}//parallel

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1010

Constructores:
Constructores:
Constructores combinados
Constructores combinados

#pragma omp parallel for [cláusulas]

bucle for

Es forma abreviada de directiva parallel que tiene una única directiva for, y admite sus

cláusulas menos la nowait.

#pragma omp parallel sections [cláusulas]

Es forma abreviada de directiva parallel que tiene una única directiva sections, y admite sus

cláusulas menos la nowait.

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1111

Constructores:
Constructores:
Constructores de ejecución secuencial
Constructores de ejecución secuencial

#pragma omp single [cláusulas]

bloque

El bloque se ejecuta por un único thread. No tiene por qué ser el maestro.
Hay barrera al final a no ser que se utilice la cláusula nowait.

#pragma omp master

bloque

El bloque lo ejecuta el thread maestro.
No hay sincronización al entrar ni salir.

#pragma omp ordered

bloque

Todo dentro de un for, el bloque se ejecuta en el orden en que se ejecutaría en
secuencial.









Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1212

Constructores:
Constructores:
Constructores de ejecución secuencial: ejemplos
Constructores de ejecución secuencial: ejemplos

ejemplo_single.c

Barreras al final de cada single

ejemplo_master.c

Ejecución solamente por thread maestro (el 0)
No hay barreras

ejemplo_ordered.c

Se ordena la ejecución por iteraciones del bucle

Curso de Computación Científica en Clusters Facultad de Informática. Universidad de Murcia. Febrero
Curso de Computación Científica en Clusters

Facultad de Informática. Universidad de Murcia. Febrero--Mayo 2010
Mayo 2010

1313

Constructores:
Constructores:
Constructores de ejecución secuencial: ejemplo_single.c
Constructores de ejecución secuencial: ejemplo_single.c

#pragma omp parallel private(iam, np,i)

{

#pragma omp single

{

printf("Soy el thread %d, actuando en solitario dentro del primer
bloque\n",iam); sleep(1); }

#pragma omp single

{

printf("Soy el thread %d, actuando en solitario dentro ddel
segundo bloque \n",iam); sleep(1);
}

#pragma omp single

{

printf("Soy el thread %d, actuando en solitario dentro ddel tercer
bloque \n",iam); sleep(1); }
  • Links de descarga
http://lwp-l.com/pdf18591

Comentarios de: Programación de Plataformas Paralelas I - Curso de Computación Científica en Clusters (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad