Créditos
6
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos
, pero tiene capacidades previas
Departamento
DAC;UAB
Entre otros objetivos, esta asignatura pretende:
1. Introducir al estudiante en el mundo de los sistemas de computación de alto rendimiento, para entender la evolución de las arquitecturas informáticas modernas y su uso para resolver problemas exigentes.
2. Ayudar a los estudiantes a analizar un problema donat para determinar las posibilidades de optimizar el rendimiento del código mediante el uso eficiente de paradigmas de programación paralela adecuados.
3. Enseñar al estudiante a seleccionar algoritmos y hardware para la solución de proyectos de alto rendimiento, y las habilidades necesarias para escribir, ejecutar y evaluar el rendimiento de programas paralelos en distintas arquitecturas de hardware y entornos de software.
Profesorado
Responsable
- Josep Ramon Herrero Zaragoza ( josepr@ac.upc.edu )
Otros
- Christian Guzman Ruiz ( christian.guzman@uab.cat )
- Miquel Angel Senar Rosell ( miquelangel.senar@uab.cat )
- Sandra Adriana Mendez Valerio ( sandra.adriana.mendez@upc.edu )
Horas semanales
Teoría
2
Problemas
2
Laboratorio
0
Aprendizaje dirigido
0
Aprendizaje autónomo
6
Competencias
Conocimientos
Habilidades
Competencias
Objetivos
-
Capacidad para formular modelos simples de rendimiento dada una estrategia de paralelización de una aplicación, que permita estimar la influencia de aspectos arquitectónicos principales: número de elementos de procesamiento, costo de acceso a datos y costo de interacción entre elementos de procesamiento, entre otros.
Competencias relacionadas: K3, S8, -
Capacidad para identificar los diferentes tipos de paralelismo que se pueden explotar en una arquitectura de computadores (ILP, TLP y DLP dentro de un procesador, multiprocesador y multicomputador) y describir sus principios de funcionamiento.
Competencias relacionadas: K4, -
Capacidad para compilar y ejecutar un programa paralelo, utilizando las herramientas esenciales de línea de comandos para medir el tiempo de ejecución.
Competencias relacionadas: K4, -
Capacidad para elegir la estrategia de descomposición más adecuada para expresar paralelismo en una aplicación (tareas, datos).
Competencias relacionadas: K4, S7, S8, -
Capacidad para aplicar las técnicas básicas para sincronizar la ejecución paralela, evitando condiciones de carrera y bloqueos y posibilitando el solapamiento entre computación e interacción, entre otras.
Competencias relacionadas: K4, C6, -
Capacidad de programar en MPI la versión paralela de una aplicación secuencial.
Competencias relacionadas: K4, S7, -
Capacidad de programar en OpenMP la versión paralela de una aplicación secuencial.
Competencias relacionadas: K4, S7, -
Capacidad de programar en OpenMP la versión paralela de una aplicación secuencial.
Competencias relacionadas: K4, S7, -
Capacidad para medir, mediante herramientas de instrumentación, visualización y análisis, el rendimiento alcanzado con la implementación de una aplicación paralela y detectar factores que limitan dicho rendimiento: granularidad de tareas, carga equitativa e interacción entre tareas, entre otros.
Competencias relacionadas: K4, S7, S8, C6,
Contenidos
-
Introducción a la computación de alto rendimiento y la computación paralela
Introducción a la computación de alto rendimiento, las arquitecturas y la computación paralela -
Entendiendo el paralelismo
Conceptos teóricos. Métricas de rendimiento. -
Programación de memoria distribuida con MPI
Arquitecturas de memoria distribuida: programación con Message Passing Interface (MPI) -
Modelado de rendimiento
Capacidad para formular modelos simples de rendimiento dada una estrategia de paralelización de una aplicación, que permita estimar la influencia de aspectos arquitectónicos principales: número de elementos de procesamiento, costo de acceso a datos y costo de interacción entre elementos de procesamiento, entre otros. -
Programación de memoria compartida con OpenMP
Arquitecturas de memoria compartida: programación con OpenMP -
Computación en clúster y sistemas de colas por lotes
Computación en clúster y sistemas de colas por lotes: SLURM -
Python para computación de alto rendimiento
Python para computación de alto rendimiento -
Computación con tarjetas gráficas (GPU) mediante OpenACC
Computación con tarjetas gráficas (GPU) mediante OpenACC
Actividades
Actividad Acto evaluativo
Teoría
Asumir la responsabilidad de su proceso de aprendizaje. Esto implica asistir puntualmente a clases, laboratorios y tutorías, y participar activamente en las discusiones. Los estudiantes son responsables de administrar su tiempo eficazmente para completar todas las tareas, lecturas y proyectos requeridos dentro de los plazos establecidos. También deben adherirse a las políticas de honestidad académica de la universidad, solicitar aclaraciones cuando el material no les quede claro y respetar el ambiente de aprendizaje interactuando con sus compañeros y el profesor de manera profesional.- Teoría: Clases de teoría y resolución de problemas
- Aprendizaje autónomo: Trabajo personal la teoría y resolución de problemas
Contenidos:
- 1 . Introducción a la computación de alto rendimiento y la computación paralela
- 2 . Entendiendo el paralelismo
- 3 . Programación de memoria distribuida con MPI
- 4 . Modelado de rendimiento
- 5 . Programación de memoria compartida con OpenMP
- 6 . Computación en clúster y sistemas de colas por lotes
- 7 . Python para computación de alto rendimiento
- 8 . Computación con tarjetas gráficas (GPU) mediante OpenACC
Teoría
27h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
45h
Sesiones prácticas
El estudiante debe desarrollar tareas prácticas utilizando un clúster paralelo. En dicho entorno, sus responsabilidades incluyen la ejecución activa, la resolución de problemas y la gestión de recursos. Debe: - Prepararse con antelación revisando los conceptos teóricos y las lecturas previas al laboratorio o las instrucciones de configuración inicial antes de la sesión de laboratorio. - Ejecutar las tareas de forma independiente, documentando cuidadosamente los procedimientos, las entradas y las salidas, incluyendo cualquier error encontrado y su resolución. - Desarrollar habilidades prácticas de depuración y utilizar los recursos técnicos disponibles (documentación, herramientas de software específicas) para resolver los desafíos técnicos antes de buscar la ayuda del instructor. - Presentar código/informes funcionales y bien documentados que cumplan con el formato, el control de versiones y las convenciones de nomenclatura especificados.- Problemas: Sesiones prácticas
- Aprendizaje autónomo: Completar las tareas de las prácticas de laboratorio y preparar los entregables.
Contenidos:
Teoría
0h
Problemas
28h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
45h
Metodología docente
Cada semana el estudiante tendrá dos horas de sesión teórica y dos de sesión práctica. Las clases teóricas introducen todos los conocimientos, técnicas, conceptos necesarios para resolver problemas y trabajos de laboratorio. Algunos problemas pueden resolverse en las sesiones teóricas. Se espera del estudiante la realización de trabajo personal adicional resolviendo el resto de problemas de la colección de problemas. Adicionalmente, dos horas de sesiones laboratorio son también realizadas semanalmente; se valorará la participación activa y el rendimiento durante las sesiones de laboratorio (trabajar durante la sesión, avanzando el trabajo para alcanzar los objetivos de la sesión).Los estudiantes deben trabajar autonómamente antes de las sesiones para prepararse para las clases y sacarle partido. Después, deben trabajar autónomamente para practicar y consolidar los conceptos y habilidades desarrolladas a lo largo del curso.
Para las prácticas y problemas de este curso se utilizará mayoritariamente el lenguaje de programación C y los modelos de programación paralela MPI, OpenMP y OpenACC. Las sesiones prácticas de laboratorio se realizan en una máquina paralela de tipo cluster con el sistema operativo Linux. El acceso al clúster deberá realizarse utilizando el ordenador portátil del estudiante. Por tanto, los estudiantes deben garantizar que pueden conectarse al clúster de Linux desde su ordenador portátil.
Método de evaluación
La nota del curso se calculará como la media ponderada de 6 notas (3 notas para cada una de las partes del curso):N = 0.05 * SL1 + 0.15 * EL1 + 0.3 * ET1 + 0.05 * SL2 + 0.15 * EL2 + 0.3 * ET2
Donde:
- SL_i está relacionado con entregas de prácticas de la parte - i-ésima
- EL_i examen de laboratorio de la parte i-ésima
- ET_i examen de teoría de la parte i-ésima
IMPORTANTE: La realización y presentación de todos los informes de seguimiento del laboratorio (SL_i ) será condición necesaria para superar la asignatura. Sólo se considera informe elaborado y presentado un informe con un mínimo de contenido. Informes vacíos o con sólo las preguntas, por ejemplo, no se consideran realizados ni presentados.
Los estudiantes aprobarán el curso si han completado todos los exámenes y han obtenido una nota del curso (N) igual o superior a 5 sobre 10.
Los estudiantes que suspendan el curso con una nota media final superior a 3 sobre 10, podrán realizar un examen de recuperación de la parte teórica. El examen de recuperación constará de dos partes: habrá un examen de recuperación para cada una de las 2 partes (ER1 y/o ER2) para los estudiantes que hayan suspendido esta parte específica. En el examen de reevaluación sólo se podrá recuperar la parte teórica del curso. La nota ER_i sustituirá a la nota obtenida en el curso regular para el examen de teoría correspondiente, ET_i.
Bibliografía
Básico
-
Introduction to parallel computing
- Grama, Ananth,
Pearson Addison Wesley,
2003.
ISBN: 9780201648652
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003524559706711&context=L&vid=34CSUC_UPC:VU1 -
Introduction to high performance computing for scientists and engineers
- Hager, Georg; Wellein, Gerhard,
CRC Press,
cop. 2011.
ISBN: 9781439811924
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005256675306711&context=L&vid=34CSUC_UPC:VU1 -
Using MPI : portable parallel programming with the Message-Passing-Interface
- Gropp, William; Lusk, Ewing; Skjellum, Anthony,
MIT Press,
[2014].
ISBN: 9780262326605
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005260863706711&context=L&vid=34CSUC_UPC:VU1 -
Using OpenMP : portable shared memory parallel programming
- Chapman, Barbara; Jost, Gabriele; Pas, Ruud van der,
MIT Press,
cop. 2008.
ISBN: 9780262533027
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991003339779706711&context=L&vid=34CSUC_UPC:VU1
Complementario
-
Structured parallel programming : patterns for efficient computation
- McCool, Michael; Robison, Arch D; Reinders, James,
Elsevier/Morgan Kaufmann,
[2012].
ISBN: 9786613689603
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005250023506711&context=L&vid=34CSUC_UPC:VU1 -
Using MPI : portable parallel programming with the Message-Passing-Interface
- Gropp, William; Lusk, Ewing; Skjellum, Anthony,
MIT Press,
[2014].
ISBN: 9780262326605
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005260863706711&context=L&vid=34CSUC_UPC:VU1 -
The Science of Computing (formerly: Introduction to High-Performance Scientific Computing)
- Eijkhout, Victor ,
2022.
https://github.com/VictorEijkhout/TheArtofHPC_pdfs/blob/main/vol1/EijkhoutIntroToHPC.pdf -
Parallel Programming in MPI and OpenMP The Art of HPC, volume 2
- Eijkhout, Victor,
2022.
https://github.com/VictorEijkhout/TheArtofHPC_pdfs/blob/main/vol2/EijkhoutParallelProgramming.pdf
Web links
- Message Passing Interface (MPI): Tutorial https://computing.llnl.gov/tutorials/mpi/
- OpenMP Tutorial https://hpc-tutorials.llnl.gov/openmp/
- Introduction to Parallel Computing Tutorial https://hpc.llnl.gov/documentation/tutorials/introduction-parallel-computing-tutorial
- Slurm cluster management and job scheduling system for large and small Linux clusters https://slurm.schedmd.com/
- MPI Documents https://www.mpi-forum.org/docs/
- OpenACC high-level directives-based programming model for high performance computing for CPUs, GPUs and a variety of accelerators https://www.openacc.org/
- OpenMP API specification and Resources https://www.openmp.org/resources/