Computación de Alto Rendimiento

Usted está aquí

Créditos
6
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos, pero tiene capacidades previas
Departamento
DAC;UAB
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

  1. 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,
  2. 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,
  3. 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,
  4. 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,
  5. 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,
  6. Capacidad de programar en MPI la versión paralela de una aplicación secuencial.
    Competencias relacionadas: K4, S7,
  7. Capacidad de programar en OpenMP la versión paralela de una aplicación secuencial.
    Competencias relacionadas: K4, S7,
  8. Capacidad de programar en OpenMP la versión paralela de una aplicación secuencial.
    Competencias relacionadas: K4, S7,
  9. 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

  1. 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
  2. Entendiendo el paralelismo
    Conceptos teóricos. Métricas de rendimiento.
  3. Programación de memoria distribuida con MPI
    Arquitecturas de memoria distribuida: programación con Message Passing Interface (MPI)
  4. 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.
  5. Programación de memoria compartida con OpenMP
    Arquitecturas de memoria compartida: programación con OpenMP
  6. Computación en clúster y sistemas de colas por lotes
    Computación en clúster y sistemas de colas por lotes: SLURM
  7. Python para computación de alto rendimiento
    Python para computación de alto rendimiento
  8. 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
Objetivos: 1 4 5 2 6 7 8
Contenidos:
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.
Objetivos: 3 4 5 6 7 8 9
Contenidos:
Teoría
0h
Problemas
28h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
45h

Examen 1ª parte

Examen 1ª parte
Objetivos: 1 4 5 2 6 9
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: 3 4 5 6 9
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: 4 5 2 7 8
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: 3 4 7 8 9
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):

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ásica:

Complementaria:

Web links

Capacidades previas

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).