2. OpenMP
OpenMP (Open Multi-Processing) es una API
(Aplication Programming Interface)
que permite programación paralela multiplataforma
en los lenguajes C, C++ y Fortran.
3. Compiladores y Lenguajes I
Es compatible con los siguientes
sistemas operativos:
-Microsoft
Windows
-Mac OS X
-GNU/Linux
-HP-UX
-AIX
-Solaris
4. Compiladores y Lenguajes II
Puede 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 Studio
http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html
Intel - Compilers
https://software.intel.com/en-us/intel-compilers/
Portland Group - Compilers and Tools
http://www.pgroup.com/support/download_pgi2015.php
Absoft Pro - Fortran Compiler
http://www.absoft.com/SMP_Solutions.html
5. 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 Studio
https://msdn.microsoft.com/en-us/library/tt15eb9t.aspx
Cray - Compiladores y OpenACC
http://www.openacc.org/
6. Compiladores y Lenguajes IV
Puede compilarse con:
NAG - Fortran compiler
http://www.nag.com/nagware/np.asp
OpenUH - UH Compiler
http://web.cs.uh.edu/~openuh/features.shtml
LLVM - clang
http://clang-omp.github.io/
LLNL - Rose Compiler Framework
https://en.wikibooks.org/wiki/ROSE_Compiler_Framework/OpenMP_Support
Appentra Solutions - Parallware compiler
http://www.appentra.com/products/parallware/
7. Configuración de IDE en OpenMP I
El entorno de desarrollo elegido en esta presentación es Qt Creator
en 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++
8. 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).
9. 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:
10. Configuración de IDE en OpenMP IV
También puede instalarse a través del interfaz gráfico de software de Linux Mint:
11. 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.
12. 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...
13. 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.
14. 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 += -fopenmp
LIBS += -fopenmp
15. Ejecución de código en OpenMP I
Una vez configurado el IDE, se puede comenzar
a escribir y ejecutar código paralelo:
16. 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 programa
el número de hilos deseado:
17. 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:
18. 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.
19. 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