OpenMP

OpenMP

OpenMP es una interfaz de programación de aplicaciones (API) para la programación multiproceso de memoria compartida en múltiples plataformas. Permite añadir concurrencia a los programas escritos en C, C++ y Fortran sobre la base del modelo de ejecución fork-join. Está disponible en muchas arquitecturas, incluidas las plataformas de Unix y de Microsoft Windows. Se compone de un conjunto de directivas de compilador, rutinas de biblioteca, y variables de entorno que influencian el comportamiento en tiempo de ejecución.

Definido juntamente por un grupo de proveedores de hardware y de software mayores, OpenMP es un modelo de programación portable y escalable que proporciona a los programadores una interfaz simple y flexible para el desarrollo de aplicaciones paralelas para las plataformas que van desde las computadoras de escritorio hasta las supercomputadoras. Una aplicación construida con un modelo de programación paralela híbrido se puede ejecutar en un cluster de computadoras utilizando ambos OpenMP y MPI, o más transparentemente a través de las extensiones de OpenMP para los sistemas de memoria distribuida.

Contenido

Modelo de ejecución

OpenMP se basa en el modelo fork-join, paradigma que proviene de los sistemas Unix, donde una tarea muy pesada se divide en K hilos (fork) con menor peso, para luego "recolectar" sus resultados al final y unirlos en un solo resultado (join).

Sintaxis básica

La sintaxis básica que nos encontramos en una directiva de OpenMP es para C/C++:

# pragma omp <directiva> [cláusula [ , ...] ...]

para Fortran

!$OMP  PARALLEL <directiva> [cláusulas]
    [ bloque de código ]
!$OMP END <directiva>

Modelo de Ejecución

Cuando se incluye una directiva OpenMP esto implica que se incluye una sincronización obligatoria en todo el bloque. Es decir, el bloque de código se marcará como paralelo y se lanzarán hilos según las características que nos dé la directiva, y al final de ella habrá una barrera para la sincronización de los diferentes hilos (salvo que implícitamente se indique lo contrario con la directiva nowait). Este tipo de ejecución se denomina fork-join.

Directivas

También se suelen llamar constructores:

  • parallel: Esta directiva nos indica que la parte de código que la comprende puede ser ejecutada por varios hilos.
  • for: Igual que parallel pero optimizado para los bucles for. Su formato es:
    #pragma parallel for [cláusula, ... , cláusula]
    
  • section y sections: Indica secciones que pueden ejecutarse en paralelo pero por un único hilo.
  • single: La parte de código que define esta directiva, sólo se puede ejecutar un único hilo de todos los lanzados, y no tiene que ser obligatoriamente el hilo padre.
  • master: La parte de código definida, sólo se puede ejecutar por el hilo padre.
  • critical: Sólo un hilo puede estar en esta sección. Definen secciones críticas o condiciones de carrera.
  • atomic: Se utiliza cuando la operación atañe a sólo una posición de memoria, y tiene que ser actualizada sólo por un hilo simultáneamente. Operaciones tipo x++ o --x son las que usan esta cláusula.
  • flush: Esta directiva resuelve la consistencia, al exportar a todos los hilos un valor modificado de una variable que ha realizado otro hilo en el procesamiento paralelo.

Funciones

  • omp_set_num_threads: Fija el número de hilos simultaneos.
  • omp_get_num_threads: Devuelve el número de hilos en ejecución.
  • omp_get_max_threads: Devuelve el número máximo de hilos que lanzará nuestro programa en las zonas paralelas. Es muy útil para reservar memoria para cada hilo.
  • omp_get_thread_num: Devuelve el número del thread dentro del equipo (valor entre 0 y omp_get_num_threads()-1)
  • omp_get_num_procs: Devuelve en número de procesadores de nuestro ordenador o disponibles (para sistemas virtuales).
  • omp_set_dinamic: Valor booleano que nos permite expecificar si queremos que el número de hilos crezca y decrezca dinámicamente.

Véase también

  • Programación paralela

Web relacionadas

Sitio Oficial de OpenMP


Wikimedia foundation. 2010.

Игры ⚽ Нужен реферат?

Mira otros diccionarios:

  • OpenMP — Original author(s) OpenMP Architecture Review Board[1] Developer(s) OpenMP Architecture Review Board …   Wikipedia

  • OpenMP — (Open Multi Processing)  открытый стандарт для распараллеливания программ на языках Си, Си++ и Фортран. Описывает совокупность директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования… …   Википедия

  • Openmp — (Open Multi Processing) ist eine seit 1997 gemeinschaftlich von verschiedenen Hardware und Compilerherstellern entwickelte Programmierschnittstelle. Der Standard dient zur Shared Memory Programmierung in C/C++/Fortran auf Multiprozessor Computern …   Deutsch Wikipedia

  • OpenMP — Logo Basisdaten Entwickler Liste kompatibler Compiler …   Deutsch Wikipedia

  • OpenMP — (Open Multi Processing) est une interface de programmation pour le calcul parallèle sur architecture à mémoire partagée. Cette API est supportée sur de nombreuses plateformes, incluant Unix et Windows, pour les langages de programmation C/C++ et… …   Wikipédia en Français

  • OpenMP — Open MultiProcessing standardisierte Programmierschnittstelle zu Mehrprozessorsystemen (vergl. http://www.sgi.com/Technology/OpenMP/) …   Acronyms

  • OpenMP — Open MultiProcessing standardisierte Programmierschnittstelle zu Mehrprozessorsystemen (vergl. http://www.sgi.com/Technology/OpenMP/) …   Acronyms von A bis Z

  • Comparison of MPI, OpenMP, and Stream Processing — MPI= MPI is a language independent communications protocol used to program parallel computers. Both point to point and collective communication are supported. MPI is a message passing application programmer interface, together with protocol and… …   Wikipedia

  • Open Multi-Processing — OpenMP OpenMP (Open Multi Processing) est une interface de programmation pour le calcul parallèle sur architecture à mémoire partagée. Cette API est supportée sur de nombreuses plateformes, incluant Unix et Windows, pour les langages de… …   Wikipédia en Français

  • ОМП — OpenMP (OMP) Одесский морской порт Оружие массового поражения Оценка максимального правдоподобия …   Википедия

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”