Algoritmos y Computación de Alto Rendimiento

From Supercomputación y Cálculo Científico UIS
Logo_sc33.png

 

Volver a Cursos

Algoritmos y Computación de Alto Rendimiento - Código 29451

Carlos Jaime Barrios Hernandez, PhD. - (c b a r r i o s (@) u i s . e d u . c o )

Asistencia Técnica-Teórica:. Equipo SC3UIS

Progprob.jpg

PRESENTACION DEL CURSO

El desarrollo de algoritmos computacionales para soportar tanto análisis de datos como simulaciones de fenómenos físicos (diseñados, reproducidos en laboratorio, observados o propuestos) es importante para garantizar precisamente la calidad, realismo, confianza y reproductibilidad del conocimiento generado. Dichos algoritmos, que surgen de modelos previamente concebidos se convertirán en códigos que componen programas de computación que serán ejecutados en máquinas computacionales. El rendimiento obtenido y las capacidades, dependen igualmente del algoritmo pero no hay que olvidar que de las características arquitecturales de la máquina computacional utilizada.

Precisamente, este curso (teórico-práctico) busca fundamentar el desarrollo de algortimos y su implementación en lenguajes de programación que permitan el desarrollo de códigos para atacar un problema físico, ejecutar ese código y obtener el máximo desempeño y confianza. Teniendo en cuenta la diversidad de arquitecturas computacionales que permiten seleccionar que tipo de plataforma se necesita para atacar un problema, igualmente es necesario conocer diferentes aspectos arquitecturales tecnológicos y espacios de desarrollo que permiten la colaboración y la reproductibilidad.

Contenido ( No en un orden estricto, Después de Encuesta con los Estudiantes)

  1. Introducción a la Computación Científica
  2. Fundamentos para el Análisis y Diseño de Algoritmos
    • Principios Básicos de Representación
    • Análisis de Complejidad
  3. Programación de Algoritmos Científicos cn C/C++ : Una Introducción
    • Principios Básicos
    • Buenas Prácticas de Desarrollo
    • Compilación Ejecución Eficiente y Optimización
    • Debugging, Profiling and Tracing.
  4. Sistemas, Plataformas y Ambientes de Desarrollo y Ejecución
    • Aquitecturas computacionales para investigación (y desarrollo científico)
      • Infrastructuras
      • Repositorios (GitHub/GitLab) y Ambientes Colaborativos
      • Sistemas Operativos (Linux)
    • Interacción y Plataformas de Gran Escala
  5. Cómputo Científico Paralelo
    • Concurrencia y Paralelismo
    • Paradigmas de Programación Paralela
      • Memoria Compartida con OpenMP
      • Memoria Distribuida con MPI
      • Memoria Hibrida con OpenACC (Y un poco de CUDA)
      • Otras Posibilidades
    • Paralelismo Cuántico : Una introducción
    • Librerias, Solucionadores y Más

Evaluación

Evaluaciones programadas para el 2do Semestre de 2021

La evaluación planteada, busca promover el trabajo colaborativo, por equipos que se conforman de acuerdo a la afinidad e interés en una temática específica de la física. Y en ese trabajo se tendrán en cuenta los siguientes aspectos

  1. 20% Diseño y Análisis de Algoritmo a Realizar (Diciembre 7 2021) Viernes 21 de enero de 2022.*
  2. 20%: Implementación y Solución
  3. 20%: Análisis y Evaluación de Rendimiento
  4. 20%: Presentación de la propuesta como un póster digital (Marzo 8 2022)**
  5. 20%: Trabajos Prácticos en Clase

Bonus: Participación en seminarios y eventos libres propuestos por el profesor en el transcurso del curso.


* La entrega (1) la realizaran en un documento que enviarán al correo del profesor, en *.pdf de máximo 8 (ocho) páginas (que incluye todo, incluyendo figuras, resumen, bibliografía, tablas y gráficas), el tamaño de la letra en 10 puntos cualquier tipo de fuente, en español a manera de borrador de artículo científico en español que contendrá, la estructura común de un articulo científico:

  • TITULO (Un título dado por cada grupo, que genere interés en la lectura del mismo)
  • Nombres de los integrantes (incluir el ORCID y correo electrónico)
  • Resumen en español de máximo diez lineas
  • Contenido del mismo explicando lo solicitado para la entrega (en el contenido deben estar las tablas, figuras y gráficas)
  • Conclusión (acerca por ejemplo, de la complejidad del algoritmo propuesto, o del problema, una conclusión dada por ustedes)
  • Bibliografía y fuentes de información.

** Para la entrega del poster digital, se recomienda enviarlo previamente (lunes 7 de marzo, 8:00pm, en tipo de archivo .pdf a la dirección de correo del profesor, colocando como asunto: Poster Digital {Nombre del Grupo} como archivo adjunto, agregando los nombres de los integrantes en el cuerpo del correo electrónico.). NO HAY ARTICULO ANEXO. Tenga en cuenta que los puntos 2 y 3 deben estar contenidos en la presentación del poster digital y en un repositorio github/gitlab (código de la solución y visualizaciones posibles) o los adjuntan en un .zip al mismo correo. Ejemplos de poster digitales pueden observarse en: https://www.nvidia.com/gtc/poster-gallery/

Bibliografía y Fuentes de Información

Todas las fuentes y material son de libre acceso. Algunas, tienen el enlace en este sitio directamente tras cumplir autorización por parte de sus autores o de los editores.
  • Elements of Parallel Computing, Eric Aubanel (Chapman & Hall/CRC)
  • Essentials of Computer Architecture, D. Comer (CRC Press)
  • High Performance Embedded Computing: Applications in Cyber-Physical systems and Mobile Computing, M. Wolf (Morgan Kaufmann)
  • The Fourth Paradigm: Data-Intensive Scientific Discovery
  • Designing and Building Parallel Programs, by Ian Foster
  • Patterns for Parallel Programming, by Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill. Software Patterns Series, Addison Wesley Ed., USA. 2009
  • Patterns for Parallel Software Design, Jorge Luis Ortega-Arjona (Wiley)
  • Structured Parallel Programming: Patterns for Efficient Computation, M. McCool, A. D. Robison and J. Reinders (Morgan Kaufmann)
  • The Art of Concurrency “A thread Monkey’s Guide to Writing Parallel Applications”, by Clay Breshears (Ed. O Reilly, 2009)
  • Parallel Scientific Computing in C++ and MPI « A Seamless Approach to Parallel Algorithms and Their Implementation », Karniadakis and Kirby II (Cambridge Press)
  • Parallel And Distributed Computation Numerical Methods, D. P. Bertsekas and J. N. Tsitsiklis (Prentice Hall)
  • An Introduction to High Performance Scientific Computing, Scientific and Engineering Computation Series, Ll. D. Fosdick, E. R. Jessup, C. J. C. Schauble and G. Dmik (MIT Press)
  • The Algorithms Design Manual, S. S. Skiena ( Springer)
  • Algorithms Sequential and Parallel « A Unified Approach » Miller and Boxer (Computing Engineering Series)
  • Parallel Algorithms, Cassanova, Legrand and Robert (Chapman and Hall/CRC)
  • Fundamentals of Multicore Software Development, Ed. Victor Pankratius, Ali-Reza Adl-Tabatabai and Walter Tichy (CRC Press)
  • Introduction to HPC with MPI for Data Science, Frank Nielsen (Springer)
  • Programming Massively Parallel Processors « A Hands-on Approach » , Kirk and Hwu (Nvidia/Morgan Kaufmann)
  • CUDA Application Design and Development, Rob Farber (Nvidia/Morgan Kaufmann)
  • Introduction to High Performance Computing for Scientists and Engineers, Hager and Wellein (Chapman and Hall/CRC)
  • Sourcebook of Parallel Computing , Dongarra, Foster, Fox, Groop, Kennedy, Torczon and White (Morgan Kaufmann)
  • CUDA Programming: A Developer's Guide to Parallel Computing with GPUs, S. Cook (Morgan Kaufmann)
  • The CUDA Handbook: A Comprehensive Guide to GPU Programming, N. Wilt (Addison-Wesley)
  • CUDA by Example « An Introduction to General-Purpose GPU Programming » Sanders and Kandrot (Nvidia/Addison Wesley)
  • CUDA Fortran for Scientists and Engineers: Best Practices for Efficient CUDA Fortran Programming, G. Ruetsch and M. Fatica (Morgan Kaufmann/PGI/Nvidia)
  • HPC@Green IT: Green High Performance Computing Methods, R. Gruber and V. Keller (Springer)
  • OpenACC for Programmers: Concepts and Strategies, S. Chandraserkaran and G. Juckeland (Addison-Wesley)
  • OpenACC: Parallel Programming with OpenACC, Edited by Rob Farber (Morgan Kaufmann)
  • High Performance Parallelism Pearls: Multicore and Many-core Programming Approaches, J. Reinders and J. Jeffers (Morgan Kaufmann)
  • OpenMP
  • OpenACC
  • NVIDIA
  • SC3
  • RICAP
  • Computing.llnl.gov
  • SC-Camp

Material del Curso (Presentaciones, Códigos y más)

Posters Digitales