Programación y Arquitecturas Paralelas

Usted está aquí

Créditos
6
Tipos
Complementaria de especialidad (Ingeniería de Computadores)
Requisitos
  • Prerrequisito: PAR
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

  • Eduard Ayguadé Parra ( )

Horas semanales

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

Competencias

Competencias Transversales

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.

Competencias Técnicas de cada especialidad

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

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

Complementaria:

  • 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