Computación de alto rendimiento
Volver a Cursos
Computación de Alto Rendimiento - Código 24433
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
Contents
PRESENTACION DEL CURSO
La computación de alto rendimiento, como su nombre lo indica es aquella que esta destinada a tratar grandes volumenes de datos, grandes y complejos cálculos científicos, en tiempos aceptables, medibles, con una precisión adecuada al problema (muy grande), permitiendo ahorrar energía y compartir. Desde el punto de vista de las ciencias computacionales e ingeniería computacional (y afines), implica muchas cosas relacionadas que van más allá de las aplicaciones y la cantidad de datos: como la tecnología, aspectos relacionados con el medio ambiente y los costos, paradigmas de programación y de diseño/organización de arquitecturas computacionales (hardware/software) y por supuesto matemática.
Este es un curso dirigido a estudiantes de postgrado, que si bien puede compararse en contenido con el curso Introducción a la programación paralela el enfoque es hacia estudiantes de master y doctorado en ciencias computacionales y afines, haciendo énfasis en la obtención de altas prestaciones, y en el soporte hacia la solución de problemas científicos multidisciplinarios, desde un enfoque computacional.
Contenido
- Introducción a la Computación de Alto Rendimiento y Cálculo Científico
- Altas Prestaciones y Alta Demanda Computacional
- Computación Científica y de Alto Rendimiento
- Evolución de la Computación de Alto Rendimiento
- El Top500 y otros rankings
- Arquitecturas Paralelas y Sistemas Escalables
- Modelos de Máquinas y Ejecución Paralelas
- Paralelismo y Comunicación
- Caracterización de Flynn
- Multinucleos y Multiprocesamiento
- Procesamiento Vectorial
- Arquitecturas para el Procesamiento Masivamente Paralelo (Manycores)
- Modelos de Memoria
- Jerarquia de Memoria
- Sistemas Distribuidos de Gran Escala
- Unidades de Procesamiento Tensor
- Unidades de Procesamiento Cuántico
- Sistemas Operativos, Sistemas de Archivos, Calendarización y Monitoreo en Arquitecturas Paralelas
- Aspectos especiales de Linux y Slurm
- Algunos aspectos relacionados con CAPEX y Ambientes de Implementación de Plataformas
- Energia y Temperatura
- Seguridad y Comodidad
- Algoritmos Concurrentes y Paralelos
- Caracterización de Paralelismo
- Granularidad
- Multihilos y Multiprocesos
- Modelos de Computación (RAM, PRAM, Sorting Networks, BSP, LogP y otros)
- Modelos de Algoritmos Concurrentes
- Descomposición de Tareas
- Descomposición de Datos
- Dividir y Conquistar
- Tuberias (Pipeline)
- Recursividad y Otros (Embarrassingly Parallelism y Otros)
- Algoritmos No Paralelos
- Balanceo de Carga y Calendarización (Scheduling)
- Algunos Aspectos Importantes de Comunicación
- Paradigmas y Modelos de Programación Paralela
- Ambientes de Programación Paralela
- Modelo de Programación de Memoria Compartida
- OpenMP
- Modelo de Programación de Memoria Distribuída
- Paso de Mensajes con MPI
- Modelo Programación de Memoria Híbrida/Heterogénea
- Programación de Sistemas CPU-GPU (Sistemas GPGPU)
- Fundamentos de Programación de GPUs y Múltiples GPU con CUDA
- Programación de Sistemas CPU-GPU (Sistemas GPGPU)
- Uso de Directivas de Aceleración con OpenACC
- Otros Mecanismos de Implementación y Aceleración de Aplicaciones
- Aspectos Importantes de Comunicación, Balanceo de Carga y Tolerancia a Fallos desde la Implementación
- Implementaciones hibridas
- OpenMP + MPI
- CUDA + MPI
- Optimización
- Optimización Local y Global Paralela
- Evaluación de Desempeño
- Latencia y Throughput
- Speedup (Aceleración), Eficiencia y Escalabilidad
- Ley de Amhdal
- Ley de Gustaffon-Barsis
- Complejidad Asimptótica (Aceleración y Eficiencia)
- Modelo de Little
- Análisis de Rendimiento y Tunning (Ajuste)
- Debugging and Profiling
- Consideraciones de Debugging y Monitoreo de Rendimiento y Comportamiento
- Herramientas para el Debugging y el Profling
- Lineamientos para el Desarrollo de Aplicaciones Paralelas
- Patrones para el Flujo de Control y de Ejecución
- Patrones para la Administración de Datos
- Espacios de Diseño y Desarrollo de Programas Paralelos
- Búsqueda de Explotación de Concurrencia
- Diseño de Estructura de Algoritmo
- Selección de Estructuras de Soporte de Algoritmos Paralelos
- Selección de Mecanismos de Implementación
- Direcciones y Tendencias en Programación Paralela
- Exascale
- Explotación de Unidades Tensor y Aplicaciones Emergentes
- Visualizacióm
- Explotación de Memoria
- Paradigmas de Programación Emergentes
- Computación Cuántica
- Tecnologías de ruptura computacional
Evaluación
Evaluaciones programadas para el 1er Semestre de 2021
El objetivo este semestre, es que el desarrollo del curso contribuya a tratar alguno de los aspectos de su proyecto de investigación de postgrado, o algún proyecto relacionado. La evaluación se dará en tres fases:
- FASE 1: Presentación de la propuesta a realizar.
- FASE 2: Desarrollo de la propuesta.
- FASE 3: Presentación de la propuesta como un poster digital
Por adicional, se tiene en cuenta la participación en todas las sesiones.
Bibliografía y Fuentes de Información
- 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 Y PRESENTACIONES DE LAS SESIONES
- Introducción Linux
- Simple Linux Utility for Resource Management
- Shared Memory Programming with OpenMP (In Spanish/En Español)
- Distributed Memory Exploitation with MPI: An Introduction
- Hybrid/Heterogeneous Computing
CONSULTA A ESTUDIANTES
Los martes puede realizarse consulta en LP226 o en Supercomputación UIS 4to piso del CENTIC pero se recomienda solicitar cita por email previamente.