Guía docente de la asignatura
(4923) PROGRAMACIÓN AVANZADA DE ARQUITECTURAS MULTINÚCLEO

Curso académico 2024/2025

Guía en inglés

  1. Identificación
    1. De la asignatura
    2. Curso Académico
      2024/2025
      Titulación
      MÁSTER UNIVERSITARIO EN NUEVAS TECNOLOGÍAS EN INFORMÁTICA
      Nombre de la asignatura
      PROGRAMACIÓN AVANZADA DE ARQUITECTURAS MULTINÚCLEO
      Código
      4923
      Curso
      PRIMERO
      Carácter
      OPTATIVA
      Número de grupos
      1
      Créditos ECTS
      6.0
      Estimación del volumen de trabajo
      150.0
      Organización temporal
      2º Cuatrimestre
      Idiomas en que se imparte
      Español
      Curso Académico 2024/2025
      Titulación

      MÁSTER UNIVERSITARIO EN NUEVAS TECNOLOGÍAS EN INFORMÁTICA

      Nombre de la asignatura PROGRAMACIÓN AVANZADA DE ARQUITECTURAS MULTINÚCLEO
      Código 4923
      Curso PRIMERO
      Carácter OPTATIVA
      Número de grupos 1
      Créditos ECTS 6.0
      Estimación del volumen de trabajo 150.0
      Organización temporal 2º Cuatrimestre
      Idiomas en que se imparte Español

    3. Del profesorado: Equipo docente
      • JIMBOREAN, ALEXANDRA Docente: GRUPO 1 Coordinación de los grupos: GRUPO 1 Coordinador de la asignatura

        Categoría

        INVESTIGADOR/A "RAMON Y CAJAL"

        Área

        ARQUITECTURA Y TECNOLOGÍA DE COMPUTADORES

        Departamento

        INGENIERÍA Y TECNOLOGÍA DE COMPUTADORES

        Correo electrónico / Página web / Tutoría electrónica

        alexandra.jimborean@um.es https://webs.um.es/alexandra.jimborean/ Tutoría electrónica:

        Teléfono, horario y lugar de atención al alumnado

        Duración:
        A
        Día:
        Miércoles
        Horario:
        11:00-14:00
        Lugar:
        No consta
        Observaciones:
        No consta
      • RAVINDRANATH REDDY, RAVIKIRAN Docente: GRUPO 1 Coordinación de los grupos:

        Categoría

        INVESTIGADOR/A PREDOCTORAL

        Área

        No consta

        Departamento

        INGENIERÍA Y TECNOLOGÍA DE COMPUTADORES

        Correo electrónico / Página web / Tutoría electrónica

        ravikiran.r.r@um.es Tutoría electrónica: No

        Teléfono, horario y lugar de atención al alumnado

      • SILLARS, EMILY MELISSA Docente: GRUPO 1 Coordinación de los grupos:

        Categoría

        CONTRATADO/A PREDOCTORAL (FPU INVES-UM)

        Área

        No consta

        Departamento

        No consta

        Correo electrónico / Página web / Tutoría electrónica

        emily.sillars@um.es Tutoría electrónica: No

        Teléfono, horario y lugar de atención al alumnado

  2. Presentación
  3. Hoy en día, los procesadores multinúcleo están presentes en todos los segmentos del mercado, desde los sistemas embedded (por ejemplo, las CPU de las consolas PlayStation3 o XBox 360) hasta los superordenadores (por ejemplo, los chips utilizados para construir BlueGene / L o BlueGene / P), pasando por los ordenadores personales (por ejemplo, los procesadores Intel Core 2 Duo / Quad o i7, o AMD Athlon 64 X2 o Phenom X3 / 4) y los servidores (por ejemplo, la gama de procesadores Intel Xeon o AMD Opteron). El curso ofrece una introducción a la programación paralela y al hardware. Se presentan varios marcos de programación paralela y se discuten sus ventajas y desventajas. El objetivo principal de este curso es que los estudiantes se familiaricen con la arquitectura, el software del sistema y las técnicas y herramientas de programación de los sistemas basados en procesadores multinúcleo más comunes que se utilizan hoy en día. Utilizando una combinación de flipped-classroom y clases presenciales, en este curso presentaremos una visión general de varios frameworks y técnicas de programación paralela:

    1 Hilos

    2 OpenMP

    3 SIMD

    4 OpenCL/CUDA

    5 Computación heterogénea

    No se espera que te conviertas en un experto en cada uno de estos frameworks al final del curso, sino que seas capaz de entender las ventajas y desventajas de los modelos y cómo abordar un proyecto que requiera paralelismo. Abordaremos cuestiones como: ¿Cuándo es posible paralelizar un algoritmo secuencial? ¿Cuándo es perjudicial/beneficioso habilitar la paralelización? ¿Cómo paralelizar el código correctamente? ¿Qué enfoque de paralelización es el más eficiente? Obtendrá experiencia práctica a través de tareas de programación, aplicando técnicas de paralelización para paralelizar un algoritmo secuencial para una simulación de multitudes con evitación de colisiones. El curso es una continuación de la programación de arquitecturas multinúcleo.

  4. Condiciones de acceso a la asignatura
    1. Incompatibilidades
    2. No constan

    3. Requisitos
    4. No constan

    5. Recomendaciones
    6. Se recomienda haber superado las asignaturas "Programación Paralela y Computación de Altas Prestaciones", "Aspectos Avanzados en Arquitecturas Multinúcleo de Propósito General" y "Programación de Arquitecturas Multinúcleo".

      Además, sería conveniente que el alumno tenga conocimientos generales sobre programación concurrente y programación en lenguaje C++.

  5. Competencias
    1. Competencias básicas
      • CB6: Poseer y comprender conocimientos que aporten una base u oportunidad de ser originales en el desarrollo y/o aplicación de ideas, a menudo en un contexto de investigación
      • CB7: Que los estudiantes sepan aplicar los conocimientos adquiridos y su capacidad de resolución de problemas en entornos nuevos o poco conocidos dentro de contextos más amplios (o multidisciplinares) relacionados con su área de estudio
      • CB8: Que los estudiantes sean capaces de integrar conocimientos y enfrentarse a la complejidad de formular juicios a partir de una información que, siendo incompleta o limitada, incluya reflexiones sobre las responsabilidades sociales y éticas vinculadas a la aplicación de sus conocimientos y juicios
      • CB9: Que los estudiantes sepan comunicar sus conclusiones y los conocimientos y razones últimas que las sustentan a públicos especializados y no especializados de un modo claro y sin ambigüedades
      • CB10: Que los estudiantes posean las habilidades de aprendizaje que les permitan continuar estudiando de un modo que habrá de ser en gran medida autodirigido o autónomo.

    2. Competencias de la titulación
      • CGT1: Capacidad para comprender y aplicar métodos y técnicas de investigación en el ámbito de la Ingeniería Informática.
      • CGT2: Capacidad para proyectar, calcular y diseñar productos, procesos e instalaciones en todos los ámbitos de la ingeniería informática.
      • CGT3: Capacidad para dirigir, planificar y supervisar equipos multidisciplinares.

    3. Competencias transversales y de materia
      • CAA6 Capacidad para analizar, diseñar, desarrollar, depurar y optimizar aplicaciones paralelas explotando el modelo de programación y la arquitectura subyacentes
      • CAA5 Capacidad para identificar dado un problema sus necesidades computacionales y las técnicas computacionales de altas prestaciones más apropiadas para su resolución
      • CAA7 Capacidad para utilizar y desarrollar metodologías, métodos y técnicas de investigación en los campos de las Arquitecturas de Altas Prestaciones y de la Supercomputación, siendo capaces de innovar

  6. Contenidos
    1. Teoría
    2. Tema 1: Introducción a las arquitecturas paralelas y a la programación paralela.

      Tema 2: Programación con hilos y OpenMP

      Tema 3: Vectorización: Instrucción única y datos múltiples (SIMD)

      Tema 4: Programación en CUDA/OpenCL

      Tema 5: Mecanismos de sincronización

      Tema 6: Programación sin bloqueos

      Tema 7: Memorias CUDA

      Tema 8: Programación heterogénea

      Tema 9: Programación asíncrona heterogénea

    3. Prácticas
      • Práctica 1: Montaje e introducción

        Durante el primer laboratorio (Lab 0) se presentará el proyecto de Simulación de Multitudes y se le guiará a través del código base. Para su comodidad, se ha instalado todo el software necesario en los ordenadores del laboratorio. Compruebe que todos los frameworks están correctamente instalados y que el código compila y se ejecuta correctamente. El proyecto de simulación de multitudes se dividirá en varias tareas en las que trabajarás en grupos de dos/tres, que concluirán con una presentación final, al final del curso. Empezaréis a trabajar juntos ya durante el Laboratorio 0 en la Asignación 1 (A1) para transformar la implementación secuencial en una versión paralela, utilizando hilos y OpenMP.

        Relacionado con:
        • Tema 1: Introducción a las arquitecturas paralelas y a la programación paralela.
        • Tema 2: Programación con hilos y OpenMP
      • Práctica 2: Encontrar cuellos de botella y paralelizar con PThreads y OpenMP

        Presentar A1: paralelización de partes de la aplicación Crowd Simulation utilizando librerías dedicadas (threads y OpenMP). Empezar a trabajar en A2: paralelización de partes de la aplicación Crowd Simulation utilizando técnicas básicas de vectorización (SIMD) para CPUs y CUDA/OpenCL para GPUs.

        Relacionado con:
        • Tema 2: Programación con hilos y OpenMP
        • Tema 3: Vectorización: Instrucción única y datos múltiples (SIMD)
        • Tema 4: Programación en CUDA/OpenCL
      • Práctica 3: Paralelización con SIMD y CUDA/OpenCL

        Asignación A2: paralelización de partes de la aplicación Crowd Simulation utilizando técnicas básicas de vectorización (SIMD) para CPUs y CUDA para GPUs

        Relacionado con:
        • Tema 3: Vectorización: Instrucción única y datos múltiples (SIMD)
        • Tema 4: Programación en CUDA/OpenCL
      • Práctica 4: Paralelización con SIMD y CUDA/OpenCL (2)

        Presentar A2. Empezar a trabajar en la Asignación A3 sobre cómo evitar colisiones utilizando mecanismos de sincronización.

        Relacionado con:
        • Tema 3: Vectorización: Instrucción única y datos múltiples (SIMD)
        • Tema 4: Programación en CUDA/OpenCL
      • Práctica 5: Paralelización basada en tareas, sincronización, sin bloqueos

        Asignación A3: Implementar un algoritmo de evitación de colisiones para la simulación de multitudes, utilizando tareas y construcciones de sincronización dedicadas. Se pueden obtener puntos de bonificación por una versión sin bloqueo de la implementación.

        Relacionado con:
        • Tema 5: Mecanismos de sincronización
        • Tema 6: Programación sin bloqueos
      • Práctica 6: Paralelización basada en tareas, sincronización, sin bloqueo (2)

        Empezar a trabajar en A4 sobre la combinación de CPU y GPU para la simulación de multitudes con evitación de colisiones de A3.

        Relacionado con:
        • Tema 4: Programación en CUDA/OpenCL
        • Tema 5: Mecanismos de sincronización
        • Tema 6: Programación sin bloqueos
        • Tema 7: Memorias CUDA
        • Tema 8: Programación heterogénea
        • Tema 9: Programación asíncrona heterogénea
      • Práctica 7: Computación heterogénea

        Tarea A4: Paraleliza partes seleccionadas del algoritmo utilizando CUDA/OpenCL y ejecútalas en la GPU al mismo tiempo que el manejo de colisiones de A3 se ejecuta en la CPU. Evita las condiciones de carrera.

        Relacionado con:
        • Tema 4: Programación en CUDA/OpenCL
        • Tema 7: Memorias CUDA
        • Tema 8: Programación heterogénea
        • Tema 9: Programación asíncrona heterogénea
      • Práctica 8: Computación heterogénea (2)

        Presenta A4.

        Relacionado con:
        • Tema 7: Memorias CUDA
        • Tema 8: Programación heterogénea
        • Tema 9: Programación asíncrona heterogénea
      • Práctica 9: Presentar asignaciones

        Presentar A1, A2, A3 o A4 en caso de que no se hayan superado con éxito en el laboratorio dedicado (por ejemplo, si el profesor proporcionó feedback que debía integrarse para que la tarea se considerara completa).

        Relacionado con:
        • Tema 1: Introducción a las arquitecturas paralelas y a la programación paralela.
        • Tema 2: Programación con hilos y OpenMP
        • Tema 3: Vectorización: Instrucción única y datos múltiples (SIMD)
        • Tema 4: Programación en CUDA/OpenCL
        • Tema 5: Mecanismos de sincronización
        • Tema 6: Programación sin bloqueos
        • Tema 7: Memorias CUDA
        • Tema 8: Programación heterogénea
        • Tema 9: Programación asíncrona heterogénea

  7. Actividades Formativas
  8. Actividad Formativa Metodología Horas Presencialidad
    A1: Actividades con grupo grande de alumnos entre las que se encuentran la presentación en el aula de los conceptos propios de la materia mediante metodología expositiva con lecciones magistrales participativas y medios audiovisuales. También se contemplan en este grupo las actividades de evaluación teórico prácticas.

    La parte teórica del curso se explicará mediante clases participativas y medios audiovisuales. Para que la participación en clase sea efectiva, se requiere que los alumnos se preparen antes de las clases y participen en los ejercicios y preguntas abiertas que se discutan en clase.

    17.5 40.0
    A2: Actividades con grupo mediano en el aula de resolución de problemas, seminarios, charlas, ejercicios basados en el aprendizaje orientado a proyectos, estudios de casos, exposición y discusión de trabajos relativas al seguimiento individual y/o grupal de adquisición de las competencias.

    Se realizarán ejercicios teóricos y prácticos en clase con la participación de los alumnos. Además, los alumnos deberán realizar más ejercicios por su cuenta. Para ello, se les proporcionará una lista de ejercicios para cada tema. 

    12.5 12.5
    A3: Actividades con grupo pequeño en el laboratorio relacionadas con la componente práctica de las asignaturas, desarrollo de trabajos con equipo técnico especializado, desarrollo de programas, etc.

    Durante los laboratorios, los alumnos trabajarán en tareas teórico-prácticas de forma autónoma, guiados y ayudados por el profesor.

    30.0 37.5
    A5: Estudio y trabajo autónomo orientado a la asimilación de contenidos, realización de problemas, ejercicios o redacción de informes técnicos o memorias descriptivas, desarrollo de proyectos o prácticas individuales o en grupo, preparación de exámenes, presentaciones y defensa de trabajos.

    Trabajo autónomo.

    90.0 0.0
    Totales 150,00

  9. Horario de la asignatura
  10. https://www.um.es/web/estudios/masteres/tecnologias-informatica/2024-25#horarios

  11. Sistemas de Evaluación
  12. Identificador Denominación del instrumento de evaluación Criterios de Valoración Ponderación
    IE1 Examen teórico-práctico: En este instrumento incluimos desde el tradicional examen escrito o tipo test hasta los exámenes basados en resolución de problemas, pasando por los de tipo mixto que incluyen cuestiones cortas o de desarrollo teórico junto con pequeños problemas. También se incluye aquí la consideración de la participación activa del alumno en clase, la entrega de ejercicios o realización de pequeños trabajos escritos y presentaciones.

    La evaluación se adapta a los resultados de aprendizaje del curso. Se espera que los estudiantes demuestren que han adquirido las habilidades enumeradas en el resultado de aprendizaje y serán evaluados en base al proyecto de simulación de multitudes dividido en cuatro tareas (y resuelto en grupos durante los laboratorios semanales). Además de la presentación de cada tarea durante los laboratorios, habrá una presentación oral final y un informe final. Al final de la presentación oral de cada equipo, se harán preguntas a los miembros del equipo sobre cómo se han aplicado los temas enseñados en el curso para paralelizar la Simulación de Multitudes con Evitación de Colisiones.

    1. Construir algoritmos paralelos, es decir, identificar el paralelismo en un algoritmo dado, implementar este paralelismo e identificar los factores que limitan el paralelismo en un programa o algoritmo.

    - Dado un algoritmo secuencial, transformarlo en un algoritmo paralelo, exponiendo al menos una de las oportunidades de paralelización: paralelismo de datos, paralelismo de tareas, vectorización. Explique la elección de la paralelización y razone por qué no son posibles otras formas de paralelismo

    - Identificar todas las fuentes de paralelismo, incluidas las combinaciones de paralelismo de datos, paralelismo de tareas y vectorización.

    - Identificar los cuellos de botella y los factores que limitan el paralelismo (por ejemplo, las dependencias) y las soluciones para superar dichas limitaciones (por ejemplo, una nueva programación de tareas).

    - Dado un determinado algoritmo razonar cuál de los paradigmas de programación paralela es el más adecuado, discutiendo las ventajas e inconvenientes de cada método de paralelización.

    2. Explicar las cuestiones clave de la programación paralela, como la distribución de datos, el equilibrio de la carga, el bloqueo y la sincronización.

    - Identificar los cuellos de botella del rendimiento, como la distribución de datos y el equilibrio de la carga, y sugerir soluciones para reducirlos; por ejemplo, tareas de granularidad más fina o más gruesa, diferentes políticas de programación

    - Diseñar, implementar y evaluar esas soluciones avanzadas para reducir o aliviar los cuellos de botella de rendimiento.

    - Razonar sobre las características de los algoritmos que conducen a dichos cuellos de botella de rendimiento y cuáles son las elecciones óptimas en cuanto a los paradigmas de programación paralela, granularidad, distribución, sincronización, etc.

    3. Garantizar la corrección de la ejecución, utilizando métodos de sincronización adecuados.

    4. Comparar varios marcos de programación paralela en términos de rendimiento y eficiencia de desarrollo.

    50.0
    IE2 Informe técnico: En este instrumento incluimos los resultados de actividades prácticas, o de laboratorio junto con sus memorias descriptivas, los resúmenes del estado del arte o memorias de investigación sobre temas concretos. Y la posibilidad de realizar entrevistas personales o presentaciones de los trabajos realizados también entran en esta categoría.

    El proyecto de simulación de multitudes se divide en cuatro tareas, resueltas en equipo durante los laboratorios de prácticas semanales. Cada una de las cuatro tareas se demostrará durante los laboratorios. Además de la corrección, se tendrá en cuenta el diseño de la solución propuesta. Se espera que cada estudiante del equipo responda a las preguntas del profesor y demuestre su participación en la resolución/ejecución de la tarea.

    50.0

  13. Fechas de exámenes
  14. https://www.um.es/web/estudios/masteres/tecnologias-informatica/2024-25#examenes

  15. Resultados del Aprendizaje
  16. Al finalizar el curso, el alumno deberá ser capaz de:

    • Explicar las cuestiones clave de la programación paralela, incluyendo la distribución de datos, el equilibrio de carga, el bloqueo y la sincronización, las estructuras de datos concurrentes básicas.
    • Construir algoritmos paralelos, es decir, identificar el paralelismo en un algoritmo dado, implementar este paralelismo e identificar los factores que limitan el paralelismo en un programa o algoritmo.
    • Comparar varios marcos de programación paralela en términos de rendimiento y eficiencia de desarrollo.
    • Utilizar varios marcos de programación paralela de alto rendimiento y elegir un marco adecuado en determinadas circunstancias, como la arquitectura del ordenador, la aplicación y la eficiencia.
    • Utilizar patrones de programación paralela para desarrollar aplicaciones multihilo en arquitecturas multinúcleo de propósito general y en GPUS.
    • Utilizar bibliotecas comunes de apoyo a la construcción de aplicaciones multihilo.
    • Depurar aplicaciones multihilo con técnicas y herramientas específicas.

  17. Bibliografía
  18. Grupo: GRUPO 1

    Bibliografía básica

    No constan

    Bibliografía complementaria

  19. Observaciones
  20. Detalles adicionales sobre la evaluación

    Los alumnos sólo podrán ser evaluados en la presentación final del proyecto si han presentado y superado cada una de las cuatro tareas durante los laboratorios semanales.

    Objetivos de Desarrollo Sostenible

    Esta asignatura no se encuentra vinculada de forma directa con los Objetivos de Desarrollo Sostenible.

    NECESIDADES EDUCATIVAS ESPECIALES

    Aquellos estudiantes con discapacidad o necesidades educativas especiales podrán dirigirse al Servicio de Atención a la Diversidad y Voluntariado (ADYV - https://www.um.es/adyv) para recibir orientación sobre un mejor aprovechamiento de su proceso formativo y, en su caso, la adopción de medidas de equiparación y de mejora para la inclusión, en virtud de la Resolución Rectoral R-358/2016. El tratamiento de la información sobre este alumnado, en cumplimiento con la LOPD, es de estricta confidencialidad.

    REGLAMENTO DE EVALUACIÓN DE ESTUDIANTES

    El artículo 8.6 del Reglamento de Evaluación de Estudiantes (REVA) prevé que "salvo en el caso de actividades definidas como obligatorias en la guía docente, si el o la estudiante no puede seguir el proceso de evaluación continua por circunstancias sobrevenidas debidamente justificadas, tendrá derecho a realizar una prueba global".

    Se recuerda asimismo que el artículo 22.1 del Reglamento de Evaluación de Estudiantes (REVA) estipula que "el o la estudiante que se valga de conductas fraudulentas, incluida la indebida atribución de identidad o autoría, o esté en posesión de medios o instrumentos que faciliten dichas conductas, obtendrá la calificación de cero en el procedimiento de evaluación y, en su caso, podrá ser objeto de sanción, previa apertura de expediente disciplinario".