Post on 12-Feb-2019
Guía Docente 2016/2017
Programación paralela
Parallel Programming
Grado en Ingeniería Informática
Presencial
Programación Paralela
2
Programación Paralela - Tlf: (+34) 968 278 821
Rev. 10
26/04/2016 16:03
Índice
Programación Paralela ........................................................................................................3
Breve descripción de la asignatura ...................................................................................3
Requisitos Previos ..............................................................................................................3
Objetivos de la asignatura ..................................................................................................3
Competencias ......................................................................................................................4
Competencias transversales ...................................................................................................... 4
Competencias específicas .......................................................................................................... 4
Resultados de aprendizaje ......................................................................................................... 5
Metodología .........................................................................................................................6
Temario .................................................................................................................................7
Programa de la enseñanza teórica ............................................................................................. 7
Programa de la enseñanza práctica ........................................................................................... 9
Relación con otras materias ............................................................................................. 10
Sistema de evaluación ...................................................................................................... 10
Bibliografía ......................................................................................................................... 11
Bibliografía básica .................................................................................................................... 11
Bibliografía complementaria .................................................................................................... 11
Web relacionadas .............................................................................................................. 11
Recomendaciones para el estudio y la docencia ........................................................... 11
Material necesario ............................................................................................................. 12
Aplicaciones .............................................................................................................................. 12
Material didáctico ...................................................................................................................... 12
Tutorías .............................................................................................................................. 12
Programación Paralela
3
Programación Paralela - Tlf: (+34) 968 278 821
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: jmcecilia@ucam.edu
Horario de atención a los alumnos/as: Martes 13:00 a 14: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: Fernando Pereñiguez García
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.
Programación Paralela
4
Programación Paralela - Tlf: (+34) 968 278 821
6. Explicar adecuadamente las diferencias entre los sistemas basados en paso de mensajes y
los basados en variables compartidas.
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.
Programación Paralela
5
Programación Paralela - Tlf: (+34) 968 278 821
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.
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.
Programación Paralela
6
Programación Paralela - Tlf: (+34) 968 278 821
Metodología
Metodología Horas Horas de trabajo
presencial
Horas de trabajo
no presencial
Clases en el Aula 14,4
45 horas (40 %) Evaluación 3,6
Prácticas 18
Tutorías 9
Estudio personal 26,2
67.6 horas
(60 %)
Lecturas recomendadas
y búsqueda de
información
5,9
Realización de
ejercicios,
presentaciones,
trabajos y casos
prácticos
30,4
Actividades de
aprendizaje virtual
5,1
TOTAL 112.5 45 67.6
Programación Paralela
7
Programación Paralela - Tlf: (+34) 968 278 821
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.
c. Limitaciones físicas de la computación paralela.
3. Aspectos de la programación paralela.
a. Niveles de paralelismo.
b. Arquitectura básica de computadores.
c. Consideraciones del lenguaje C.
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.
Programación Paralela
8
Programación Paralela - Tlf: (+34) 968 278 821
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.
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
Programación Paralela
9
Programación Paralela - Tlf: (+34) 968 278 821
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
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 OpenMP.
En esta práctica introducimos el modelo de programación OpenMP mediante el desarrollo de un
ejemplo sencillo. El objetivo es conocer la sintaxis y las diferencias con el modelo de programación
CUDA.
Práctica 2. 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 3. 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 4. 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 más conveniente el uso de cada una de ellas y el rendimiento que
ofrecen a nuestros códigos
Práctica 5. 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.
Programación Paralela
10
Programación Paralela - Tlf: (+34) 968 278 821
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: 30% del total de la nota. Prueba escrita consistente en preguntas tipo
test sobre contenidos teóricos de los temas y ejercicios prácticos de programación paralela
realizados mediante ordenador. Se establece una nota de corte de 4.0 puntos.
- Segunda prueba parcial: 30% del total de la nota. Con los mismos criterios que la primera
prueba parcial. Cubrirá la segunda mitad de la asignatura y se realizará al final del cuatrimestre.
- Evaluación de prácticas y problemas: 40% del total de la nota. Forman parte de este ítem las
actividades desarrolladas en las sesiones prácticas previamente descritas. El total de los
documentos y actividades realizados por los alumnos se puntuará entre 0 y 10. Para estos trabajos
se establece una nota de corte mínima de 4.0 puntos. La evaluación del desarrollo de la práctica
final en los criterios establecidos en el enunciado de la práctica.
Para poder superar la asignatura será necesario obtener al menos una nota de 4.0 en cada uno de
los ítems anteriores. Sin embargo para superar la asignatura, la media ponderada de todas las
notas deberá ser igual o superior a 5.0.
Examen final de la asignatura: Este examen se dividirá en dos partes relacionadas con los dos
parcial de la asignatura. El alumno podrá recuperar las partes previamente no superadas (nota
inferior a 5) o no presentadas.
En caso de no superar la asignatura en la convocatoria ordinaria, la nota de los ítems con 5.0 o
superior se conservará para la convocatoria de septiembre. Los detalles sobre el sistema de
evaluación se encuentran recogidos en la normativa general de la universidad.
Convocatoria de Septiembre:
El alumno solamente se examinará de la parte de la asignatura que hubiera suspendido en la
convocatoria ordinaria. El valor de cada una de las pruebas será: primer parcial 30%, y segundo
parcial 30%. Las pruebas prácticas suponen el 40% del total de la nota. Aquellos alumnos que
suspendieran la parte práctica en la convocatoria de Junio deberán realizar de nuevo todos los
ejercicios prácticos propuestos.
Programación Paralela
11
Programación Paralela - Tlf: (+34) 968 278 821
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, 2010Mar
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
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.
Programación Paralela
12
Programación Paralela - Tlf: (+34) 968 278 821
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 campus 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
Programación Paralela
13
Programación Paralela - Tlf: (+34) 968 278 821
realicen. Estas serán moderadas por el profesor y las reorientará hacia el propósito
formativo.
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.