hola
Universidad Católica San Antonio de Murcia – Tlf: (+34) 968 278 160 [email protected] – www.ucam.edu
Guía Docente 2017/2018
Programación paralela
Parallel Programming
Grado en Ingeniería Informática
A distancia
Programación Paralela Programación Paralela - Tlf: (+34) 968 278 821 1
Índice
Programación Paralela ... 2
Breve descripción de la asignatura ... 2
Requisitos Previos ... 2
Objetivos de la asignatura ... 2
Competencias ... 3
Metodología ... 4
Temario ... 4
Relación con otras materias ... 7
Sistema de evaluación ... 7
Bibliografía ... 8
Web relacionadas ... 8
Recomendaciones para el estudio y la docencia ... 9
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
2
Programación Paralela
Módulo: Común de la rama de informática. Materia: Programación.
Carácter: Obligatorio. Nº de créditos: 4,5 ECTS.
Unidad Temporal: 3er Curso – 1er Semestre
Profesor de la asignatura: José María Cecilia Canales (web profesorado).
Email: [email protected]
Horario de atención a los alumnos/as: Martes 9:00 a 11:00. Fuera de ese horario se puede solicitar cita vía correo electrónico al indicado en la línea anterior.
Profesor coordinador de módulo: Andrés Muñoz Ortega. Profesor coordinador de curso: José M. Cecilia Canales.
Breve descripción de la asignatura
En esta asignatura se introduce al alumno en programación paralela. Veremos los distintos modelos tradicionales de programación paralela, así como los últimos desarrollos de arquitecturas masivamente paralelas. Concretamente nos centraremos en las unidades de procesamiento gráfico de Nvidia, y en su modelo de programación CUDA.
Brief Description
In this subject, we will cover different topics of programming parallel systems. We will see traditional parallel programming models such as shared and distributed memory, and the emergent massively parallel architectures such as the Graphics Processing Units (GPUs) using the CUDA programming model.
Requisitos Previos
Conocimiento del lenguaje C/C++-
Objetivos de la asignatura
1. Comprender los conceptos de la programación paralela. El nuevo paradigma de programación, los beneficios y las contrariedades que puede acarrear.
2. Comprender los conceptos de sincronización y exclusión mutua.
3. Entender y enumerar las características de arquitecturas con memoria compartida y distribuida.
4. Conocer algunos problemas paradigmáticos de la programación Concurrente y ser capaces de resolverlos.
5. Saber traducir entre semáforos y monitores y a la inversa.
6. Explicar adecuadamente las diferencias entre los sistemas basados en paso de mensajes y los basados en variables compartidas.
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
3
7. Enumerar las características propias de los sistemas basados en paso de mensajes síncronos y los asíncronos.
8. Conocer las condiciones para que se produzca un interbloqueo, así́ como las técnicas de manejo de los mismos.
Competencias
Competencias transversales
T1: Capacidad de análisis y síntesis. T4: Resolución de problemas. T6: Trabajo en equipo.
T11: Razonamiento crítico. T14: Aprendizaje autónomo.
T15: Adaptación a nuevas situaciones. T16: Creatividad e innovación.
T21: Capacidad de reflexión.
T22: Comprender los puntos principales de textos claros y en lengua estándar si tratan sobre cuestiones relacionadas con el ámbito de estudio.
Competencias específicas
C6: 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.
C7: Conocimiento, diseño y utilización de forma eficiente los tipos y estructuras de datos más adecuados a la resolución de un problema.
C8: 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.
C13: Conocimiento y aplicación de las herramientas necesarias para el almacenamiento, procesamiento y acceso a los Sistemas de información, incluidos los basados en web.
C14: Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real.
Resultados de aprendizaje
RA 2.3.11. Identificar los conceptos principales, beneficios y características del paradigma de la programación paralela y concurrente.
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
4
RA 2.3.12. Explicar, identificar y resolver problemas en la compartición y sincronización de datos. RA 2.3.13. Describir el modo de funcionamiento e implementar correctamente semáforos y monitores.
RA 2.3.14. Describir y aplicar las soluciones basadas en el paso de mensajes, tanto síncrono como asíncrono.
RA 2.3.15. Definir y aplicar correctamente el concepto de interbloqueo, su prevención y detección. RA 2.3.16. Identificar escenarios adecuados a la implementación del paradigma de programación paralela y concurrente.
Metodología
Metodología Horas Horas de trabajo presencial Horas de trabajo no presencial Evaluación 7,9 7,9 horas (7%) Tutoría 28,1 104,5 horas(93%) Estudio personal 45 Búsquedas bibliográficas 3,3 Realización de trabajos 28,1 TOTAL 112,5 7,9 104,5
Temario
Programa de la enseñanza teórica
Tema 1. Introducción. Conceptos básicos de paralelismo 1. Noción de computación paralela.
2. Necesidad de la computación paralela.
a. Limitaciones físicas de la computación secuencial. b. Problemas con complejidad elevada.
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
5
c. Limitaciones físicas de la computación paralela. 3. Aspectos de la programación paralela.
a. Niveles de paralelismo.
Tema 2. Modelos de los computadores paralelos. 1. Introducción.
2. Paralelismo en los computadores monoprocesador. a. Formas básicas de paralelismo.
b. Procesadores vectoriales. c. Procesadores escalares. d. Técnicas multhreading.
e. Procesadores VLIW (Very Long Instruction Word) 3. Paralelismo en los computadores multiprocesadores.
a. Clasificación de los computadores paralelos. 4. Organización de los computadores paralelos.
a. Multiprocesadores con memoria compartida. b. Multicomputadores.
c. Redes de interconexión.
d. Ventajas e inconvenientes de los multicomputadores frente a los multiprocesadores.
e. Redes de computadores. f. Procesadores multinúcleo. 5. Modelos de computadores paralelos. 6. El modelo de memoria compartida.
7. Sistemas de memoria distribuida: el modelo de paso de mensajes 8. Sistemas heterogéneos masivamente paralelos.
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
6
Tema 3. Modelos de programación paralela tradicionales. 1. Visión general.
2. Programación mediante paso de mensajes: MPI. a. Conceptos básicos de MPI.
b. Operaciones de comunicación colectiva. 3. Programación en memoria compartida: OpenMP.
a. Conceptos básicos de OpenMP. b. Definición de regiones paralelas. c. Ejecución de bucles en paralelo.
d. Ejecución de secciones de código en paralelo e. Combinación de directivas.
f. Sincronización.
Tema 4. Modelos de programación paralela emergentes. 1. Visión General
2. Programación en sistemas heterogéneos masivamente paralelos: CUDA 3. Consideración de rendimiento en CUDA
4. Estrategias algorítmicas de Optimización en CUDA 5. Problemas de localidad de datos.
6. Tratamiento de datos dinámicos y dispersos
7. Eficiencia en aplicaciones con una ingente cantidad de datos 8. Reducir el interfaz de salida
9. Depuración y evaluación de códigos CUDA 10. Ejecución Multi-GPU
11. Introducción al estándar OpenCL.
Programa de la enseñanza práctica
Las prácticas de la asignatura consistirán en el desarrollo de diversos programas paralelos utilizando el entorno de programación CUDA. La UCAM ha sido nombrada CUDA Teaching Center por la empresa Nvidia (https://research.nvidia.com/content/cuda-teaching-centers). Para el correcto
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
7
desarrollo de los ejercicios prácticos se ofrecerán diversos seminarios de manejo básico del lenguaje. Estos seminarios se enumeran a continuación:
Práctica 1. Introducción al modelo de programación CUDA.
En esta práctica introducimos el modelo de programación de programación masivamente paralela, CUDA. Mostramos la interacción básica con el compilador y planteamos la realización de los primeros kernels sencillos.
Práctica 2. Modelo de hilos en CUDA.
Esta práctica tiene como objetivo mostrar las diferencias de rendimiento entre códigos con máxima ocupación de los recursos de un SM y códigos que desaprovechan estos recursos.
Práctica 3. Modelo de memorias en CUDA.
En esta práctica mostramos las distintas memorias disponibles en la arquitectura CUDA. Vemos para qué tipo de datos es mas conveniente el uso de cada una de ellas y el rendimiento que ofrecen a nuestros códigos
Práctica 4. Optimización y eficiencia en la GPU.
En esta práctica mostramos las buenas prácticas de programación paralela, y en particular, de programación CUDA. Trabajamos con códigos con diferentes patrones de acceso a memoria y mostramos optimizaciones para obtener el máximo ancho de banda de nuestras aplicaciones. Práctica 5. Introducción al modelo de programación OpenCL.
En esta práctica introducimos el modelo de programación OpenCL mediante el desarrollo de un ejemplo sencillo. El objetivo es conocer la sintaxis y las diferencias con el modelo de programación CUDA.
Relación con otras materias
Para el correcto desarrollo de esta asignatura se aconseja haber cursado las asignaturas de Sistemas Operativos, Fundamentos de Programación y Algoritmia.
Sistema de evaluación
- Primera prueba parcial: 25% del total de la nota. - Prueba final: 25% del total de la nota.
- Evaluación de prácticas y problemas: 40% del total de la nota. - Participación: 10% del total de la nota.
Evaluación del desarrollo de la práctica final en los criterios establecidos en el enunciado de la práctica.
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
8
Se valorará a partir de la entrega de diferentes tareas voluntarias, así como de la participación en los diversos mecanismos de tutorización lo que se valorará en el % de participación. Se tendrá en cuenta no solamente la cantidad de la participación, sino la calidad de la misma. Tanto en el planteamiento de dudas como en la resolución de las de los compañeros en la herramienta de foros del campus virtual.
Bibliografía
Bibliografía básica
Kirk D. y Hwu W. M. Programming Massively Parallel Processors. Morgan Kaufmann, 2011. Almeida F., Giménez D., Mantas J. M., Vidal A. M. Introducción a la programación paralela. Paraninfo Cengage Learning, 2008
Bibliografía complementaria
Rauber T., Runger G. Parallel programming for multicores and Cluster systems. Springer. 2010 Sanders J. y Kandrot E. CUDA by example: An introduction to General-Purpose GPU Programming. Addison-Wesley, 2010
Timothy G. Mattson, Beverly A. Sanders, Berna L. Massingill. Patterns for Parallel Programming. Addison Wesley, 2010
Web relacionadas
CUDA Nvidia: (http://developer.nvidia.com/)
CUDA Books: (http://developer.nvidia.com/cuda-books) Curso de
OpenCL: http://openclnews.com/blog/opencl_tutorial_series_on_the_code_project_parts_1_8 Master de la universidad de Illinois: http://courses.engr.illinois.edu/ece408/
Curso sobre la arquitectura de la GPU: http://www.udemy.com/introduction-to-graphics-architecture/ "Programming Massively Parallel Processors with CUDA by Stanford University"
http://itunes.apple.com/us/itunes-u/programming-massively-parallel/id384233322
CUDA, Supercomputing for the Masses by Rob Farber 2008. http://drdobbs.com/cpp/207200659 Web para developers de Nvidia http://developer.nvidia.com/cuda-education-training
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
9
Recomendaciones para el estudio y la docencia
La asignatura requiere un seguimiento continuo por parte del alumno, ya que el contenido de cada tema se basa en el de los temas anteriores. Por ello, se recomienda estudiar conforme se desarrollen los contenidos, comprender los ejemplos que se suministren y realizar los ejercicios propuestos.
Para el desarrollo exitoso de la asignatura se hace necesario seguir las indicaciones suministradas mediante el campus virtual, así como el cumplimiento de las fechas de entrega de cada tarea.
Material necesario
Aplicaciones
El software a utilizar es el compilador y herramientas de programación CUDA. Estas herramientas están disponibles en la página web de la compañía (https://developer.nvidia.com/cuda-downloads). La UCAM pondrá un servidor con varias tarjetas gráficas para la resolución de las prácticas. Para conectarse remotamente al servidor, el estudiante deberá utilizar un terminal Unix, en caso de que tenga un sistema operativo de este tipo, y conectarse usando ssh. También es posible utilizar clientes ssh para Windows tipo putty o tunnelier, ambos de libre distribución.
Material didáctico
Además de la bibliografía recomendada, en el campus virtual, en el apartado de recursos se proporcionará al alumno organizado en carpetas por temas el material didáctico necesario para el seguimiento de la misma. Este material estará organizado en la sección y wiki del campús virtual, que consistirá en:
• Apuntes sobre los temas tratados.
• Enlaces a otros sitios donde aumentar la información sobre los temas.
• Ejercicios para practicar, en un principio los enunciados, y posteriormente se pondrán las soluciones a los mismos.
• Presentaciones con explicación oral del profesor de los temas más importantes y/o dificultosos
• Capturas de pantalla con explicación del profesor de la realización de ejercicios prácticos, así como de lo relacionado con la instalación del entorno y puesta en marcha.
• Bibliografía y Material adicional para ampliar los conocimientos de cada asignatura.
Tutorías
A través del Campus Virtual se van a establecer diferentes mecanismos de tutorización, soportados por las distintas herramientas disponibles:
• Foro: Esta herramienta está dirigida a fomentar el trabajo en grupo, ya que permite desarrollar un tema específico de forma conjunta. Su dinámica permite a los estudiantes ir nutriendo y generando un debate con los diferentes planteamientos e intervenciones que realicen. Estas serán moderadas por el profesor y las reorientará hacia el propósito formativo.
Programación Paralela
Programación Paralela - Tlf: (+34) 968 278 821
10
• Chat: Este espacio cabe destacar como estrategia pedagógica de evaluación formativa, al ser considerado como una herramienta interactiva síncrona que permite establecer diálogos de discusión, reflexión para generar conocimiento y retroalimentación inmediata.
• Videoconferencia: Transmisión de charlas o seminarios del profesor con la participación de los alumnos.
Tutorías individuales o colectivas: ayuda al alumno a aclarar dudas, estas pueden ser presenciales (si el alumno así lo demanda) o mediante el chat, teléfono y correo electrónico.