Créditos ECTS Créditos ECTS: 4.5
Horas ECTS Criterios/Memorias Horas de Tutorías: 2 Clase Expositiva: 10 Clase Interactiva: 30 Total: 42
Lenguas de uso Castellano, Gallego
Tipo: Materia Ordinaria Grado RD 1393/2007 - 822/2021
Departamentos: Electrónica y Computación
Áreas: Arquitectura y Tecnología de Ordenadores
Centro Escuela Técnica Superior de Ingeniería
Convocatoria: Segundo semestre
Docencia: Sin docencia (Extinguida)
Matrícula: No matriculable
El objetivo principal de esta asignatura es preparar al alumnado para las necesidades de diseño y creación de código eficiente capaz de explotar al máximo las capacidades del hardware disponible en sistemas multinúcleo y multiprocesador, así como en sistemas manycore, disponibles en la actualidad y en un futuro próximo. Partiendo de la descripción de las arquitecturas multinúcleo, analizaremos diferentes técnicas para el diseño de algoritmos paralelos y nos centraremos en mecanismos de programación de sistemas de memoria compartida y manycore.
Tema 1: Sistemas multicore y manycore
Introducción a arquitecturas de computación paralela
Sistemas de memoria compartida y distribuida
Sistemas multicore y manycore
Tema 2: Caracterización del rendimiento
Escalamiento y ley de Amdahl
Ganancia en velocidad, isoeficiencia
Tema 3: Introducción a la programación paralela
Programación paralela para sistemas de memoria compartida: OpenMP
Programación paralela para sistemas manycore: CUDA
Tema 3: Técnicas de adaptación de aplicaciones a sistemas multinúcleo y multiprocesador
Análisis del problema
Descomposición del problema guiada por tareas y datos
Comunicación y sincronización
Dependencia de datos
Granularidad
Tema 4: Técnicas de optimización del rendimiento
Las prácticas se pueden realizar en los ordenadores del aula de informática, pero deben ejecutarse en los y nodos del CESGA para la parte de CUDA. Algunas de las prácticas también se pueden programar en los ordenadores personales de los alumnos/as.
Bloque 1: Programación básica con OpenMP y CUDA. El objetivo es adquirir los conocimientos básicos para la realización de programas paralelos en sistemas de memoria compartida y manycore.
Bloque 2: Programación paralela de algoritmos básicos. El objetivo es aplicar las metodologías de programación paralela vistas en clase utilizando OpenMP y CUDA. En este bloque haremos un estudio del rendimiento.
Bloque 3: Proyecto de programación paralela. El objetivo es paralelizar una aplicación de cierta complejidad aplicando las metodologías vistas en clase y hacer un estudio del escalamiento dependiendo del número de hilos y tamaño del problema (caracterización del rendimiento) usando OpenMP y comparar los resultados con una versión paralela en GPU. Este proyecto se puede realizar en grupos.
Básica
T.G. Mattson, B.A. Sanders and B.L. Massingill, Patterns for Parallel Programming, Addison-Wesley, 2005.
Esta es la referencia fundamental para la base teórica de programación paralela mediante una metodología basada en patrones de concurrencia que sirve de soporte para los contenidos de la materia.
P. Pacheco, "An Introduction to Parallel Programming", Morgan Kaufmann Publishers, 2011.
Libro de introducción a la programación paralela que explica cómo desarrollar programas paralelos utilizando entre otros el modelo de programación OpenMP.
Kirk, D. B., & Wen-mei, W. H. (2013). Programming massively parallel processors: a hands-on approach. Morgan Kaufmann Publishers.
Conceptos básicos de programación en paralelo y arquitectura de la GPU. Explora en detalle varias técnicas para la construcción de programas paralelos en GPU.
Complementaria
Schmidt, Bertil, et al. Parallel programming: concepts and practice. Morgan Kaufmann, 2017.
Este libro cubre aspectos básicos de programación paralela y presenta, entre otros, los modelos de programación de OpenMP y la arquitectura paralela de las GPUs de NVIDIA.
Cook, Shane. CUDA programming: a developer's guide to parallel computing with GPUs. Newnes, 2012.
Libro específico de programación en GPU que profundiza en esta arquitectura y abarca temas de diseño de sistemas de computación basados en GPU.
En caso de cambiar a un escenario de distanciamiento (escenario 2) o de cierre de las instalaciones (escenario 3) ver el Plan de contingencia en el apartado Observaciones para conocer las adaptaciones en el acceso a la bibliografía.
Contribuir a alcanzar las competencias recogidas en la memoria del título de Grado en Ingeniería Informática en la USC (CG4, CG9, TR1, TR2, TR3, RI1, RI6, RI7, RI8, RI14).
CG4 - Capacidad para definir, evaluar y seleccionar plataformas hardware y software para el desarrollo y la ejecución de sistemas, servicios y aplicaciones informáticas, de acuerdo con los conocimientos adquiridos según lo establecido en el apartado 5 de dicho acuerdo.
CG9 - Capacidad para resolver problemas con iniciativa, toma de decisiones, autonomía y creatividad. Capacidad para saber comunicar y transmitir los conocimientos, habilidades y destrezas de la profesión de Ingeniero Técnico en Informática.
TR1 - Instrumentales: Capacidad de análisis y síntesis. Capacidad de organización y planificación. Comunicación oral y escrita en gallego, castellano e inglés. Capacidad de gestión de la información. Resolución de problemas. Toma de decisiones.
TR2 - Personales: Trabajo en equipo. Trabajo en un equipo multidisciplinar y multilingüe. Habilidades en las relaciones interpersonales. Razonamiento crítico. Compromiso ético.
TR3 - Sistémicas: Aprendizaje autónomo. Adaptación a nuevas situaciones. Creatividad. Iniciativa y espíritu emprendedor. Motivación por la calidad. Sensibilidad hacia temas medioambientales.
RI1 - Capacidad para diseñar, desarrollar, seleccionar y evaluar aplicaciones y sistemas informáticos, asegurando su fiabilidad, seguridad y calidad, conforme a principios éticos y a la legislación y normativa vigente.
RI6 - Conocimiento y aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y complejidad de los algoritmos propuestos.
RI7 - Conocimiento, diseño y utilización de forma eficiente de los tipos y estructuras de datos más adecuados a la resolución de un problema.
RI8 - Capacidad para analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados.
RI14 - Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real.
Competencias asociadas al módulo de programación dentro del Grado:
Saber calcular la complejidad computacional de un algoritmo y evaluar la implementación más adecuada de un algoritmo determinado de acuerdo con los recursos disponibles (memoria y tiempo de ejecución).
Conocer diferentes paradigmas de programación y saber escoger el más apropiado en cada situación.
Esta materia tiene un enfoque práctico donde el aprendizaje es a través de ejercicios y un proyecto de programación.
Clases magistrales: en estas clases el profesor expondrá de modo resumido los contenidos teóricos que sirven de base para las clases prácticas de programación buscando un ambiente participativo por parte del alumnado mediante la exposición de algunos temas de teoría.
Clases prácticas: estas clases estarán dedicadas a desarrollar el programa de prácticas de la materia. Básicamente consistirán en la realización de programas paralelos de complejidad creciente hasta completar un proyecto completo de programación paralela que se podrá realizar en grupo. El alumnado será el elemento activo en estas clases, y el profesor guiará el aprendizaje ante las cuestiones y dudas planteadas. Los enunciados de las prácticas, así como el material de ayuda estarán disponibles en el campus virtual de la USC.
Clases de discusión: En estas clases se expondrán los proyectos realizados, discutiendo su implementación a diferentes niveles y, el grado de escalamiento de la aplicación.
Las tutorías podrán ser presenciales (horario acordado con el alumnado o fijado por el centro), a través de correo electrónico o a través del campus virtual.
En caso de cambiar a un escenario de distanciamiento (escenario 2) o de cierre de las instalaciones (escenario 3) ver Plan de contingencia en el apartado Observaciones para conocer las adaptaciones en la metodología de enseñanza.
Esta asignatura aplica un sistema de evaluación continua formativa basado en la participación del alumnado, desarrollo de prácticas y proyecto de programación paralela a desarrollar durante el curso. Las tutorías, discusiones en clase y la interacción en las clases prácticas permitirán al profesor conocer el grado de asimilación de la materia que van obteniendo los/las alumnos/as durante el curso.
Para los casos de realización fraudulenta de ejercicios o pruebas será de aplicación lo recogido en la Normativa de evaluación del rendimiento académico de los estudiantes y de revisión de calificaciones.
En caso de cambiar a un escenario de distanciamiento (escenario 2) o de cierre de las instalaciones (escenario 3) ver el Plan de contingencia en el apartado Observaciones para conocer las adaptaciones en el sistema de evaluación.
Oportunidad ordinaria
Participación en el desarrollo de las clases teóricas (10%). Adquisición de conocimientos básicos en OpenMP y CUDA (20%). Realización de programas paralelos en OpenMP y CUDA (30%). Proyecto de programación paralela (40%).
No existe una nota mínima en participación ni en prácticas, excepto en el proyecto de programación paralela que debe superarse con un aprobado (5 puntos sobre 10).
No se conservarán las notas de cursos anteriores.
Oportunidad de recuperación y convocatoria extraordinaria
Mismos criterios que en la oportunidad ordinaria. La fecha límite de entrega de las prácticas y proyecto de programación paralela será la fecha oficial del examen de segunda oportunidad. El/La alumno/a hará una presentación del proyecto el día del examen.
Condiciones para calificación de no presentado: no presentar ninguna práctica ni proyecto.
El trabajo personal del alumnado en una asignatura de 4,5 créditos ECTS debe ser de unas 70,5 horas dedicadas a consulta de bibliografía, estudio autónomo, desarrollo de las actividades programadas y preparación y presentación de trabajos.
La dedicación en tiempo puede variar a lo largo del cuatrimestre, en especial en la etapa de elaboración y presentación de resultados de prácticas y proyecto.
La materia está diseñada para que el/la alumno/a participe activamente y de manera regular durante su desarrollo.
Requisitos previos recomendados: Programación I, Programación II, Fundamentos de Computadores, Arquitectura de Computadores, Sistemas Operativos I, Sistemas Operativos II. También resulta interesante tener cursada las materias del grado Fundamentos de Sistemas Paralelos.
La entrega de los materiales del curso y las comunicaciones electrónicas con el alumnado se llevará a cabo con las herramientas del campus virtual de la asignatura.
Plan de contingencia
Metodología de enseñanza. En caso de cambiar a un escenario de distanciamiento (escenario 2) o de cierre de las instalaciones (escenario 3), las clases de teoría serán síncronas a través de Microsoft Teams y asíncronas mediante vídeo grabado (disponibles en el campus virtual de la asignatura), siguiendo con la planificación semanal prevista. La decisión de clase síncrona/asíncrona estará marcada por el tipo de actividad que se vaya a desarrollar durante la clase, por ejemplo, presentaciones, seminarios e interacción de temas con el alumnado requerirán de una sesión síncrona.
En caso de pasar a un escenario 3, las prácticas se pueden desarrollar como estaba previsto accediendo de forma remota al Centro de Supercomputación de Galicia. En el horario establecido para las clases prácticas usaremos Microsoft Teams para resolver dudas de forma síncrona. Usaremos los foros del campus virtual para un apoyo extra en la resolución de dudas.
Sistema de evaluación. En caso de cambiar a un escenario de distanciamiento (escenario 2) o de cierre de las instalaciones (escenario 3), la participación en el desarrollo de las clases teóricas se adaptará a participación en el foro de la asignatura en el campus virtual y en las sesiones síncronas de teoría a través de Microsoft Teams. Las prácticas se seguirán evaluando de forma continua durante el desarrollo de las clases con entregas a través del campus virtual.
En caso de pasar a un escenario 3, el proyecto de programación paralela se evaluará de forma remota usando las herramientas de comunicación síncrona de Microsoft Teams.
Bibliografía básica. En caso de cambiar a un escenario de cierre de las instalaciones (escenario 3) la bibliografía básica podrá consultarse online accediendo con la cuenta institucional, excepto el libro de T.G. Mattson, B.A. Sanders and B.L. Massingill, Patterns for Parallel Programming, que puede sustituirse por los artículos científicos correspondientes. Este material estará disponible en el campus virtual de la asignatura.
Pablo Quesada Barriuso
Coordinador/a- Departamento
- Electrónica y Computación
- Área
- Arquitectura y Tecnología de Ordenadores
- Teléfono
- 881813538
- Correo electrónico
- pablo.quesada [at] usc.es
- Categoría
- Profesor/a: Profesor Ayudante Doctor LOU
Lunes | |||
---|---|---|---|
09:00-11:00 | Grupo /CLIL_01 | Castellano | Lab PP-2 |
Miércoles | |||
15:30-16:30 | Grupo /CLE_01 | Castellano | Aula A4 |