Upload
adelsolar
View
248
Download
0
Embed Size (px)
Citation preview
OpenMP
Antonio del Solar - Arquitectura de Computadores
OpenMP
OpenMP (Open Multi-Processing) es una API (Aplication Programming Interface)
que permite programación paralela multiplataforma en los lenguajes C, C++ y Fortran.
Compiladores y Lenguajes I
Es compatible con los siguientes sistemas operativos:
-Microsoft Windows
-Mac OS X
-GNU/Linux
-HP-UX
-AIX
-Solaris
Compiladores y Lenguajes IIPuede compilarse con:
GNU - gcc - C,C++ y Fortran http://gcc.gnu.org/wiki/openmp
IBM - XLC - C,C++ y Fortran http://www.ibm.com/developerworks/rational/library/parallelize-ccpp-code-zOS-OpenMP/index.html
Oracle - Solaris Studiohttp://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html
Intel - Compilershttps://software.intel.com/en-us/intel-compilers/
Portland Group - Compilers and Toolshttp://www.pgroup.com/support/download_pgi2015.php
Absoft Pro - Fortran Compilerhttp://www.absoft.com/SMP_Solutions.html
Compiladores y Lenguajes III
Puede compilarse con:
Lahey/Fujitsu - Fortran 95 http://www.polyhedron.com/products/fortran-compilers/lahey
PathScale - Enzo 2014 y EKOPath5 http://www.pathscale.com/
HP - C, C++, Fortran Compilers http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/Online_Help/parallelprog.htm
Microsoft - Visual Studiohttps://msdn.microsoft.com/en-us/library/tt15eb9t.aspx
Cray - Compiladores y OpenACChttp://www.openacc.org/
Compiladores y Lenguajes IV
Puede compilarse con:
NAG - Fortran compilerhttp://www.nag.com/nagware/np.asp
OpenUH - UH Compiler http://web.cs.uh.edu/~openuh/features.shtml
LLVM - clanghttp://clang-omp.github.io/
LLNL - Rose Compiler Framework https://en.wikibooks.org/wiki/ROSE_Compiler_Framework/OpenMP_Support
Appentra Solutions - Parallware compilerhttp://www.appentra.com/products/parallware/
Configuración de IDE en OpenMP I
El entorno de desarrollo elegido en esta presentación es Qt Creatoren Linux Mint. Es un IDE diseñado principalmente para C++, que integra de
forma muy positiva para el usuario las funciones que habitualmente son menos amigables (ya sea en otros IDEs o sin utilizar ninguno) como la depuración de
errores o el seguimiento de las versiones del código.
Utiliza por defecto el compilador gcc para C y g++ para C++
Configuración de IDE en OpenMP II
Sus principales características son:
-Interpretación del código C y C++: No posee un simple editor de texto, sino que reconoce la gramática de estos lenguajes, siendo capaz de realizar precisiones sobre el código escrito por el usuario como por ejemplo
señalar los errores que pueda haber cometido y el posible motivo.
-Administrador de proyectos: Integra el desarrollo de proyectos de considerable complejidad, facilitando el control de versiones y encargándose de la creación y configuración de los archivos necesarios en función del tipo
de proyecto que se trate.
-Depuración de errores y pruebas: Permite utilizar fácilmente herramientas que comprueban que el código produce el resultado deseado sin errores y que es compatible con los requisitos de la plataforma en la que se
ejecutará.
-Publicación final: Incluye el proceso de compilación en el producto final, destinado a ser utilizado en una o más plataformas (escritorio, móviles, ...), encargándose de que cumpla los requisitos de varios de los canales
centralizados de distribución de software (como la tienda de Google o de Apple).
Configuración de IDE en OpenMP III
En GNU/Linux la instalación de nuevo software está muy facilitado por la existencia de repositorios centralizados, a los que se puede acceder por consola de comandos o también por interfaces
gráficas. Realizando una búsqueda del software “qtcreator”, aparecen los paquetes con un nombre similar, siendo el paquete del mismo nombre la instalación completa:
Una vez conocido el paquete deseado, se procede a su instalación:
Configuración de IDE en OpenMP IV
También puede instalarse a través del interfaz gráfico de software de Linux Mint:
Configuración de IDE en OpenMP V
La pantalla inicial consta de una presentación muy positiva para el usuario, mostrando la información de uso del programa y facilitando el acceso a
documentación y tutoriales.
Configuración de IDE en OpenMP VI
La creación de nuevos proyectos está muy facilitada por un asistente, que permite elegir el lenguaje, detalles sobre la plataforma destino, control de
versiones, etc...
Configuración de IDE en OpenMP VII
Qt Creator ofrece gran libertad de configuración a través de su propia funcionalidad y de extensiones que aumentan sus posibilidades. Al crear el
proyecto se puede especificar el directorio donde se guardará, incluyendo sus subcarpetas de depurado y versión final, así como opciones del control de
versiones y de adhesión a otros proyectos previos.
Configuración de IDE en OpenMP VII
La integración de Qt Creator con OpenMP es tan sencilla como añadir estas dos líneas en el archivo .pro del proyecto del programa:
QMAKE_CXXFLAGS += -fopenmpLIBS += -fopenmp
Ejecución de código en OpenMP I
Una vez configurado el IDE, se puede comenzar a escribir y ejecutar código paralelo:
Ejecución de código en OpenMP II
En el caso del ejemplo presentado, además de ejecutarlo hay que indicar
como parámetro de entrada del programael número de hilos deseado:
Ejecución de código en OpenMP III
El programa realiza la integral definida entre dos puntos con el número de trapezoides de aproximación deseados:
Ejecución de código en OpenMP IV
Las directivas de OpenMP presentes en este código son:
-# pragma omp parallel num_threads() : Crea la región de ejecución de múltiples hilos en paralelo, con el número de hilos indicado. En el caso de este
programa, dicho número es el introducido como parámetro inicial en la ejecución del programa.
-# pragma omp critical: Limita la ejecución del bloque al que va asociado a un único hilo simultáneo. En el caso de este programa, lo que limita es la
presentación final del resultado.
Ejecución de código en OpenMP V
Las funciones de OpenMP presentes en este código son:
-omp_get_thread_num() : Devuelve el número de hilo que está ejecutando la función. Es un número entre 0 y un número menos que el devuelto por omp_get_num_threads().
-omp_get_num_threads() : Devuelve el número de hilos total en ejecución