Este documento presenta una introducción a OpenMP, una API para la paralelización de programas en memoria compartida. Explica las directivas de compilación, regiones paralelas, bucles paralelos, secciones paralelas y cláusulas como private y shared. También cubre sincronización entre hilos mediante barrier, critical y master.
1) El documento introduce conceptos básicos sobre programación en lenguaje assembler, incluyendo las instrucciones, programas, y características del lenguaje assembler como etiquetas y directivas. 2) Explica que las instrucciones son patrones binarios que causan acciones específicas y que un programa es una serie de instrucciones que hacen que la computadora realice una tarea. 3) Señala que el lenguaje assembler tiene limitaciones como la no portabilidad entre microprocesadores y la dificultad de traducir tareas de alto nivel a instru
Este documento resume cinco puntos sobre arquitectura de hardware. El primer punto describe las unidades aritméticas lógicas y de punto flotante en los procesadores. El segundo punto explica la pila de datos y su uso. El tercer punto compara lenguajes ensambladores con lenguajes de programación más comunes como C y Java. El cuarto punto describe instrucciones como MOV, ADD, SUB, MUL y DIV. El quinto punto explica cómo construir una unidad aritmética lógica básica usando conjuntos de bits.
Este documento presenta un curso de programación en C para microcontroladores PIC16F87XX. Cubre temas como IDEs, bootloaders, plataformas de desarrollo, recordatorios sobre C y programación de módulos como entrada/salida digital, comunicaciones RS232, interrupciones y conversión A/D.
Curso de programacion en c++ para microcontroladores pic 16 f87xxfreddymadriz
Este documento presenta un curso de programación en C para microcontroladores PIC16F87XX. Cubre temas como IDEs, bootloaders, plataformas de desarrollo, y programación en C de los módulos del PIC16F8XX como E/S digital, comunicaciones RS-232, interrupciones y conversión A/D.
Este documento presenta un curso de programación en C para microcontroladores PIC16F87XX. Cubre temas como IDEs, bootloaders, plataformas de desarrollo, recordatorios sobre C y programación de módulos como entrada/salida digital, comunicaciones RS-232, interrupciones y conversión A/D en C para PIC16F8XX.
Este documento presenta la estructura de un programa en lenguaje ensamblador, incluyendo la organización de las etiquetas, instrucciones, operandos y comentarios en cuatro columnas. También describe las herramientas de programación como editores de texto y compiladores, y resume brevemente la evolución de Windows a través de sus diferentes versiones desde 1985 hasta la actualidad.
El documento presenta un resumen de 3 oraciones sobre el lenguaje ensamblador:
1) Explica los fundamentos del lenguaje ensamblador, su estructura, instrucciones y uso de registros. 2) Describe la arquitectura de un microprocesador común con sus registros. 3) Detalla la programación y uso de interrupciones, así como la estructura básica de un programa en lenguaje ensamblador.
1) El documento introduce conceptos básicos sobre programación en lenguaje assembler, incluyendo las instrucciones, programas, y características del lenguaje assembler como etiquetas y directivas. 2) Explica que las instrucciones son patrones binarios que causan acciones específicas y que un programa es una serie de instrucciones que hacen que la computadora realice una tarea. 3) Señala que el lenguaje assembler tiene limitaciones como la no portabilidad entre microprocesadores y la dificultad de traducir tareas de alto nivel a instru
Este documento resume cinco puntos sobre arquitectura de hardware. El primer punto describe las unidades aritméticas lógicas y de punto flotante en los procesadores. El segundo punto explica la pila de datos y su uso. El tercer punto compara lenguajes ensambladores con lenguajes de programación más comunes como C y Java. El cuarto punto describe instrucciones como MOV, ADD, SUB, MUL y DIV. El quinto punto explica cómo construir una unidad aritmética lógica básica usando conjuntos de bits.
Este documento presenta un curso de programación en C para microcontroladores PIC16F87XX. Cubre temas como IDEs, bootloaders, plataformas de desarrollo, recordatorios sobre C y programación de módulos como entrada/salida digital, comunicaciones RS232, interrupciones y conversión A/D.
Curso de programacion en c++ para microcontroladores pic 16 f87xxfreddymadriz
Este documento presenta un curso de programación en C para microcontroladores PIC16F87XX. Cubre temas como IDEs, bootloaders, plataformas de desarrollo, y programación en C de los módulos del PIC16F8XX como E/S digital, comunicaciones RS-232, interrupciones y conversión A/D.
Este documento presenta un curso de programación en C para microcontroladores PIC16F87XX. Cubre temas como IDEs, bootloaders, plataformas de desarrollo, recordatorios sobre C y programación de módulos como entrada/salida digital, comunicaciones RS-232, interrupciones y conversión A/D en C para PIC16F8XX.
Este documento presenta la estructura de un programa en lenguaje ensamblador, incluyendo la organización de las etiquetas, instrucciones, operandos y comentarios en cuatro columnas. También describe las herramientas de programación como editores de texto y compiladores, y resume brevemente la evolución de Windows a través de sus diferentes versiones desde 1985 hasta la actualidad.
El documento presenta un resumen de 3 oraciones sobre el lenguaje ensamblador:
1) Explica los fundamentos del lenguaje ensamblador, su estructura, instrucciones y uso de registros. 2) Describe la arquitectura de un microprocesador común con sus registros. 3) Detalla la programación y uso de interrupciones, así como la estructura básica de un programa en lenguaje ensamblador.
Este documento describe el formato de instrucciones y modos de direccionamiento de los procesadores. Explica que las instrucciones codifican operaciones sobre datos en memoria o registros usando modos de direccionamiento. Luego detalla los diferentes formatos de instrucciones, como el número de operandos, si usan pila, registros o memoria, y si tienen códigos de operación de longitud fija o variable. Finalmente, ejemplifica cómo se pueden codificar diferentes tipos de instrucciones usando varios bits del código de operación.
Este documento introduce la programación del microcontrolador PIC 16F84. Explica las características básicas del PIC 16F84 como su estructura de memoria, puertos de entrada y salida, y conjunto de instrucciones. Además, proporciona ejemplos de código en ensamblador para realizar operaciones básicas como suma, resta, incremento y decremento y almacenar valores en la memoria del microcontrolador.
programacion con microcontrolador pic 16f84guestf09168b
Este documento introduce la programación del microcontrolador PIC 16F84. Explica las características básicas del PIC 16F84 como su memoria, puertos de entrada y salida, y frecuencia de trabajo. También presenta instrucciones básicas de programación en ensamblador como cargar valores, sumar y restar registros. Finalmente, incluye ejemplos de código para sumar números en diferentes sistemas de numeración.
Este documento introduce la programación del microcontrolador PIC 16F84. Explica las características básicas del PIC 16F84 como su estructura de memoria, puertos de entrada y salida, y algunas instrucciones básicas de programación. También proporciona ejemplos de código para sumar números usando diferentes sistemas de numeración y almacenar los resultados.
This document discusses the printf() function for serial RS232 input/output in PIC programming in C. It describes how to use the #use RS232 directive to enable serial communication and the various parameters that can be set. It then provides examples of using printf() to output strings and variable values to the serial port or LCD.
El sistema NWP HARMONIE: Introducción a la Computación de AltasTomás Morales
Este documento presenta una introducción a la computación de alta prestación y al sistema OpenMP. En las tres primeras jornadas se cubrirán conceptos básicos de computación paralela, programación en memoria compartida usando OpenMP, y programación en memoria distribuida usando MPI. Los asistentes aprenderán sobre taxonomías de Flynn, la ley de Amdahl, arquitecturas de memoria, y paradigmas de programación paralela. También se incluirán ejercicios prácticos para aplicar estos conceptos.
TECNOLÓGICO NACIONAL DE MÉXICO
Ingeniería en Sistemas Computacionales
Fundamentos de Programación
Unidad II: Introducción a la Programación
Retícula ISIC-2010-224: Programa: AED-1285
EIGRP es un protocolo de enrutamiento confiable que establece adyacencias entre routers vecinos directamente conectados. Utiliza tablas de vecinos y topología, así como el algoritmo DUAL, para garantizar rutas simples y de respaldo a través del dominio de enrutamiento y asegurar la convergencia rápida.
Este documento describe cómo configurar e implementar un programa "Hola Mundo" básico en MPLAB y el compilador C18 para un PIC18F2550. Explica cómo configurar MPLAB e incluir las librerías y palabras de configuración adecuadas, y luego proporciona un código de ejemplo que enciende y apaga los LEDs en un bucle infinito para demostrar el funcionamiento básico.
OpenMP es una API para programación paralela en máquinas con memoria compartida. Utiliza un modelo de programación basado en fork-join para dividir tareas entre hilos. Incluye directivas para definir regiones paralelas, compartir trabajo y datos, y sincronizar hilos. OpenMP permite escalar aplicaciones de forma incremental agregando paralelismo sin cambios drásticos en el código.
El documento describe los formatos y lineamientos para programas .COM en ensamblador. Explica que estos programas solo pueden usar un segmento de 64 KB, y que todos los registros de segmento apuntan a ese único segmento. También describe la sintaxis básica de las instrucciones y directivas en ensamblador como ORG, JMP, MOV e INT.
Este artículo describe cómo programar microcontroladores PIC usando el compilador PCW, el cual permite programarlos en lenguaje C en lugar de ensamblador. Esto agiliza el desarrollo de programas, ya que el lenguaje C es más sencillo que el ensamblador. Se explican las características y funciones principales del compilador PCW, incluyendo el manejo de puertos, interrupciones, retardos, comunicación serial y módulos LCD. También se incluye un ejemplo de cómo escribir en una pantalla LCD.
Este documento presenta la primera práctica de un curso sobre microcontroladores PIC. Introduce el entorno de desarrollo MPLAB IDE y los conceptos básicos de programación en ensamblador como etiquetas, instrucciones, datos y comentarios. Explica cómo crear un proyecto en MPLAB IDE, escribir el código fuente de un programa simple, ensamblarlo y simularlo para depurarlo, aunque no explica cómo grabarlo en un microcontrolador real.
Este documento presenta la primera práctica de un curso sobre microcontroladores PIC. Introduce el entorno de desarrollo MPLAB IDE y los conceptos básicos de programación en ensamblador como etiquetas, instrucciones, datos y comentarios. Explica cómo crear un proyecto en MPLAB IDE, escribir el código fuente de un programa simple, ensamblarlo y simularlo para depurarlo, aunque no explica cómo grabarlo en un microcontrolador real.
Este documento presenta la primera práctica de un curso sobre microcontroladores PIC. Introduce el entorno de desarrollo MPLAB IDE y los conceptos básicos de programación en ensamblador como etiquetas, instrucciones, datos y comentarios. Explica cómo crear y ensamblar un primer programa simple que realiza una suma y almacena el resultado. También describe cómo simular el funcionamiento de los programas creados sin necesidad de grabarlos en un microcontrolador real.
El documento describe las fases del desarrollo de un programa: análisis del problema, diseño de algoritmos, codificación, compilación, verificación, documentación. Incluye un ejemplo de cómo resolver una ecuación de segundo grado mediante el análisis de datos de entrada y salida, diseño de pseudocódigo y comprobación de soluciones.
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]RootedCON
Taller introductorio a la explotación de software GNU/Linux. Se explicarán diversos tipos de vulnerabilidades (corrupciones de memoria, fugas de información, condiciones de carrera, etc...) siguiendo metodologías actuales del desarrollo de exploits donde se sortearán las protecciones del sistema operativo.
Este documento introduce el lenguaje de programación assembler. Explica que las instrucciones son patrones binarios que causan acciones específicas en el microprocesador. Un programa es una serie de instrucciones que hacen que la computadora realice una tarea. El assembler traduce el código fuente en lenguaje assembler a código binario que la máquina puede ejecutar.
DuckDuckGo, es el motor de búsqueda centrado en la privacidad que lleva años creciendo como una sólida alternativa a buscadores como Google, Bing y Yahoo. Sobre todo, una alternativa para todos aquellos que no quieran ser rastreados y que quieran maximizar la privacidad cuando buscan cosas en Internet.
Este documento describe el formato de instrucciones y modos de direccionamiento de los procesadores. Explica que las instrucciones codifican operaciones sobre datos en memoria o registros usando modos de direccionamiento. Luego detalla los diferentes formatos de instrucciones, como el número de operandos, si usan pila, registros o memoria, y si tienen códigos de operación de longitud fija o variable. Finalmente, ejemplifica cómo se pueden codificar diferentes tipos de instrucciones usando varios bits del código de operación.
Este documento introduce la programación del microcontrolador PIC 16F84. Explica las características básicas del PIC 16F84 como su estructura de memoria, puertos de entrada y salida, y conjunto de instrucciones. Además, proporciona ejemplos de código en ensamblador para realizar operaciones básicas como suma, resta, incremento y decremento y almacenar valores en la memoria del microcontrolador.
programacion con microcontrolador pic 16f84guestf09168b
Este documento introduce la programación del microcontrolador PIC 16F84. Explica las características básicas del PIC 16F84 como su memoria, puertos de entrada y salida, y frecuencia de trabajo. También presenta instrucciones básicas de programación en ensamblador como cargar valores, sumar y restar registros. Finalmente, incluye ejemplos de código para sumar números en diferentes sistemas de numeración.
Este documento introduce la programación del microcontrolador PIC 16F84. Explica las características básicas del PIC 16F84 como su estructura de memoria, puertos de entrada y salida, y algunas instrucciones básicas de programación. También proporciona ejemplos de código para sumar números usando diferentes sistemas de numeración y almacenar los resultados.
This document discusses the printf() function for serial RS232 input/output in PIC programming in C. It describes how to use the #use RS232 directive to enable serial communication and the various parameters that can be set. It then provides examples of using printf() to output strings and variable values to the serial port or LCD.
El sistema NWP HARMONIE: Introducción a la Computación de AltasTomás Morales
Este documento presenta una introducción a la computación de alta prestación y al sistema OpenMP. En las tres primeras jornadas se cubrirán conceptos básicos de computación paralela, programación en memoria compartida usando OpenMP, y programación en memoria distribuida usando MPI. Los asistentes aprenderán sobre taxonomías de Flynn, la ley de Amdahl, arquitecturas de memoria, y paradigmas de programación paralela. También se incluirán ejercicios prácticos para aplicar estos conceptos.
TECNOLÓGICO NACIONAL DE MÉXICO
Ingeniería en Sistemas Computacionales
Fundamentos de Programación
Unidad II: Introducción a la Programación
Retícula ISIC-2010-224: Programa: AED-1285
EIGRP es un protocolo de enrutamiento confiable que establece adyacencias entre routers vecinos directamente conectados. Utiliza tablas de vecinos y topología, así como el algoritmo DUAL, para garantizar rutas simples y de respaldo a través del dominio de enrutamiento y asegurar la convergencia rápida.
Este documento describe cómo configurar e implementar un programa "Hola Mundo" básico en MPLAB y el compilador C18 para un PIC18F2550. Explica cómo configurar MPLAB e incluir las librerías y palabras de configuración adecuadas, y luego proporciona un código de ejemplo que enciende y apaga los LEDs en un bucle infinito para demostrar el funcionamiento básico.
OpenMP es una API para programación paralela en máquinas con memoria compartida. Utiliza un modelo de programación basado en fork-join para dividir tareas entre hilos. Incluye directivas para definir regiones paralelas, compartir trabajo y datos, y sincronizar hilos. OpenMP permite escalar aplicaciones de forma incremental agregando paralelismo sin cambios drásticos en el código.
El documento describe los formatos y lineamientos para programas .COM en ensamblador. Explica que estos programas solo pueden usar un segmento de 64 KB, y que todos los registros de segmento apuntan a ese único segmento. También describe la sintaxis básica de las instrucciones y directivas en ensamblador como ORG, JMP, MOV e INT.
Este artículo describe cómo programar microcontroladores PIC usando el compilador PCW, el cual permite programarlos en lenguaje C en lugar de ensamblador. Esto agiliza el desarrollo de programas, ya que el lenguaje C es más sencillo que el ensamblador. Se explican las características y funciones principales del compilador PCW, incluyendo el manejo de puertos, interrupciones, retardos, comunicación serial y módulos LCD. También se incluye un ejemplo de cómo escribir en una pantalla LCD.
Este documento presenta la primera práctica de un curso sobre microcontroladores PIC. Introduce el entorno de desarrollo MPLAB IDE y los conceptos básicos de programación en ensamblador como etiquetas, instrucciones, datos y comentarios. Explica cómo crear un proyecto en MPLAB IDE, escribir el código fuente de un programa simple, ensamblarlo y simularlo para depurarlo, aunque no explica cómo grabarlo en un microcontrolador real.
Este documento presenta la primera práctica de un curso sobre microcontroladores PIC. Introduce el entorno de desarrollo MPLAB IDE y los conceptos básicos de programación en ensamblador como etiquetas, instrucciones, datos y comentarios. Explica cómo crear un proyecto en MPLAB IDE, escribir el código fuente de un programa simple, ensamblarlo y simularlo para depurarlo, aunque no explica cómo grabarlo en un microcontrolador real.
Este documento presenta la primera práctica de un curso sobre microcontroladores PIC. Introduce el entorno de desarrollo MPLAB IDE y los conceptos básicos de programación en ensamblador como etiquetas, instrucciones, datos y comentarios. Explica cómo crear y ensamblar un primer programa simple que realiza una suma y almacena el resultado. También describe cómo simular el funcionamiento de los programas creados sin necesidad de grabarlos en un microcontrolador real.
El documento describe las fases del desarrollo de un programa: análisis del problema, diseño de algoritmos, codificación, compilación, verificación, documentación. Incluye un ejemplo de cómo resolver una ecuación de segundo grado mediante el análisis de datos de entrada y salida, diseño de pseudocódigo y comprobación de soluciones.
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]RootedCON
Taller introductorio a la explotación de software GNU/Linux. Se explicarán diversos tipos de vulnerabilidades (corrupciones de memoria, fugas de información, condiciones de carrera, etc...) siguiendo metodologías actuales del desarrollo de exploits donde se sortearán las protecciones del sistema operativo.
Este documento introduce el lenguaje de programación assembler. Explica que las instrucciones son patrones binarios que causan acciones específicas en el microprocesador. Un programa es una serie de instrucciones que hacen que la computadora realice una tarea. El assembler traduce el código fuente en lenguaje assembler a código binario que la máquina puede ejecutar.
DuckDuckGo, es el motor de búsqueda centrado en la privacidad que lleva años creciendo como una sólida alternativa a buscadores como Google, Bing y Yahoo. Sobre todo, una alternativa para todos aquellos que no quieran ser rastreados y que quieran maximizar la privacidad cuando buscan cosas en Internet.
Aplicación de las sentencias de control en telecomunicacionesambuludimateo2
if y switch son fundamentales en la programación moderna debido a su capacidad para controlar el flujo de ejecución y tomar decisiones basadas en condiciones específicas.
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...micarnavaltupatrimon
Mi Carnaval es la plataforma que permite conectar al usuario con la cultura y la emoción del Carnaval de Blancos y Negros en la ciudad de Pasto, esta plataforma brinda una amplia oferta de productos, servicios, tiquetería e información relevante para generarle valor al usuario, además, la plataforma realiza un levantamiento de datos de los espectadores que se registran, capturando su actividad e información relevante para generar la analítica demográfica del evento en tiempo real, con estos datos se generan modelos predictivos, que permiten una mejor preparación y organización del evento, de esta manera ayudando a reducir la congestión, las largas filas y, así como a identificar áreas de alto riesgo de delincuencia y otros problemas de seguridad.
Casos de éxito en Negocios online: Estrategias WPO que funcionan - Presentac...Javier Martinez Seco
El 15 de junio de 2024 Javier Martínez Seco, director de Ecode, presentó en SEonthebeach 2024 una ponencia titulada "Casos de éxito en Negocios online - Estrategias WPO que funcionan". Javier compartió su experiencia de más de 15 años en el ámbito de las tecnologías web, destacando su especialización en desarrollo web a medida, SEO técnico y optimización del rendimiento web (WPO).
- Presentación inicial: Javier Martínez es ingeniero informático especializado en tecnologías web, con un historial que incluye la creación y mejora de más de 1000 sitios web y negocios online. Realiza auditorías, consultorías, formación a equipos de desarrollo y desarrollo a medida.
- Sitios web que funcionan bien desde el principio: destacó la diferencia entre un sitio web que simplemente "funciona" y uno que "funciona bien". Ejemplos reales desarrollados por Ecode.
- Calidad en el rendimiento web: explicó qué aspectos deben considerarse para conseguir calidad en el rendimiento de una web. Detalló los procesos que el navegador debe seguir para renderizar una página web, incluyendo la descarga del documento HTML, CSS y demás recursos (imágenes, tipografías, ficheros JavaScript).
- Estrategias de carga óptima: Javier presentó estrategias de carga óptima teniendo en cuenta diferentes objetivos y condiciones de trabajo. Habló sobre la importancia de simular condiciones reales de usuario y ajustar la velocidad y CPU para estas simulaciones. También mencionó la extensión de Chrome Web Vitals.
- Pruebas de rendimiento: indicó cómo probar el rendimiento de carga de una página web en su primera visita.
- Realidad del sector y mercado actual: Javier describió la situación actual del sector, donde se priorizan tecnologías populares que facilitan el trabajo de creación web. Sin embargo, advirtió sobre la dependencia de tecnologías conocidas y la necesidad de adaptar el negocio online a estas tecnologías.
- Ejemplos de cargas no óptimas: presentó ejemplos de malas cargas de diferentes webs populares desarrolladas con CMS y tecnologías como Shopify, Webflow, Prestashop, Magento, Salesforce, Elementor, WordPress y Drupal. La tecnología lenta es tecnología mala.
- ¿Merece la pena hacerlo mejor?: Javier subrayó la importancia de medir la situación actual y evaluar la oportunidad de mejora.
- Javier finalizó la ponencia hablando sobre cómo trabaja actualmente con su empresa Ecode, enfocada en construir sitios web muy optimizados desde el inicio. Presentó un caso de éxito: La Casa del Electrodoméstico, una tienda online a medida con una facturación anual de millones de euros y más de 10 millones de carritos de compra, donde más del 90% de las sesiones cumplen con los parámetros LCP, INP y CLS durante toda la sesión.
La ponencia de Javier Martínez Seco en SEonthebeach 2024 ofreció una visión completa y práctica sobre la optimización del rendimiento web, demostrando cómo las estrategias WPO bien implementadas pueden marcar la diferencia en el éxito de los negocios online.
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...micarnavaltupatrimon
Mi Carnaval es la plataforma que permite conectar al usuario con la cultura y la emoción del Carnaval de Blancos y Negros en la ciudad de Pasto, esta plataforma brinda una amplia oferta de productos, servicios, tiquetería e información relevante para generarle valor al usuario, además, la plataforma realiza un levantamiento de datos de los espectadores que se registran, capturando su actividad e información relevante para generar la analítica demográfica del evento en tiempo real, con estos datos se generan modelos predictivos, que permiten una mejor preparación y organización del evento, de esta manera ayudando a reducir la congestión, las largas filas y, así como a identificar áreas de alto riesgo de delincuencia y otros problemas de seguridad.
1. Introducción a la programación HPC (17-20 Junio 08)
Introducción al
OpenMP
Alejandro J. Soriano Martínez
Josep Vidal Canet
2. Introducción a la programación HPC (17-20 Junio 08)
Índice
Índice:
1) Introducción
2) Directivas de compilación
1) Formato para C y Fortran
2) Regiones paralelas: cláusulas
3) Construcciones paralelas: cláusulas
3) Librería de funciones en tiempo de ejecución
4) Variables de entorno
3. Introducción a la programación HPC (17-20 Junio 08)
INTRODUCCIÓN
OpenMP
4. Introducción a la programación HPC (17-20 Junio 08)
Introducción
• Sistemas de memoria distribuida:
Memoria
Procesador
Memoria
Procesador
Memoria
Procesador
Memoria
Procesador
INTERCONEXIÓN
5. Introducción a la programación HPC (17-20 Junio 08)
Introducción
• Sistemas de memoria compartida:
Memoria
Procesador Procesador Procesador Procesador
6. Introducción a la programación HPC (17-20 Junio 08)
Introducción
OpenMP (Open specifications for Multi Processing) es
una API (Application Programming Interface –
Interfaz de Programación de Aplicaciones) para la
paralelización de programas en plataformas de
memoria compartida.
Tiene implementaciones en C/C++ y FORTRAN (77, 90
y 95) y está disponible en la gran mayoría de
compiladores.
OpenMP Arquitecture Review Board: se encarga de
crear y revisar las especificaciones de OpenMP
(http://openmp.org/wp/)
7. Introducción a la programación HPC (17-20 Junio 08)
Introducción
http://openmp.org/wp/openmp-compilers
8. Introducción a la programación HPC (17-20 Junio 08)
Introducción
• Es un conjunto de especificaciones, como puede
serlo MPI (Message Passing Interface),
implementado por:
– Directivas de compilación
– Una librería de funciones en tiempo de ejecución
– Variables de entorno
• ¿Qué se puede paralelizar en OpenMP?
– Bucles (for en C, do en fortran) : paralelismo de
“grano fino”. El programa reparte la carga usando el
índice del bucle.
– Regiones paralelas : paralelismo de “grano grueso”.
El usuario reparte la carga en bloques de trabajo.
9. Introducción a la programación HPC (17-20 Junio 08)
Introducción
Modelo de ejecución: fork-join (imagen wikipedia)
10. Introducción a la programación HPC (17-20 Junio 08)
DIRECTIVAS DE
COMPILACIÓN
OpenMP
11. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
La mayoría de las construcciones en OpenMP son
directivas de compilación o pragmas:
Las directivas son tomadas por comentarios por
aquellos compiladores que no están preparados
para interpretarlas.
Lenguaje Centinela Directiva [Cláusulas]
C/C++ #pragma omp
Justo después del
centinela y antes de
las opciones
Opciones aplicables
a la directiva
Fortran
!$OMP
C$OMP
*$OMP
Justo después del
centinela y antes de
las opciones
Opciones aplicables
a la directiva
12. Introducción a la programación HPC (17-20 Junio 08)
int main() {
double a[1000],b[1000],c[1000];
int i;
for (i = 0; i< 1000; i++){
a[i] = b[i] + c[i];
}
}
Program Ejemplo1
Implicit none
real(8) :: a(1000),b(1000),c(1000)
integer :: i
do i=0,1000
a(i) = b(i) + c(i)
end do
end
Directivas de compilación
int main() {
double a[1000],b[1000],c[1000];
int i;
#pragma omp for
for (i = 0; i< 1000; i++){
a[i] = b[i] + c[i];
}
}
Program Ejemplo1
Implicit none
real(8) :: a(1000),b(1000),c(1000)
integer :: i
!$OMP PARALLEL DO
do i=0,1000
a(i) = b(i) + c(i)
end do
!$OMP END PARALLEL DO
end
13. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
Compilando con OpenMP: basta con indicarle al
compilador que interprete las directivas. Si no se
hace, el compilador creerá que son comentarios e
ignorará las líneas. En los compiladores de Intel
instalados en Cesar y Multivac la opción es “-
openmp”.
ifort ejem1.F90 -o ejem1.exe Genera el ejecutable
secuencial
ifort ejem1.F90 -o ejem1.exe –openmp (-fpp) Genera el
ejecutable
paralelo
Lo mismo con C/C++: icc … -openmp
¡CONTINUAMOS EN FORTRAN!
14. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
1) Regiones paralelas:
!$OMP PARALLEL cláusula1 cláusula2...
Código paralelo
!$OMP END PARALLEL
Región serie
Región paralela
Thread 0
Thread 0 Thread 1
Thread
Np
Normas básicas:
1)Debe aparecer en la misma
rutina del programa
2)No se puede saltar dentro o
fuera de la región paralela
(GOTO)
3)Está permitido ANIDAR
regiones paralelas
15. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
• Ejem2: usa Ejecuta.sh para ver:
!$OMP PARALLEL
write(*,*) “Hello World”
!$OMP END PARALLEL
Cláusulas:
– PRIVATE (lista)
– SHARED (lista)
– DEFAULT ( PRIVATE | SHARED | NONE )
– FIRSTPRIVATE (lista)
– REDUCTION (operador : lista)
– COPYIN (lista)
– IF ( expresión lógica )
– NUM_THREADS ( entero )
16. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
PRIVATE:
!$OMP PARALLEL
PRIVATE(a,b)
SHARED:
!$OMP PARALLEL
SHARED(c,d)
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread Np
Memoria
Compartida
Memoria
Compartida
a b
a b
a b a b
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread Np
Memoria
Compartida
Memoria
Compartida
c d
c d
17. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
DEFAULT (PRIVATE|SHARED|NONE):
!$OMP PARALLEL DEFAULT(PRIVATE) SHARED(a)
Para declarar muchas variables de golpe. “None” implica
declararlas todas.
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread Np
Memoria
Compartida
Memoria
Compartida
b = 1
a = 2
b = 1
a = ?
b = 1
a = ?
b = 1
a = ?
FIRSTPRIVATE(list):
!$OMP PARALLEL PRIVATE(a) FIRSTPRIVATE(b)
18. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
REDUCTION (operador : lista):
Muchas veces hay variables en memoria compartida que sólo
deben ser actualizadas por un único hilo cada vez. Hay dos
opciones:
– Pongo barreras en el momento de actualizar la variable (lo
veremos): esto afecta al rendimiento.
– Creo una copia privada de la variable y la inicializo. Dejo que cada
hilo actualice su copia privada de la variable y al sincronizar los
hilos actualizo el valor de la variable con los diferentes parciales.
Operador Inicialización
+ 0
* 1
- 0
.AND. .TRUE.
.OR. .FALSE.
.EQV. .TRUE.
.NEQV. .FALSE.
19. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
IF (EXPRESIÓN LÓGICA):
!$OMP PARALLEL IF (N > 1000)
Ejeción condicional: la región sólo se ejecuta en paralelo si se
cumple la condición expuesta en el IF.
NUM_THREADS ( entero ):
!$OMP PARALLEL IF (N > 1000)
Fija el número de hilos que ejecutarán la región paralela.
Prevalece sobre el valor fijado en las variables de entorno.
20. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
2) Bucles DO:
!$OMP DO cláusula1 cláusula2...
Código paralelo
!$OMP END DO cláusula de finalización
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread 3
i=1, 100 i=101, 200 i=201, 300
21. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
Cláusulas:
– PRIVATE (lista)
– FIRSTPRIVATE (lista)
– LASTPRIVATE(lista)
– REDUCTION (operador : lista)
– SCHEDULE (tipo, chunk)
– ORDERER
Adicionalmente: una cláusula de terminación
– NOWAIT : existe una sincronización implícita cuando finaliza el
entorno paralelo. Esta directiva anula dicha sincronización, por lo
que debe tenerse cuidado al usar determinadas variables.
22. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
LASTPRIVATE (lista):
!$OMP DO LASTPRIVATE(I)
El estado final de las variables privadas de cada hilo
generalmente queda indeterminado al finalizar la región
paralela. Esta opción hace que tenga el valor que hubiera
tenido si se hubiera ejecutado en serie. Ej: índice del bucle do.
ORDERED:
Una determinada parte de un bucle puede necesitar ejecutarse de
forma ordenada. Esta directiva lo hace posible al hacerlo
secuencial
!$OMP DO ORDERED
do i = 1, 1000
!$OMP ORDERED
A(i) = 2 * A (i -1)
!$OMP END ORDERED
end do
!$OMP END DO
23. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
Ejemplo:
do i = 1, 10
do j = 1, 10
!$OMP DO
do k = 1, 10
A(i,j,k) = i * j * k
end do
!$OMP END DO
end do
end do
Cada hilo ejecuta un k/N del último
bucle, pero reparte el trabajo i*j
veces.
!$OMP DO
do i = 1, 10
do j = 1, 10
do k = 1, 10
A(i,j,k) = i * j * k
end do
end do
end do
!$OMP END DO
Cada hilo ejecuta j*k elementos de
los dos últimos bucles, pero reparte
el trabajo 1 vez sólo.
24. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
3) Secciones paralelas:
!$OMP SECTIONS cláusula1 cláusula2...
!$OMP SECTION
Código sección 1
!$OMP SECTION
Código sección N
!$OMP END DO cláusula de finalización
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread 3
Sección 1 Sección 2 Sección 3
• Pueden ponerse cualquier número de secciones. Si supera el número
de hilos, cada hilo ejecutará más de una sección de forma secuencial.
• La carga computaciona de cada hilo NO tiene por qué ser simétrica.
• Todas las directivas !$OMP SECTION deben estar en la misma
subroutina.
• Cláusulas: PRIVATE, FIRSTPRIVATE, LASTPRIVATE, REDUCTION
25. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
3) Secciones secuenciales:
!$OMP SINGLE cláusula1 cláusula2...
Código secuencial
!$OMP END SINGLE cláusula de finalización
Sólo ejecuta un hilo, el resto esperan a que termine ese hilo, a
menos que cerremos con un NOWAIT.
No puede ejecutarse dentro de un bucle DO, ya que la carga de
trabajo se ha repartido ya ANTES de llegar a la sentencia
SINGLE.
26. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
Sincronización de hilos:
!$OMP MASTER / !$OMP END MASTER : sólo el hilo 0 (el master)
ejecuta el código. El resto NO esperan. [SINGLE con NOWAIT]
!$OMP CRITIAL / !$OMP END CRITICAL : asegura que sólo un hilo
ejecuta una acción en concreto (escribir fichero, leer de
teclado). El resto espera a que el anterior termine para poder
ejecutar ese fragmento de código.
!$OMP BARRIER : debe existir para todos los hilos o para
ninguno. Todos esperan hasta que llegan a ese punto. Si sólo 1
tiene la barrera, se produce un deadlock.
!$OMP ATOMIC : asegura que sólo 1 hilo actualiza una variable
compartida. Por ejemplo (a = a +1). [Critical]
27. Introducción a la programación HPC (17-20 Junio 08)
Directivas de compilación
• Ejemplo: cálculo del número pi
Integración numérica por el método de los trapecios.
– Convertir el código secuencial a paralelo
– Cuidado con las condiciones de carrera
• Ejemplo : multiplicación de matrices
– Ejecuta el código en secuencial y mide el tiempo
– Convierte el código a paralelo y mide el tiempo
28. Introducción a la programación HPC (17-20 Junio 08)
LIBRERÍA DE FUNCIONES
(RUN-TIME)
OpenMP
29. Introducción a la programación HPC (17-20 Junio 08)
Librería de Funciones
Librería de funciones accesibles en tiempo de ejecución
que sirven para controlar y hacer consultas desde el
interior del programa al entorno de ejecución paralelo. Se
llama “omp_lib” y debe ser llamada en el programa (use
omp_lib).
OMP_set_num_threads(número) : fija el número de threads que
serán usados por las regiones paralelas en el código. (call
OMP_set…)
OMP_get_num_threads : obtiene el número de threads que están
ejecutándose en la región paralela desde la que es llamada.
OMP_get_thread_num : obtiene el identificador del thread actual
dentro de la región paralela.
OMP_get_num_procs : devuelve el número de procesadores
disponible para el programa.
OMP_set_dynamic : activa (.TRUE.) o desactiva (.FALSE.) el
30. Introducción a la programación HPC (17-20 Junio 08)
Librería de Funciones
OMP_get_dynamic : obtiene el estado del mecanismo de ajuste
dinámico de threads (.TRUE. o .FALSE.)
OMP_set_nested : activa o desactiva el anidado de regiones
paralelas.
OMP_get_nested : obtiene el estado del mecanismo anterior.
Bloqueos:
OMP_init_lock(variable) : inicializa una variable que será asociada
con un bloqueo.
OMP_set_lock(variable) : cuando un thread llama a esta
subroutine, adquiere la posesión del bloqueo si está libre. Si no
lo está, espera a que lo esté
OMP_unset_lock(variable) : libera la propiedad de un bloqueo.
OMP_destry_lock(variable): desinicializa la variable asociada con
el bloqueo.
31. Introducción a la programación HPC (17-20 Junio 08)
Librería de Funciones
program Main
use omp_lib
implicit none
integer(kind = OMP_lock_kind) :: lck
integer(kind = OMP_integer_kind) :: ID
call OMP_init_lock(lck)
!$OMP PARALLEL SHARED(LCK) PRIVATE(ID)
ID = OMP_get_thread_num()
call OMP_set_lock(lck)
write(*,*) "My thread is ", ID
call OMP_unset_lock(lck)
!$OMP END PARALLEL
call OMP_destroy_lock(lck)
end program Main
El primer hilo que llegue a tomar
el control del bloqueo, escribirá
por pantalla, el resto quedarán a
la espera hasta que sea liberado.
Antes de poder usar el bloqueo,
hay que inicializarlo.
Una vez no es necesario el
bloqueo, se elimina.
Hay que llamar a la librería para
poder usarla (compilador).
32. Introducción a la programación HPC (17-20 Junio 08)
VARIABLES DE ENTORNO
OpenMP
33. Introducción a la programación HPC (17-20 Junio 08)
Variables de entorno
Se puede controlar algunos aspectos de la ejecución
de programas OpenMP asignando valores a
determinadas variables de entorno. Algunas de
estas variables pueden ser fijadas con llamadas a la
librería de funciones.
Ej: Usando bash:
export OMP_NUM_THREADS=Número : Fija el valor de
una variable de entorno.
echo $OMP_NUM_THREADS : Muestra el valor de la
variable de entorno
34. Introducción a la programación HPC (17-20 Junio 08)
Variables de entorno
• OMP_NUM_THREADS : especifica el número de
hilos que serán usados durante la ejecución de las
regiones paralelas definidas dentro de una programa
OpenMP.
– Valor tipico : 1 – Número de procesadores
• OMP_SCHEDULE : afecta a la forma en que funciona
la directiva !$OMP DO y !$OMP PARALLEL DO.
Especifica la forma en la que ha de repartirse el
trabajo.
– Valores posibles = STATIC, DYNAMIC o GUIDED
35. Introducción a la programación HPC (17-20 Junio 08)
Variables de entorno
• OMP_DYNAMIC : en máquinas SMP, dónde
diferentes programas se ejecutan simultáneamente,
es posible ajustar el número de hilos de forma
dinámica para aprovechar al máximo la máquina.
– Valor posible = TRUE o FALSE
• OMP_NESTED : especifica el comportamiento del
programa en caso de regiones paralelas anidadas.
– Valor posible = TRUE o FALSE
• ¿OTROS? : si, en función del compilador