Pasar al contenido principal

Programación y Arquitecturas Paralelas

Créditos
6
Tipos
Complementaria de especialidad (Ingeniería de Computadores)
Requisitos
Departamento
AC
En esta asignatura se profundiza en los temas de paralelismo estudiados en la asignatura PAR. En concreto se trabajan tres aspectos: 1) implementación de un modelo de programación de memoria compartida tipo OpenMP, haciendo uso de los mecanismos ofrecidos por una librería de threads de bajo nivel (pthreads) y la generación de código por parte de un compilador (gcc); 2) diseño de un clúster de memoria distribuida a partir de sus componentes básicos: nodos multiprocesador/multicore, aceleradores, interfaces de red y otros componentes para crear la red de interconexión; y 3) estudiar un modelo de programación para arquitecturas cluster (MPI).

Profesorado

Responsable

Horas semanales

Teoría
1
Problemas
1
Laboratorio
2
Aprendizaje dirigido
0
Aprendizaje autónomo
6

Competencias

Actitud frente al trabajo

  • G8 [Avaluable] - Tener motivación para la realización profesional y para afrontar nuevos retos, así como una visión amplia de las posibilidades de la carrera profesional en el ámbito de la Ingeniería en Informática. Tener motivación por la calidad y la mejora continua, y actuar con rigor en el desarrollo profesional. Capacidad de adaptación a los cambios organizativos o tecnológicos. Capacidad de trabajar en situaciones de falta de información y/o con restricciones temporales y/o de recursos.
    • G8.3 - Tener motivación para el desarrollo profesional y para afrontar nuevos retos. Tener motivación para la mejora continua. Disponer de capacidad de trabajo en situaciones de falta de información.
  • Especialidad ingeniería de computadores

  • CEC2 - Analizar y evaluar arquitecturas de computadores incluyendo plataformas paralelas y distribuidas, y desarrollar y optimizar software para dichas plataformas.
    • CEC2.1 - Analizar, evaluar, seleccionar y configurar plataformas hardware para el desarrollo y la ejecución de aplicaciones y servicios informáticos.
    • CEC2.2 - Programar considerando la arquitectura hardware, tanto en ensamblador como en alto nivel.
  • Competencias técnicas comunes

  • CT8 - Planificar, concebir, desplegar y dirigir proyectos, servicios y sistemas informáticos en todos los ámbitos, liderando su puesta en marcha, su mejora continua y valorando su impacto económico y social
    • CT8.7 - Controlar versiones y configuraciones del proyecto.
  • Objetivos

    1. Capacidad de escribir y entender programas paralelos que utilicen la interfaz de bajo nivel Pthreads.
      Competencias relacionadas: CEC2.2,
    2. Capacidad de implementar las funcionalidades básicas en una librería que de soporte a la ejecución paralela de aplicaciones en una arquitectura de memoria compartida.
      Competencias relacionadas: CT8.7, CEC2.2, G8.3,
    3. Capacidad de entender los componentes básicos de una arquitectura multiprocesador, así como realizar un diseño sobre papel que obedezca a determinados criterios de diseño.
      Competencias relacionadas: CEC2.1, G8.3,
    4. Capacidad de escribir aplicaciones sencillas usando el modelo de programación MPI, evaluar su rendimiento, y detectar las partes críticas que limitan la escalabilidad.
      Competencias relacionadas: CEC2.2, G8.3,
    5. Capacidad de evaluar la calidad de una solución propuesta a un problema específico
      Competencias relacionadas: G8.3,
    6. Capacidad de completar o ampliar los conocimientos adquiridos de forma autónoma y realizar un trabajo específico aunque el enunciado sea incompleto, o falte información relevante para su implementación
      Competencias relacionadas: G8.3,

    Contenidos

    1. MPI: programación paralela para arquitecturas de memoria distribuida
      En este tema aprenderemos a programar aplicaciones paralelas usando MPI, un modelo de programación basado en paso de mensajes para arquitecturas clúster de memoria distribuida.
    2. Programación paralela con Pthreads
      Introducción a las funcionalidades básicas que ofrece la biblioteca de soporte de bajo nivel Pthreads
    3. Implementación de un modelo de programación de memoria compartida: threads y sincronización, reparto de trabajo y modelo de tareas
      En este tema aprenderemos como diseñar e implementar una librería que de soporte a la ejecución de programas paralelos en OpenMP, en concreto los mecanismos relacionados con la gestión de threads y sincronización, el reparto de trabajo en los OpenMP "worksharing constructs" y el modelo de ejecución basado en tareas.
    4. Componentes y diseño de una arquitectura cluster
      En este tema se presentarán los principales componentes que forman una arquitectura clúster y se realizará un diseño que atienda a determinados compromisos de potencia de cálculo, consumo energético i coste.

    Actividades

    Actividad Acto evaluativo


    Programación paralela con paso de mensajes: MPI

    -
    Objetivos: 4 5 6
    Contenidos:
    Teoría
    5h
    Problemas
    5h
    Laboratorio
    12h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    36h

    POSIX threads (Pthreads)


    Objetivos: 1
    Contenidos:
    Teoría
    3h
    Problemas
    3h
    Laboratorio
    2h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    12h

    Implementación de un modelo de programación de memoria compartida

    -
    Objetivos: 1 2 5 6
    Contenidos:
    Teoría
    2h
    Problemas
    2h
    Laboratorio
    16h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    30h

    Componentes y diseño de una arquitectura clúster

    -
    Objetivos: 3 6
    Contenidos:
    Teoría
    3h
    Problemas
    5h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    12h

    Examen Final


    Objetivos: 1 2 3 4
    Semana: 15 (Fuera de horario lectivo)
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    Metodología docente

    Las clases de teoría introducen todos los conocimientos, las técnicas, y los conceptos necesarios, usando ejemplos de código reales o pseudo-código. Estas clases de teoría se complementan con clases de problemas en las que se plantearan y resolverán ejercicios prácticos. En el laboratorio se ponen en práctica los contenidos teóricos, y se realizará una evaluación de comportamiento y rendimiento de las soluciones implementadas.

    La asignatura contempla que parte de los contenidos teóricos, o los enunciados de laboratorio, los deberá desarrollar el estudiante de forma autónoma.

    El curso está principalmente centrado en las arquitecturas clúster, utilizando el lenguaje de programación C, la librería Pthreads y los modelos de programación OpenMP y MPI.

    Método de evaluación

    La nota de la asignatura se calcula a partir de 3 notas:
    - nota de contenidos teóricos;
    - nota de laboratorio;
    - nota de autonomía y motivación.

    La nota de contenidos teóricos (T) se obtiene a partir de las notas obtenidas en el examen parcial (50%) y el examen final (50%). Estas pruebas podrán substituirse por la realización, entrega y discusión de un mínimo del 70% de los problemas pedidos durante las clases de teoría.

    La nota de laboratorio (L) se obtendrá a partir de las notas de las entregas y el seguimiento de las sesiones de prácticas por parte del profesor.

    La nota de autonomía y motivación (A) evalúa la capacidad del alumno para enfrentarse a situaciones de falta de información y la motivación para ir más allá de lo que se pide o explorar en temas adicionales. Se obtiene a partir de: 1) los resultados de aquellas prácticas en las que se requiera buscar información adicional y/o realizar partes opcionales/libres; y 2) del diseño sobre papel de un clúster para HPC.

    La nota final se calcula F = T * 0.4 + L * 0.4 + A * 0.2.

    Bibliografía

    Básico

    Complementario

    • Unit 1: POSIX Threads (Pthreads) programming - Ayguadé, Eduard, Departament d'Arquitectura de Computadors, 2021.
    • Unit 2: Build (on paper) your own cluster architecture - Ayguadé, Eduard, Departament d'Arquitectura de Computadors, 2021.
    • Unit 3: MPI (Message Passing Interface) - Ayguadé, Eduard, Departament d'Arquitectura de Computadors, 2021.
    • Laboratory assignments: Lab 1 - OpenMP parallelisation of Eratosthenes Sieve - Ayguadé, Eduard, Departament d'Arquitecture de Computadors, 2023.
    • Laboratory assignments: Lab2 - Implementing a minimal OpenMP runtime - Ayguadé, Eduard, Departament d'Arquitectura de Computadors, 2021.
    • Laboratory assignments: Lab 3 - Performance characteritzation of HPC clusters - Ayguadé, Eduard ; Àlvarez, Lluc, Departament d'Arquitectura de Computadors, 2023.
    • Laboratory assignments: Lab 4 - Heat equation using MPI - Ayguadé, Eduard ; Àlvarez, Lluc, Departament d'Arquitectura de Computadors, 2023.

    Web links

    Capacidades previas

    Definidas por pre-requisitos de la asignatura