Descargar

Programación con Paralelismo Implícito (página 2)

Enviado por Pablo Turmero


Partes: 1, 2, 3
edu.red Una pragma, en C o C++, es una directiva al compilador.

La sintaxis es #pragma omp

Ejemplo: #pragma omp parallel for le dice al compilador que trate a paralelizar el bucle for que sigue, por tanto, el compilador tiene que verificar que cuando se ejecuta, habrá disponible la información necesaria para llevar a cabo las iteraciones

OpenMP Conceptos básicos

edu.red Ejemplo #include #include

int main (int argc, char *argv[]) { int p,th_id; p=omp_get_num_procs(); omp_set_num_threads(p); #pragma omp parallel private(th_id); { th_id = omp_get_thread_num(); printf("Hello World from thread %dn", th_id); } return 0; }

OpenMP Conceptos básicos

edu.red El contexto de ejecución Todo hilo tiene un contexto de ejecutación, que consiste en el espacio de direcciones que el hilo puede acceder El contexto de ejecutación incluye variables estáticas, estructuras dinámicamente asignadas, etc OpenMP Conceptos básicos

edu.red OpenMPParalelismo de datos Características generales de cláusulas de datos: Especifican propiedades “paralelas” de las variables Pueden aparecer tantas veces como sea necesario Pueden usarse con cualquier directiva OpenMP

Restricciones generales de cláusulas de datos: Una variable no puede aparecer en más de una cláusula Sólo admiten variables que sean visibles desde la subrutina o función que incluya la cláusula

edu.red Variables compartidas y Variables privadas Una variable compartida tiene la misma dirección en el contexto de ejecutación de cada hilo. Una variable privada tiene una dirección distinta en el contexto de ejecutación de cada hilo. Un hilo no puede acceder a las variables privadas de otro hilo.

OpenMP Paralelismo de datos

edu.red OpenMPParalelismo de datos La cláusula SHARED Especifica que una variable es compartida por las tareas: #pragma omp parallel for SHARED( c,d) o ! $OMP PARALLEL SHARED (c,d) … ! $OMP END PARALLEL

edu.red OpenMPParalelismo de datos La cláusula SHARED Características de las variables compartidas: Todas las tareas ven su contenido Todas las tareas pueden cambiar su contenido Todas las tareas ven los cambios realizados Peculiaridades de las variables compartidas: Los cambios no son inmediatos (cache coherency) Pueden requerir de sincronía entre tareas Existen algunas limitaciones en Fortran

edu.red OpenMPParalelismo de datos La cláusula PRIVATE Especifica que una variable es privada a cada tarea: #pragma omp parallel for PRIVATE(a,b ) o ! $OMP PARALLEL PRIVATE (a,b) … ! $OMP END PARALLEL

edu.red OpenMPParalelismo de datos La cláusula PRIVATE Características de las variables privadas: Cada tarea tiene su propia versión de la variable Eso se consigue replicando la variable en memoria Las otras tareas no pueden ver su contenido Peculiaridades de las variables privadas: Su valor inicial no está definido Tras la región paralela su valor tampoco está definido Existen algunas limitaciones

edu.red Variables privadas

for (i = 0; i < BLOCK_SIZE(id,p,n); i++) for (j = 0; j < n; j++) a[i][j] = MIN(a[i][j],a[i][k]+tmp[j]);

Cualquier de los bucles se podria ejecutar en paralelo Es mejor paralelizar el bucle exterior para reducir el número de forks/joins Todas las variables excepto el indice son compartidas. Deberiamos dar cada hilo su copia privada de j

OpenMP Conceptos básicos

edu.red Variables privadas

#pragma omp parallel for private(j) for (i = 0; i < BLOCK_SIZE(id,p,n); i++) for (j = 0; j < n; j++) a[i][j] = MIN(a[i][j],a[i][k]+tmp[j]);

Cualquier de los bucles se podria ejecutar en paralelo Es mejor paralelizar el bucle exterior para reducir el número de forks/joins Todas las variables excepto el indice son compartidas. Deberiamos dar cada hilo su copia privada de j

OpenMP Conceptos básicos

edu.red OpenMPParalelismo de datos La cláusula DEFAULT Especifica el comportamiento por defecto:

#pragma omp parallel for DEFAULT( PRIVATE ) SHARED (a) o

! $OMP PARALLEL DEFAULT ( PRIVATE ) SHARED (a) … ! $OMP END PARALLEL

edu.red OpenMPParalelismo de datos La cláusula DEFAULT Características de la cláusula: Sólo puede aparecer una única vez en cada directiva Admite tres opciones: PRIVATE, SHARED y NONE Con NONE todas las variables deben ser definidas Sólo afecta a las variables directamente visibles: Las variables definidas dentro de la subrutina ejemplo no se ven afectadas por la cláusula DEFAULT

edu.red firstprivate() Es una extensiónd e la cláusula PRIVATE Se usa para crear una variable privada que tiene su valor inicial igual al valor de la variable controlada por el hilo maestro cuando se entra el bucle. Si un hilo cambia el valor de una variable en alguna iteración, entonces este valor será el valor de la variable en iteraciones subsecuentes

OpenMP Conceptos básicos

edu.red firstprivate() x[0] = complex_function(); for (i-0;j<4;j++) x[j]=g(I,x[j-1]); answer[i] = x[i] – x[j]; } Se puede hacer el bucle exterior paralelo si hacemos j y x privadas. Sin embargo, x[0] se necesita en la primera iteración del bucle interior. OpenMP Conceptos básicos

edu.red firstprivate() Se podría mover la inicialización de x[0] dentro del bucle anterior, pero es caro. Mejor:

x[0] = complex_function(); #pragma op parallel for private[j] firstprivate(x) for (i-0;j<4;j++) x[j]=g(I,x[j-1]); answer[i] = x[i] – x[j]; }

OpenMP Conceptos básicos

edu.red OpenMPParalelismo de datos La cláusula FIRSTPRIVATE Características de las variables FIRSTPRIVATE: Cada tarea tiene su propia versión de la variable Eso se consigue replicando la variable en memoria Las otras tareas no pueden ver su contenido Su valor es inicializado con la variable original Peculiaridades de las variables FIRSTPRIVATE: Tras la región paralela su valor no está definido

edu.red La cláusula LASTPRIVATE La cláusula se usa para copiar el valor privado del hilo que ejecutó la última iteración a la copia del hilo maestro

OpenMP Conceptos básicos

edu.red OpenMPParalelismo de datos Resumen de cláusulas de datos Cláusulas de datos vistas: SHARED, PRIVATE, DEFAULT, FIRSTPRIVATE Cláusulas de datos adicionales: LASTPRIVATE, REDUCTION, COPYIN, COPYPRIVATE Condiciones generales a tener en cuenta: Una variable sólo puede aparecer en una cláusula, salvo en FIRSTPRIVATE y LASTPRIVATE, a la vez El contador de un bucle siempre es privado Cada cláusula tiene sus limitaciones

edu.red OpenMPDirectivas distribución de trabajo Características de estas directivas: Distribuyen una carga de trabajo sobre varias tareas No crean nuevas tareas, usan las ya existentes Funcionan en regiones seriales y en regiones paralelas Incluyen al final una sincronización implicita Restricciones de estas directivas: Deben ser encontradas por todas las tareas Sólo pueden contener bloques estructurados de código

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente