HPC es una asignatura obligatoria del plan de estudios del grado de Bioinformática que cubre los principios básicos de la computación de alto rendimiento y la programación paralela. El curso explora principalmente sistemas paralelos basados en arquitecturas de microprocesadores basados en caché de uso general, así como aceleradores modernos como las GPU. El curso incluye conceptos básicos sobre la medida del rendimiento, paradigmas y herramientas de programación y algunos algoritmos paralelos comunes.
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 (
)
Otros
Christian Guzman Ruiz (
)
Miquel Angel Senar Rosell (
)
Horas semanales
Teoría
2
Problemas
2
Laboratorio
0
Aprendizaje dirigido
0
Aprendizaje autónomo
6
Resultados de aprendizaje
Resultados de aprendizaje
Conocimientos
K3 - Identificar los fundamentos matemáticos, las teorías informáticas, los esquemas algorítmicos y los principios de organización de la información aplicables al modelado de sistemas biológicos y a la resolución eficiente de problemas bioinformáticos mediante el diseño de herramientas computacionales.
K4 - Integrar los conceptos ofrecidos por los lenguajes de programación de mayor uso en el ámbito de las Ciencias de la Vida para modelar y optimizar estructuras de datos y construir algoritmos eficientes, relacionándolos entre sí y con sus casos de aplicación.
Habilidades
S7 - Implementar métodos de programación y análisis de datos orientados a partir de la elaboración de hipótesis de trabajo, dentro del área de estudio.
S8 - Enfrentarse a la toma de decisiones, y defenderlas con argumentos, en la resolución de problemas de las áreas de biología, así como, dentro de los ámbitos adecuados, las ciencias de la salud, las ciencias de la computación y las ciencias experimentales.
Competencias
C6 - Detectar deficiencias en el propio conocimiento y superarlas mediante la reflexión crítica y la elección de la mejor actuación para ampliar este conocimiento.
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
ActividadActo 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
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.
Examen 1ª parte Objetivos:145269 Semana:
8 (Fuera de horario lectivo)
Teoría
1.5h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Examen Laboratorio 1ª parte (LE1)
Examen Laboratorio 1ª parte (LE1) Objetivos:34569 Semana:
8 (Fuera de horario lectivo)
Teoría
0h
Problemas
1h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Examen 2ª parte
Examen 2ª parte Objetivos:45278 Semana:
16 (Fuera de horario lectivo)
Teoría
1.5h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
Examen Laboratorio 2ª parte (LE2)
Examen Laboratorio 2ª parte (LE2) Objetivos:34789 Semana:
16 (Fuera de horario lectivo)
Teoría
0h
Problemas
1h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
0h
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):
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.
OpenACC high-level directives-based programming model for high performance computing for CPUs, GPUs and a variety of accelerators https://www.openacc.org/
Para completar este curso satisfactoriamente, los participantes deben poseer una sólida base en programación imperativa secuencial y estructuras de datos fundamentales. Es imprescindible conocer el lenguaje de programación C, con especial énfasis en punteros y gestión dinámica de memoria. Se requiere familiaridad con la línea de comandos de Linux/Unix y las herramientas básicas de compilación para desenvolverse eficazmente en el entorno de laboratorio. Además, los estudiantes deben saber realizar la manipulación de expresiones matemáticas, ya que esta habilidad es necesaria para comprender los conceptos teóricos y los modelos de rendimiento presentados en las sesiones. Sin embargo, no se requieren conocimientos previos de programación paralela (MPI, OpenMP u OpenACC).