Difference between revisions of "Computación de alto rendimiento"

From Supercomputación y Cálculo Científico UIS
 
(2 intermediate revisions by the same user not shown)
Line 91: Line 91:
 
</div>
 
</div>
 
==='''Evaluación'''===
 
==='''Evaluación'''===
====='''Evaluaciones programadas para el 1er Semestre de 2020'''=====
+
====='''Evaluaciones programadas para el 1er Semestre de 2021'''=====
La evaluación tendrá cinco componentes principales, relacionados con su proyecto de maestría. El objetivo es tratar parte de la implementación de su problema de investigación (o un problema asociado) usando computación de alto rendimiento, principalmente en programación bajo tres paradigmas principales: memoria compartida, memoria distribuída y computación hibrída usando GPUS. Si dado el caso,
+
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:
  
*La primera parte de la evaluación se propone para un análisis del algoritmo escogido para detectar oportunidades paralelización y análisis de concurrencia (Fecha a definir)
+
# '''FASE 1:''' Presentación de la propuesta a realizar.
*La segunda parte de la evaluación es la implementación del algoritmo en un código secuencial y de la implementación en OpenMP
+
# '''FASE 2: Desarrollo de la propuesta.'''
*La tercera parte de la evaluación es la implementación en MPI.
+
# '''FASE 3: Presentación de la propuesta como un poster digital'''
*La cuarta parte de la evaluación es la implementación en CUDA u OpenACC
 
*La quinta parte es, en un reporte de evaluación de las soluciones planteadas en términos de aceleración, velocidad, escalabilidad y rendimiento.
 
  
 +
Por adicional, se tiene en cuenta la participación en todas las sesiones.
 +
<br />
 
==='''Bibliografía y Fuentes de Información'''===
 
==='''Bibliografía y Fuentes de Información'''===
 
<div class="col-md-14"><div class="panel panel-darker-white-border"><ul><li>Elements of Parallel Computing, Eric Aubanel (Chapman & Hall/CRC)</li><li>Essentials of Computer Architecture, D. Comer (CRC Press)</li><li>High Performance Embedded Computing: Applications in Cyber-Physical systems and Mobile Computing, M. Wolf (Morgan Kaufmann)</li><li>[http://research.microsoft.com/en-us/collaboration/fourthparadigm/ The Fourth Paradigm: Data-Intensive Scientific Discovery]</li><li>[http://www.mcs.anl.gov/~itf/dbpp/ Designing and Building Parallel Programs, by Ian Foster]</li><li>[http://www.cise.ufl.edu/research/ParallelPatterns/ Patterns for Parallel Programming, by Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill. Software Patterns Series, Addison Wesley Ed., USA. 2009]</li><li>Patterns for Parallel Software Design, Jorge Luis Ortega-Arjona (Wiley)</li><li>Structured Parallel Programming: Patterns for Efficient Computation, M. McCool, A. D. Robison and J. Reinders (Morgan Kaufmann)</li><li>The Art of Concurrency “A thread Monkey’s Guide to Writing Parallel Applications”, by Clay Breshears (Ed. O Reilly, 2009)</li><li>Parallel Scientific Computing in C++ and MPI « A Seamless Approach to Parallel Algorithms and Their Implementation », Karniadakis and Kirby II (Cambridge Press)</li><li>Parallel And Distributed Computation Numerical Methods, D. P. Bertsekas and J. N. Tsitsiklis (Prentice Hall)</li><li>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)</li><li>The Algorithms Design Manual, S. S. Skiena ( Springer)</li><li>Algorithms Sequential and Parallel « A Unified Approach » Miller and Boxer (Computing Engineering Series)</li><li>Parallel Algorithms, Cassanova, Legrand and Robert (Chapman and Hall/CRC)</li><li>Fundamentals of Multicore Software Development, Ed. Victor Pankratius, Ali-Reza Adl-Tabatabai and Walter Tichy (CRC Press)</li><li>Introduction to HPC with MPI for Data Science, Frank Nielsen (Springer)</li><li>Programming Massively Parallel Processors « A Hands-on Approach » , Kirk and Hwu (Nvidia/Morgan Kaufmann)</li><li>CUDA Application Design and Development, Rob Farber (Nvidia/Morgan Kaufmann)</li><li>Introduction to High Performance Computing for Scientists and Engineers, Hager and Wellein (Chapman and Hall/CRC)</li><li>Sourcebook of Parallel Computing , Dongarra, Foster, Fox, Groop, Kennedy, Torczon and White (Morgan Kaufmann)</li><li>CUDA Programming: A Developer's Guide to Parallel Computing with GPUs, S. Cook (Morgan Kaufmann)</li><li>The CUDA Handbook: A Comprehensive Guide to GPU Programming, N. Wilt (Addison-Wesley)</li><li>CUDA by Example « An Introduction to General-Purpose GPU Programming » Sanders and Kandrot (Nvidia/Addison Wesley)</li><li>CUDA Fortran for Scientists and Engineers: Best Practices for Efficient CUDA Fortran Programming, G. Ruetsch and M. Fatica (Morgan Kaufmann/PGI/Nvidia)</li><li>HPC@Green IT: Green High Performance Computing Methods, R. Gruber and V. Keller (Springer)</li><li>OpenACC for Programmers: Concepts and Strategies, S. Chandraserkaran and G. Juckeland (Addison-Wesley)</li><li>OpenACC: Parallel Programming with OpenACC, Edited by Rob Farber (Morgan Kaufmann)</li><li>High Performance Parallelism Pearls: Multicore and Many-core Programming Approaches, J. Reinders and J. Jeffers (Morgan Kaufmann)</li><li>[https://www.openmp.org/ OpenMP]</li><li>[https://www.openacc.org/ OpenACC]</li><li>[http://developer.nvidia.com/ NVIDIA]</li><li>[http://www.sc3.uis.edu.co/ SC3]</li><li>[http://www.red-ricap.org/ RICAP]</li><li>[https://computing.llnl.gov/tutorials/parallel_comp/ Computing.llnl.gov]</li><li>[http://www.sc-camp.org/ SC-Camp]</li></ul></div>
 
<div class="col-md-14"><div class="panel panel-darker-white-border"><ul><li>Elements of Parallel Computing, Eric Aubanel (Chapman & Hall/CRC)</li><li>Essentials of Computer Architecture, D. Comer (CRC Press)</li><li>High Performance Embedded Computing: Applications in Cyber-Physical systems and Mobile Computing, M. Wolf (Morgan Kaufmann)</li><li>[http://research.microsoft.com/en-us/collaboration/fourthparadigm/ The Fourth Paradigm: Data-Intensive Scientific Discovery]</li><li>[http://www.mcs.anl.gov/~itf/dbpp/ Designing and Building Parallel Programs, by Ian Foster]</li><li>[http://www.cise.ufl.edu/research/ParallelPatterns/ Patterns for Parallel Programming, by Timothy G. Mattson, Beverly A. Sanders and Berna L. Massingill. Software Patterns Series, Addison Wesley Ed., USA. 2009]</li><li>Patterns for Parallel Software Design, Jorge Luis Ortega-Arjona (Wiley)</li><li>Structured Parallel Programming: Patterns for Efficient Computation, M. McCool, A. D. Robison and J. Reinders (Morgan Kaufmann)</li><li>The Art of Concurrency “A thread Monkey’s Guide to Writing Parallel Applications”, by Clay Breshears (Ed. O Reilly, 2009)</li><li>Parallel Scientific Computing in C++ and MPI « A Seamless Approach to Parallel Algorithms and Their Implementation », Karniadakis and Kirby II (Cambridge Press)</li><li>Parallel And Distributed Computation Numerical Methods, D. P. Bertsekas and J. N. Tsitsiklis (Prentice Hall)</li><li>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)</li><li>The Algorithms Design Manual, S. S. Skiena ( Springer)</li><li>Algorithms Sequential and Parallel « A Unified Approach » Miller and Boxer (Computing Engineering Series)</li><li>Parallel Algorithms, Cassanova, Legrand and Robert (Chapman and Hall/CRC)</li><li>Fundamentals of Multicore Software Development, Ed. Victor Pankratius, Ali-Reza Adl-Tabatabai and Walter Tichy (CRC Press)</li><li>Introduction to HPC with MPI for Data Science, Frank Nielsen (Springer)</li><li>Programming Massively Parallel Processors « A Hands-on Approach » , Kirk and Hwu (Nvidia/Morgan Kaufmann)</li><li>CUDA Application Design and Development, Rob Farber (Nvidia/Morgan Kaufmann)</li><li>Introduction to High Performance Computing for Scientists and Engineers, Hager and Wellein (Chapman and Hall/CRC)</li><li>Sourcebook of Parallel Computing , Dongarra, Foster, Fox, Groop, Kennedy, Torczon and White (Morgan Kaufmann)</li><li>CUDA Programming: A Developer's Guide to Parallel Computing with GPUs, S. Cook (Morgan Kaufmann)</li><li>The CUDA Handbook: A Comprehensive Guide to GPU Programming, N. Wilt (Addison-Wesley)</li><li>CUDA by Example « An Introduction to General-Purpose GPU Programming » Sanders and Kandrot (Nvidia/Addison Wesley)</li><li>CUDA Fortran for Scientists and Engineers: Best Practices for Efficient CUDA Fortran Programming, G. Ruetsch and M. Fatica (Morgan Kaufmann/PGI/Nvidia)</li><li>HPC@Green IT: Green High Performance Computing Methods, R. Gruber and V. Keller (Springer)</li><li>OpenACC for Programmers: Concepts and Strategies, S. Chandraserkaran and G. Juckeland (Addison-Wesley)</li><li>OpenACC: Parallel Programming with OpenACC, Edited by Rob Farber (Morgan Kaufmann)</li><li>High Performance Parallelism Pearls: Multicore and Many-core Programming Approaches, J. Reinders and J. Jeffers (Morgan Kaufmann)</li><li>[https://www.openmp.org/ OpenMP]</li><li>[https://www.openacc.org/ OpenACC]</li><li>[http://developer.nvidia.com/ NVIDIA]</li><li>[http://www.sc3.uis.edu.co/ SC3]</li><li>[http://www.red-ricap.org/ RICAP]</li><li>[https://computing.llnl.gov/tutorials/parallel_comp/ Computing.llnl.gov]</li><li>[http://www.sc-camp.org/ SC-Camp]</li></ul></div>
Line 113: Line 113:
 
*[[:File:MemCompOpenMP2.pdf|Shared Memory Programming with OpenMP]] (In Spanish/En Español)
 
*[[:File:MemCompOpenMP2.pdf|Shared Memory Programming with OpenMP]] (In Spanish/En Español)
 
*[[:File:SharedMPI14c.pdf|Distributed Memory Exploitation with MPI: An Introduction]]
 
*[[:File:SharedMPI14c.pdf|Distributed Memory Exploitation with MPI: An Introduction]]
 +
*Hybrid/Heterogeneous Computing
 +
**[[:File:IntroGPUs.pdf|Introduction to GPU Computing]]
 +
**[[:File:IntroCUDA.pdf|Introduction to CUDA]]
 +
**[[:File:IntroOpenACC.pdf|Introduction to OpenACC]]
  
 
</div>
 
</div>

Latest revision as of 02:03, 19 March 2021

Logo_sc33.png

 

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

3-pi-cartoon.jpg

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

  1. 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
  2. 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
  3. 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
  4. 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
    • 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
  5. Optimización
    • Optimización Local y Global Paralela
  6. 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)
  7. Debugging and Profiling
    • Consideraciones de Debugging y Monitoreo de Rendimiento y Comportamiento
    • Herramientas para el Debugging y el Profling
  8. 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
  9. 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:

  1. FASE 1: Presentación de la propuesta a realizar.
  2. FASE 2: Desarrollo de la propuesta.
  3. 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

  1. Introducción a las Arquitecturas Escalables
    1. Parte 1
    2. Parte 2

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.