OpenMPDirectivas distribución de trabajo
La directiva PRAGMA OMP PARALLEL FOR
Características de la directiva:
Distribuye la carga de un bucle entre las tareas
La descomposición se hace en el espacio de iteraciones
El contador es implícitamente declarado PRIVATE
Restricciones :
En C, el bucle debe ser de un tipo determinado
En Fortran, el bucle no puede ser del tipo do while
El contador debe ser el mismo para todas las tareas
Sólo admite bloques estructurados de código
Las variables SHARED sólo se actualizan al final
La directiva PRAGMA OMP PARALLEL SECTION
Hasta ahora hemos considerado paralelismo de data nada más
OpenMP nos permite asignar hilos distintos a partes distintas del código (paralelismo funcional)
Permite implementar el paralelismo tipo MIMD
Precede a un bloque de k bloques de código que se puede ejecutar en paralelo por k hilos
La sintaxis:#pragma omp parallel sections
OpenMPDirectivas distribución de trabajo
v = alpha();
w = beta();
x = gamma(v, w);
y = delta();
printf ("%6.2fn", epsilon(x,y));
Se puede ejecutar
alpha, beta, and delta
en paralelo.
OpenMPDirectivas distribución de trabajo
La directiva PRAGMA OMP SECTION
Precede cada bloque de código dentro del bloque grande
Se puede omitir para el primer bloque después de la pragma parallel sections
La sintaxis:#pragma omp section
OpenMPDirectivas distribución de trabajo
Ejemplo de parallel section
#pragma omp parallel sections
{
#pragma omp section /* Optional */
v = alpha();
#pragma omp section
w = beta();
#pragma omp section
y = delta();
}
x = gamma(v, w);
printf ("%6.2fn", epsilon(x,y));
OpenMPDirectivas distribución de trabajo
Otra Posibilidad
Ejecutar alpha y
beta en paralelo.
Ejecutar gama y
delta en paralelo.
OpenMPDirectivas distribución de trabajo
La directiva PRAGMA OMP SECTIONS
Aparece a dentro de un bloque paralelo de código
Tiene el mismo significado como la pragma parallel sections
Varias pragmas sections dentro de un bloque paralelo podría reducir los gastos de fork/join
Restricciones de la directiva:
La manera de asignar secciones a tareas no está definida
Cada sección debe ser un bloque estructurado de código
No se crean nuevas tareas, se usan las existentes
Las variables SHARED sólo se actualizan al final
OpenMPDirectivas distribución de trabajo
#pragma omp parallel
{
#pragma omp sections
{
v = alpha();
#pragma omp section
w = beta();
}
#pragma omp sections
{
x = gamma(v, w);
#pragma omp section
y = delta();
}
}
printf ("%6.2fn", epsilon(x,y));
OpenMPDirectivas distribución de trabajo
Página anterior | Volver al principio del trabajo | Página siguiente |