Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

Programación Paralela con Memoria Compartida




Enviado por Pablo Turmero



Partes: 1, 2


    Monografias.com

    ¿Qué es OpenMP?
    API Paralela portable de memoria compartida
    Fortran, C, y C++
    Muchos distribuidores soporte para Linux y Windows
    Estandariza tareas y paralelismo de ciclos
    Soporta paralelismo de grano grueso
    Combina código serial y paralelo en un solo fuente
    Estandariza ~ 20 años de experiencia de paralelización dirigida por el compilador

    Monografias.com

    Modelo de programación

    El hilo maestro se divide en un equipo de hilos como sea necesario
    El Paralelismo se añade incrementalmente: el programa secuencial se convierte en un programa paralelo
    Regiones paralelas
    Hilo maestro

    Monografias.com

    Detalles de la sintaxis para comenzar
    Muchas de las construcciones de OpenMP son directivas del compilador o pragmas
    Para C y C++, los pragmas toman la forma:
    #pragma omp construct [clause [clause]…]
    Para Fortran, las directivas toman una de las formas:
    C$OMP construct [clause [clause]…]
    !$OMP construct [clause [clause]…]
    *$OMP construct [clause [clause]…]
    Archivo de cabecera o módulo de Fortran 90
    #include “omp.h”
    use omp_lib

    Monografias.com

    Región Paralela y Bloques Estructurados (C/C++)
    Muchas de las construcciones de OpenMP se aplican a bloques estructurados
    Bloque Estructurado: un bloque con un punto de entrada al inicio y un punto de salida al final
    Los únicos “saltos” permitidos son sentencias de STOP en Fortran y exit() en C/C++

    Monografias.com

    Región Paralela y Bloques Estructurados (C/C++)
    Un bloque estructurado
    Un bloque no estructurado
    if (go_now()) goto more;
    #pragma omp parallel
    {
    int id = omp_get_thread_num();
    more: res[id] = do_big_job(id);
    if (conv (res[id])) goto done;
    goto more;
    }
    done: if (!really_done()) goto more;
    #pragma omp parallel
    {
    int id = omp_get_thread_num();

    more: res[id] = do_big_job (id);

    if (conv (res[id])) goto more;
    }
    printf (“All donen”);

    Monografias.com

    Trabajo compartido
    Trabajo compartido es el término general usado en OpenMP para describir la distribución de trabajo entre hilos.
    Tres ejemplos de trabajo compartido en OpenMP son:
    Construcción omp for
    Construcción omp sections
    Construcción omp task

    Automáticamente divide el trabajo entre hilos

    Monografias.com

    Construcción omp for
    Los hilos se asignan a un conjunto de iteraciones independientes
    Los hilos deben de esperar al final del bloque de construcción de trabajo en paralelo
    (Gp:) #pragma omp parallel
    (Gp:) #pragma omp for
    (Gp:) Barrera implícita
    (Gp:) i = 0
    i = 1
    i = 2
    i = 3
    (Gp:) i = 4
    i = 5
    i = 6
    i = 7
    (Gp:) i = 8
    i = 9
    i = 10
    i = 11

    // assume N=12
    #pragma omp parallel
    #pragma omp for
    for(i = 0, i < N, i++)
    c[i] = a[i] + b[i];

    Monografias.com

    Combinando pragmas
    Estos códigos son equivalentes
    (Gp:) #pragma omp parallel
    {
    #pragma omp for
    for (i=0;i< MAX; i++) { res[i] = huge();
    }
    }

    (Gp:) #pragma omp parallel for
    for (i=0;i< MAX; i++) {
    res[i] = huge();
    }

    Monografias.com

    La cláusula Private
    Reproduce la variable por cada hilo
    Las variables no son inicializadas; en C++ el objeto es construido por default
    Cualquier valor externo a la región paralela es indefinido
    (Gp:) void* work(float* c, int N) {
    float x, y; int i;
    #pragma omp parallel for private(x,y)
    for(i=0; i<= end; i += 2 )
    {
    if ( TestForPrime(i) ) gPrimesFound++;
    }
    Las iteraciones se dividen en bloques de 8
    Si start = 3, el primer bloque es
    i={3,5,7,9,11,13,15,17}

    Monografias.com

    Actividad 2b – Planificación del Mandelbrot
    Objetivo: crea una versión paralela de mandelbrot que use planificación dinámica de OpenMP
    Sigue la actividad de Mandelbrot llamada Mandelbrot Scheduling en el documento de la práctica

    Monografias.com

    Agenda
    ¿Qué es OpenMP?
    Regiones Paralelas
    Trabajo compartido
    Ambiente de datos
    Sincronización
    Tópicos avanzados opcionales

    Monografias.com

    Descomposición de tareas
    a = alice();
    b = bob();
    s = boss(a, b);
    c = cy();
    printf ("%6.2fn", bigboss(s,c));

    alice,bob, y cy pueden realizarse en paralelo
    (Gp:) alice

    (Gp:) bob

    (Gp:) boss

    (Gp:) bigboss

    (Gp:) cy

    Monografias.com

    Secciones omp
    #pragma omp sections
    Debe estar dentro de una región paralela
    Precede un bloque de código que contiene N bloques de código que pueden ser ejecutados concurrentemente por N hilos
    Abarca cada sección de omp

    Partes: 1, 2

    Página siguiente 

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter