Guía Docente 2016/2017 - ucam.edu · Programación Paralela 4 Programación Paralela - Tlf: (+34)...

13
Guía Docente 2016/2017 Programación paralela Parallel Programming Grado en Ingeniería Informática Presencial

Transcript of Guía Docente 2016/2017 - ucam.edu · Programación Paralela 4 Programación Paralela - Tlf: (+34)...

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: [email protected]

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.