Bienvenidos ENOAN 2021
Historia y estado del arte de la computación de alto rendimiento: solo sería una pequeña retrospectiva de los elementos fundamentales del supercómputo y de cuál es la situación actual del mismo.
Estándares de programación en lenguaje C/C++:
OpenMP: en este tema tengo pensado ver como funciona este estándar y además un pequeño ejemplo práctico de la aproximación de la integral numérica y de pi en paralelo.
MPI: otro estándar para la programación en paralelo con algunas diferencias respecto a OpenMP, también tengo pensado mostrar un ejemplo práctico, utilizando métodos de Monte Carlo para aproximar integrales múltiples.
CUDA: programación en paralelo usando GPU's (tarjetas gráficas), para este estándar la idea sería programar algún algoritmo sencillo como suma de vectores o alguna operación sobre matrices en forma paralela, tales cómo la suma de matrices o multiplicación por un escalar
Envoltorios: APIs y estándares de programación en paralelo con lenguajes de alto nível como Python y envoltorios como Tensorflow, Keras o Numba. Estos envoltorios nos ahorran tiempo y nos permitirían enfocarnos en temas más avanzados cómo redes neuronales artificiales.
[1] Michaell J. Quuin, Parallel Programming in C with OpenMP and MPI, McGraw-Hill Education, January 2008.
[2] Tolga Soyata,GPU Parallel Program Development Using CUDA, Chapman and Hall-CRC, June 30,2020).
[3] Libro Web: Introduccion a Python: https://uniwebsidad.com/libros/algoritmos-python.
[4] Dongarra Foster, Source Book of parallel computing, Morgan Kaufmann; 1st edition, November 25, 2002.
[5] Thomas H. Cormen, Introduction to Algorithms, The MIT Press, 3rd Edition, July 2009.
[6] Daniel T. Joyce, Object-Oriented Data Structures Using Java, Jones & Bartlett Publishers, 2016.
[7] John C. Mitchell, Concepts in programing Languages, Cambridge University Press, 2003.
[8] Elisa Viso, Canek Peláez, Introducción a las ciencias de la computación con Java, Prensas de Ciencias, UNAM, 2ª. Edición, 2012.
Curso dirigido a estudiantes de Ciencias o Ingeniería, con conocimientos previos de programación (cualquier lenguaje) de preferencia C/C++. Conocimientos previos de análisis numérico (métodos numéricos) y de análisis de algoritmos. Los estudiantes deben contar con un correo de Gmail.
VIDEO de INTRODUCCION: Este video es una muy buena introducción a lo que se verá en el taller.
MATERIAL DEL CURSO: Repositorio que se usará en el taller, así que es buena idea que lo tengan disponible desde antes de que comencemos el taller:
Programación en Paralelo: Aquí estoy publicando las notas del seminario de programación en paralelo, un subconjunto del material que se muestra aquí será el que utilizare para el taller, así que no está de más que de una vez este disponible para los participantes.
MATERIAL COMPLEMENTARIO 1.
La mayor parte del taller lo voy a dar usando python como lenguaje de programación, sin embargo para algunas partes muy en específico es necesario tener un poco de conocimientos de programación en el lenguaje C/C++, así que para fines de programación es suficiente este par de referencias:
Libro web python: Este libro web contiene elementos fundamentales de programación, ciclos, variables, funciones, etc.
Memoria dinámica: En este video se muestra el conocimiento necesario sobre el lenguaje C/C++ que se requiere para el taller.
Vídeo Este video es una muy buena introducción a lo que veremos en el taller.
MATERRIAL COMPLEMENTARIO 2
En estos repositorios tengo material que no es obligatorio que revisen pero que es buena idea que tengan a la mano.
Prometeo: Repositorio que contiene material sobre calculo diferencial e integral, así como de álgebra, este material esta dirigido para todo aquel participante que requiera reforzar conocimientos básicos, así como para quienes quieran familiarizarse con el uso de google colab o de jupyter notebooks.
Numérico: En este repositorio están mis notas del curso de análisis numérico, este material esta dirigido a participantes con conocimientos intermedios que les interesa aprender métodos numéricos y sobre todo para los participantes que les interese conocer cómo medir el desempeño de los algoritmos.