Créditos ECTS Créditos ECTS: 4.5
Horas ECTS Criterios/Memorias Trabajo del Alumno/a ECTS: 70.5 Horas de Tutorías: 2 Clase Expositiva: 10 Clase Interactiva: 30 Total: 112.5
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: Con docencia
Matrícula: 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 (GPU), 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 GPU.
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 4: 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 5: Técnicas de optimización del rendimiento
Las prácticas se pueden realizar en los ordenadores del aula de informática y en los ordenadores personales de los alumnos/as, pero deben ejecutarse en los nodos del supercomputador del CESGA.
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.
- Alessandrini, V. (2015). Shared memory application programming: Concepts and strategies in Multicore application programming. Morgan Kaufmann.
El libro se divide en dos partes: la primera desarrolla los conceptos esenciales de gestión y sincronización de hilos, discutiendo bibliotecas nativas (hilos de Windows, Pthreads), así como en el estándar de C ++ 11. La segunda parte proporciona una discusión en profundidad de TBB y OpenMP.
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.
Esta asignatura aplica un sistema de evaluación continua 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.
La asistencia a las prácticas es obligatoria. Cada una de las prácticas propuestas tendrá una fecha de finalización específica. Después de esta fecha, la práctica se considerará como no realizada. Las prácticas se evaluarán durante las sesiones posteriores a la fecha de entrega.
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.
Oportunidad ordinaria
Participación en el desarrollo de las clases teóricas (20%). Adquisición de conocimientos básicos en OpenMP y CUDA (15%). Realización de programas paralelos en OpenMP y CUDA (25%). 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 la materia del Fundamentos de Sistemas Paralelos del GrEI.
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.
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 Contratado/a Doctor
Lunes | |||
---|---|---|---|
09:00-11:30 | Grupo /CLIL_01 | Castellano | IA.03 |
Miércoles | |||
15:30-16:30 | Grupo /CLE_01 | Castellano | IA.S1 |
22.05.2024 16:00-20:00 | Grupo /CLIL_01 | Aula A2 |
22.05.2024 16:00-20:00 | Grupo /CLE_01 | Aula A2 |
09.07.2024 10:00-14:00 | Grupo /CLIL_01 | Aula A7 |
09.07.2024 10:00-14:00 | Grupo /CLE_01 | Aula A7 |