Material didáctico

Prácticas y material didáctico de cursos y seminarios impartidos en el laboratorio

Año

Análisis de Algoritmos y Estructuras de Datos

Instructor

  • Ing. Carlos Roberto Álvarez Barragán

Objetivo

Establecer las bases del análisis de algoritmos a través de notación asintótica y el entendimiento de distintas técnicas que permiten establecer la complejidad de distintos algoritmos. Entender estos principios permitirán un mejor entendimiento del mismo análisis pero de algoritmos desarrollados para plataformas paralelas o distribuidas.

Contenido

  1. Temas introductorios
  2. Dividir y vencer: Recursividad y métodos para el análisis
  3. Quicksort
  4. Ordenamientos de tiempo lineal
  5. Tablas de hash y funciones de hash
  6. Introducción a árboles y su importancia

Multiprocesamiento en lenguaje C (para profesores)

Instructores

  • Ing. Laura Sandoval Montaño
  • M.I. Elba Karen Sáenz García
  • M.I Oscar René Valdez Casillas

Objetivo

Presentar al participante las bases para la elaboración de programas paralelos que agilicen el cómputo de aplicaciones de cálculo intensivo; así como aprovechar las arquitecturas paralelas que están al alcance de la mayoría de los usuarios académicos.

Contenido

  1. Conceptos básicos de computación paralela
    • Sistemas de multiprocesamiento
    • Demandas de aplicación
    • Arquitecturas paralelas
      • Taxonomía de Flynn
      • Arquitectura de memoria compartida
      • Arquitectura multicore
  2. Creación y manejo de procesos en lenguaje C
    • Estados de un proceso
    • Estructura de un proceso
    • Creación de procesos en UNIX
    • Manejo de procesos en UNIX
  3. Manejo y creación de hilos en lenguaje C
    • Diferencias entre hilos y procesos
    • Estructura de un hilo
    • Manejo de hilos POSIX
  4. Algoritmos paralelos
    • Niveles de paralelismo
    • Paradigmas de programación paralela
    • Metodologías de diseño
  5. Ejemplos aplicativos de la programación paralela
    • Herramientas de desarrollo y aplicaciones
    • OpenMP
    • MPI

Material

Multiprocesamiento en lenguaje C

Instructor

  • Luis Manuel García Hernández

Objetivo

El alumno conocerá los principios básicos de la programación paralela, así como entornos de desarrollo y aplicaciones actuales.

Contenido

  1. El multiprocesamiento en la actualidad
    • Supercomputadoras
    • Programación actual
      • Programación secuencial
      • Programación paralela
  2. Los procesos y su creación
  3. Los hilos y su creación
  4. Interacción entre procesos e hilos
    • Señales
    • Tuberías
  5. Planificación de procesos e hilos
    • Por turno - Round Robin
  6. Herramientas de desarrollo y aplicaciones
    • OpenMP
    • Aplicaciones gráficas

Material

Programación con Multitareas

Instructores

  • Ing. Laura Sandoval Montaño
  • Ing. Andrés Mondragón Contreras

Objetivo

Presentar al participante las bases para la elaboración de programas que utilicen multitareas para mejorar su desempeño y aprovechar las arquitecturas de procesadores de varios núcleos.

Contenido

  1. Fundamentos del procesamiento con multitareas
    • Definición de proceso tarea
    • Concepto de multitarea/multiprogramación
    • Estados de un proceso en multitarea
    • Problemas de concurrencia
    • Niveles de programación con multitareas
  2. Programación de multitareas utilizando hilos POSIX
    • Diferencias entre hilos y procesos
    • Características de los hilos POSIX
    • Creación de multitareas/multihilos
    • Comunicación y concurrencia de hilos
  3. Programación de multitareas utilizando un compilador de C paralelo
    • Características generales de Cilk++ SDK
    • Creación de multitareas
    • Consideraciones de concurrencia síncrona y asíncrona
    • Medición del desempeño y escalabilidad

Material

Programación de multitareas utilizando hilos

Instructores

  • Ing. Laura Sandoval Montaño
  • Ing. Manuel Castañeda Castañeda

Objetivo

Presentar al participante las bases para la elaboración de programas que utilicen multi-hilos para mejorar la eficiencia de ambientes de multitareas.

Contenido

  1. Origen de los hilos como elemento necesario en la programación de multitareas.
    • Sistemas de multitareas
      • Tarea
      • Proceso
      • Estados de un proceso
      • Concepto de multitarea
    • Ambientes de multitarea
      • Monoprocesador
      • Multiprocesador
    • Elementos de programación de multitareas
      • Proceso
      • Hilo
      • Diferencias entre procesos e hilos
      • Multihilos
  2. Multihilos en un solo procesador
    • Hilos POSIX
    • Hilos en C
    • Hilos en Java
  3. Multihilos en varios procesadores
    • Hilos en .NET
    • Hilos en Linux
  4. Implementación
    • Estudios de caso
      • en .NET
      • en Linux

Material

Nociones de scripting y programación en paralelo

Instructores

  • M.I. Elba Karen Sáenz García
  • M.I. Oscar René Valdez Casillas

Objetivo

Presentar al participante las bases para la elaboración de programas o scripts que aprovechen el tener una arquitectura de varias unidades de procesamiento.

Contenido

  1. Utilidad de realizar procesamiento paralelo en arquitecturas con varias unidades de procesamiento.
  2. Ejecución de comandos e implementación de scripts en paralelo.
  3. Herramientas para programación en paralelo.

Material

Programación paralela con Microsoft .NET

Ponentes

  • Ing. Andrés Mondragón Contreras
  • Néstor Abdy García Fragoso

Objetivo

Presentar a los participantes una introducción al desarrollo de aplicaicones paralelas con tecnología Microsoft .NET

Contenido

  1. Introducción y conceptos básicos de paralelismo
  2. Factores a considerar en la implementación paralela de una aplicación
  3. Enfoques de diseño
  4. Identificación de patrones y aplicaciones en C, C++ y C#
    • Loops paralelos
    • Tareas paralelas
    • Agregación paralela
    • Futuros
    • Paralelismo de tareas dinámicas

Material

Algoritmos seriales vs paralelos

Instructores

  • Ariel Ulloa Trejo
  • Carlos Aldair Román Balbuena
  • Luis Fernando Pérez Franco

Objetivo

El estudiante implementará algoritmos en forma secuencial para determinar las ventajas y desventajas sobre su versión paralela.

Contenido

  1. Diseño de algoritmos
    • Diseño de algoritmos seriales (características, eficiencia, análisis, métricas).
    • Diseño de algoritmos paralelos (características, eficiencia, análisis, métricas, herramientas de desarrollo).
  2. Caso de estudio 1: Quicksort
    • Análisis e implementación del algoritmo serial.
    • Análisis e implementación del algoritmo paralelo.
    • Análisis comparativo.
  3. Caso de estudio 2: Serie de Fibonacci
    • Análisis e implementación del algoritmo serial.
    • Análisis e implementación del algoritmo paralelo.
    • Análisis comparativo.
  4. Caso de estudio 3: Problema de las N reinas
    • Análisis e implementación del algoritmo serial.
    • Análisis e implementación del algoritmo paralelo.
    • Análisis comparativo.
  5. Desarrollo de una aplicación

Material

Programación Paralela en OpenMP

Instructores

  • M.I. Elba Karen Sáenz García
  • M.I. Oscar René Valdez Casillas

Objetivos

Debido a que en la actualidad las computadoras tienen varias unidades de procesamiento surge la necesidad para los programadores y usuarios avanzados de conocer y utilizar herramientas como OpenMP para el desarrollo de programas que trabajen de una forma eficiente aprovechando las unidades de procesamiento de la computadora.

Al finalizar el curso el participante contará con las bases para la elaboración de programas paralelos utilizando OpenMP que podrá usar en computadoras con arquitectura de memoria compartida.

Contenido

  1. Memoria Compartida y Arquitectura de Memoria Compartida.
  2. Introducción al diseño de programas paralelos.
    • Etapas de diseño de un programa paralelo (Ian, Foster).
    • Multicore Programming Practices.
  3. Particionamiento o descomposición.
    • Descomposición de dominio.
    • Descomposición funcional.
    • Descomposición pipelined.
  4. Herramienta para análisis de dependencia de datos y control.
    • Gráfica de dependencias.
  5. Conceptos.
    • Concurrencia.
    • Paralelismo.
  6. Modelos de Programación Paralela.
    • Modelo de programación en Memoria Compartida.
  7. Introducción a OpenMP.
    • Arquitectura y sitaxis.
    • Regiones paralelas.
    • Trabajo compartido.
    • Variables compartidas y privadas.
    • Condiciones de carrera.
    • Funciones de ambiente.
    • Operación de reducción.
    • Regiones críticas.
    • Secciones paralelas.
    • Constructores single y master.
    • Colocar y quitar barreras.
    • Paralelismo anidado.
    • Paralelismo de tareas.

Material

Seminario de cómputo paralelo

Ponentes

  • Ariel Ulloa Trejo
  • Carlos Aldair Román Balbuena
  • Luis Fernando Pérez Franco

Objetivos

  • Conocer las generalidades de: aplicaciones multicore, la biblioteca "Intel Threading Building Blocks" y aplicaciones concurrentes
  • Los estudiantes podrán relacionar temas abordados en materias como Algoritmos y Estructuras de Datos, Sistemas Operativos, Estructura y Programación de Computadoras, entre otras
  • Los académicos, pueden apoyarse en estos conocimientos, ya sea para dar clases o investigación
  • Brindar material de consulta a la comunidad estudiantil de cualquier institución

Contenido

  1. Multicore Application Programming: For Windows, Linux, and Oracle Solaris (autor: Darryl Gove)
    • Hardware, procesos e hilos
    • Rendimiento en la codificación
    • Códigos
  2. Intel Threading Building Blocks (autor: James Reinders)
    • ¿Qué es Intel Threading Building Blocks?
    • Comparación de ITBB con otras herramientas
    • Piensa en paralelo
  3. C++ Concurrency in action (autor: Anthony Williams)
    • ¿Qué es concurrencia?
    • Porqué usar concurrencia
    • Concurrencia y multihilos en C++

Material

Sinopsis de Libros disponibles en el Laboratorio

Analista

  • Ing. Andrés Mondragón Contreras

Objetivos

  • Con la finalidad de orientar a la comunidad académica y estudiantil interesada en adquirir o aumentar sus conocimientos en temas del área de cómputo paralelo y distribuido, como producto del proyecto PAPIME PE104911 Pertinencia de cómputo paralelo en el currículo de las Ingenierías, presentamos la siguiente sinopsis de los libros adquiridos a través de dicho proyecto.
  • La sinopsis indica, para cada título: los temas tratados, los conocimientos antecedentes para entender los temas y el grado de dificultad; de esta forma el interesado podrá solicitar en préstamo el ejemplar que pueda cubrir sus expectativas.

Contenido

  1. Parallel Programming for Multicore and Cluster Systems (autor: Thomas Rauber)
  2. Intel Threading Building Blocks (autor: James Reinders)
  3. Programming Massively Parallel Processors (autor: David B. Kirk)
  4. Algorithms and Parallel Computing (autor: Fayez Gebali)
  5. CUDA BY EXAMPLE (autor: Jason Sanders)
  6. Structured Parallel Programming (autor: Michael McCool)
  7. C++ Concurrency in action (autor: Anthony Williams)
  8. Multicore Application Programming (autor: Darryl Gove)
  9. Parallel Combinatorial Optimization (autor: El-Ghazali Talbi)
  10. Hadoop In Action (autor: Chuck Lam)

Material

Introducción a CUDA

Instructores

  • Ariel Ulloa Trejo
  • Luis Fernando Pérez Franco

Objetivo

El alumno conocerá los conceptos básicos de la programación paralela con GPUs utilizando la herramienta CUDA de NVIDIA

Contenido

  1. Antecedentes
    • Programación Serial.
    • Programación Paralela.
    • Modelos de Programación.
  2. El GPU
    • Terminología usada en CUDA.
    • Diferencias entre el GPU y CPU.
    • Propiedades de nuestro GPU.
    • La función kernel.
  3. Funciones
    • Jerarquia de memoria.
    • cudaMalloc, cudaFree, cudaMemcpy.
    • Índices.
  4. Manejo de Matrices
    • Detectando errores.
    • Matrices.
    • Tomando el tiempo.
  5. Memoria Compartida
    • Usando memoria compartida.
    • Sincronización de hilos.
    • Reducción.

Material

Introducción al Cómputo Paralelo con CUDA C/C++

Instructores

  • Ariel Ulloa Trejo
  • Jaime Esteban Beltrán Rosales

Objetivo

El alumno utilizará los beneficios de la programación en paralelo que brindan las Unidades de Procesamiento Gráfico (GPUs) de Nvidia para acelerar aplicaciones, mediante CUDA.

Contenido

  1. Antecedentes
    • Programación Serial.
    • Programación Paralela.
    • Modelos de Programación.
  2. Modelo de Programación CUDA
    • Arquitectura.
    • Diferencias entre el GPU y CPU.
    • Propiedades del GPU.
  3. Funciones
    • Jerarquia de memoria.
    • Funciones CUDA.
    • Arreglos unidimencionales.
  4. Manejo de Matrices
    • Detectando errores.
    • Medición de tiempo.
  5. Memoria Compartida

Material

Programación en Lenguaje C

Instructores

  • M.I. Elba Karen Sáenz García
  • Ing. Laura Sandoval Montaño

Objetivo

Al finalizar el curso los participantes contarán con la bases para diseñar e implementar programas en lenguaje C.

Contenido

  1. Diseño de programas.
  2. El lenguaje de programación C.
  3. Tipos de datos, variables y constantes.
  4. Estructuras de control y repetición.
  5. Arreglos de una y varias dimensiones.
  6. Manejo de funciones.
  7. Estructuras.
  8. Fundamentos de apuntadores.
  9. Manejo de memoria dinámica.
  10. Manejo de archivos.
  11. Varios.

Material

Fundamentos de Programación en GPUs de Propósito General con CUDA

Instructores

  • Ing Laura Sandoval Montaño
  • M.I. Elba Karen Sáenz García
  • Ariel Ulloa Trejo

Objetivo

Al finalizar el curso los participantes contarán con las bases para empezar a programar en GPUs utilizando la herramienta CUDA de Nvidia.

Contenido

  1. Antecedentes.
  2. GPU.
  3. CUDA.
    • Arquitectura.
    • Jerarquía de memoria.
    • Modelo de ejecución CUDA.
      • Grids.
      • Bloques.
      • Hilos.
  4. Funciones CUDA.
  5. Manejo de arreglos unidimensionales y bidimensionales.
  6. Memoria compartida.
  7. Varios.

Material

Programación del lado del servidor con PHP

Instructores

  • Juan Francisco de Reza Trujillo
  • Alberto Embarcadero Ruiz

Objetivo

Difundir a la comunidad universitaria la programación del lado del servidor por medio del lenguaje PHP así como herramientas que permiten explotar al máximo los tipos de desarrollos creados.

Contenido

  1. Introducción
  2. Iniciando con PHP
  3. Formularios
  4. Ficheros
  5. Aplicaciones
  6. Cookies y sesiones
  7. GSM
  8. Producción de código para interpretarse en el cliente

Material

Programación Paralela de GPUs con CUDA

Instructores

  • Alberto Embarcadero Ruiz
  • Miguel Ángel Guillén Hernández

Objetivo

Difundir a la comunidad universitaria y hacer de su interés el tópico del cómputo en paralelo de forma práctica, mediante la programación de tarjetas gráficas (GPUs) y otros dispositivos similares de la compañía NVIDIA, utilizando el lenguaje C y la extensión CUDA, de la misma compañía.

Contenido

  1. Introducción a la programación paralela
    • Concepto de paralelismo
    • Procesamiento serial, concurrente y paralelo
    • Taxonomía de Flynn
    • Modelos de programación concurrente/paralela
    • Concepto de 'granularidad'
  2. Introducción a CUDA
    • Diversas opciones para programación concurrente/paralela
    • ¿Qué es CUDA?
    • ¿Qué es una GPU?
    • Modelo Host-Device
    • Ejecución de un programa en CUDA
    • Hilos, bloques y mallas
    • Modelo de memoria
  3. Programando en CUDA
    • Estructura de un programa en CUDA y C
    • Funciones básicas de CUDA
    • Manipulación de arreglos y matrices
    • Sincronización en CUDA
    • Manipulación de imágenes

Material

Fundamentos de programación orientada a objetos con Java

Contenido

  1. Paradigma de POO
  2. Objetos y clases, sus métodos y atributos
  3. Solución de un problema con el paradigma POO
  4. Diseño de diagrama de clases con arquitectura Modelo Vista controlador
  5. Implementación y uso de clases en JAVA
  6. Variables y métodos
    1. Encapsulación y Modificadores de acceso
    2. Estructuras condicionales y de repetición
    3. Métodos estáticos
    4. Arreglos
    5. Excepciones
    6. Herencia
    7. Polimorfismo, métodos abstractos- métodos constructores
    8. Otros

Fundamentos de Programación Paralela

Contenido

  1. Conceptos de paralelismo
    1. Definición de proceso
    2. Computo serial y paralelo
    3. Concurrencia y paralelismo
    4. Granularidad y niveles de paralelismo
  2. Patrones de Programación paralela
    1. Diseño de un programa paralelo
    2. Paradigmas de programación paralela
      1. Maestro - esclavo
      2. Entubamiento de datos
      3. Divide y conquista
      4. SPMD
    3. Descomposición del problema
      1. Datos
      2. Tareas o funciones
    4. Diferencia entre hilo y proceso
  3. Modelos de programación paralela
    1. Memoria compartida
    2. Dependencias de datos y de control
      1. OpenMP
      2. Hilos pthreads
    3. Memoria Distribuida
      1. MPI

Programación Paralela de GPUs con CUDA

Instructores

  • Esaú Ugalde Vargas

Objetivo

Difundir a la comunidad universitaria y hacer de su interés el tópico del cómputo en paralelo de forma práctica, mediante la programación de tarjetas gráficas (GPUs) y otros dispositivos similares de la compañía NVIDIA, utilizando el lenguaje C y la extensión CUDA, de la misma compañía.

Contenido

  1. Introducción a la programación paralela
    1. Concepto de paralelismo
    2. Procesamiento serial, concurrente y paralelo
    3. Taxonomía de Flynn
    4. Modelos de programación concurrente/paralela
    5. Concepto de 'granularidad'
  2. Introducción a CUDA
    1. Diversas opciones para programación concurrente/paralela
    2. ¿Qué es CUDA?
    3. ¿Qué es una GPU?
    4. Modelo Host-Device
    5. Ejecución de un programa en CUDA
    6. Hilos, bloques y mallas
    7. Modelo de memoria
  3. Programando en CUDA
    1. Estructura de un programa en CUDA y C
    2. Funciones básicas de CUDA
    3. Manipulación de arreglos y matrices
    4. Sincronización en CUDA
    5. Manipulación de imágenes

Desarrollo Web

Instructores

  • Juan Francisco de Reza Trujillo
  • Melanie Sarai Galván Rodríguez

Objetivo

Al finalizar el curso, el alumno tendrá las bases para desarrollar sistemas en la industria dedicada al desarrollo web.

Contenido

  1. Introducción a las plataformas web
  2. Introducción a la arquitectura cliente-servidor
  3. Introducción a los frameworks
  4. Modelo, vista y controlador
  5. El lenguaje de marcado HTML
  6. El lenguaje PHP
  7. Funciones de PHP
  8. Características avanzadas de PHP
  9. El lenguaje de marcado CSS
  10. Introducción al lenguaje JavaScript
  11. Introducción a jQuery
  12. Introducción a las bases de datos
  13. Introducción al lenguaje SQL
  14. Introducción a CodeIgniter
  15. La tecnología AJAX y el protocolo JSON
  16. Introducción a CSS3 y HTML5
  17. Canvas
  18. Elaboración de una aplicación real

Programación Paralela de GPUs con OpenCL

Instructores

  • Miguel Ángel Guillén Hernández
  • Alberto Embarcadero Ruíz

Objetivo

Difundir a la comunidad universitaria y hacer de su interés el tópico del cómputo en paralelo, así como una introducción al cómputo heterogéneo, de forma práctica, mediante la programación de tarjetas gráficas (GPUs) utilizando el lenguaje C y la extensión OpenCL.

Contenido

  1. Introducción a la programación paralela
    1. Concepto de paralelismo
    2. Procesamiento serial, concurrente y paralelo
    3. ¿Procesamiento heterogéneo?
    4. Taxonomía de Flynn
    5. Modelos de programación concurrente/paralela
    6. Concepto de 'granularidad'
  2. Introducción a OpenCL
    1. Diversas opciones para programación concurrente/paralela
    2. ¿Qué es OpenCL?
    3. ¿Qué es una GPU?
    4. Modelo Host-Device y concepto de Kernel
  3. Programando en OpenCL
    1. Modelo de dispositivo de OpenCL
    2. Estructuras de datos de OpenCL
    3. Kernels en OpenCL
    4. Transferencia de datos entre host y device
    5. Work-items y work-groups
    6. Manipulación de arreglos y matrices
    7. Sincronización en OpenCL
    8. Manipulación de imágenes

© 2024 Universidad Nacional Autónoma de México, Facultad de Ingeniería