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.

