Programación Paralela

Información Básica

  • Créditos: 3
  • Horas de trabajo acompañado: 5 / semana (3 horas clase, 2 horas taller)
  • Horas de trabajo independiente: 4 / semana
  • Pre-requisitos: Sistemas Operativos, Comunicación de Datos, Análisis y Diseño de Algoritmos
  • Tipo de curso: Núcleo de Formación Fundamental.

Descripción del Curso

Objetivos

Al finalizar el curso los participantes podrán, identificar diferentes aspectos de la programación paralela, analizár un problema y descomponerlo (de ser posible) para generar una solución paralela al problema planteado. Podrá comparar diferentes formas de programar en paralelo y podra determinar cuales soluciones paralelas ofrece las mejores ventajas en cuanto a desempeño. Podrá tomar como base alguno de los algoritmos paralelos existentes para desarrollar nuevos algoritmos paralelos.

Se desarrollan competencias en

Contenido

Primera parte: Programación paralela

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
1 0.75 Introducción a la programación paralela. Familiaridad [1,5]
1 0.75 Necesidad por comunicación y coordinación/sincronización. Familiaridad[1,5]
2 0.75 Independencia y Particionamiento. Familiaridad[1]
2 0.75 Conocimientos básicos en los conceptos de descomposición paralela. Familiaridad[2,1]
3 1.0 0.5 Descomposición basada en tareas Uso [2]
3 0.5 1.5 - Implementación usando hilos. Uso [2]
4 1.5 0.5 Descomposición basada en datos Uso [2]
5 1.5 1.0 - Implementación usando SIMD y MapReduce Uso [2,3]
6 1.5 0.5 Actores y procesos reactivos (ej. manejadores de solicitudes) Evaluación [1,5]
7 1.5 Memoria compartida y memoria distribuida Evaluación [1,4]
8 1.0 1.0 Control de concurrencia. Evaluación [4]
8 0.5 1.0 Consistencia y su rol en las garantias en los lenguajes de programas para realizar programas libres de data-races. Evaluación [4,1]
9 0.50.5 - Mensajes punto-a-punto vs. multicast. Uso [2]
9 0.51.0 - Estilo de envio y recpción de mensajes bloqueantes y no-bloqueantes. Uso [2]
9 0.50.5 - Cola de mensajes. Uso [2]
100.5 Atomicidad Evaluación [4,2]
100.5 - Especificación de requerimientos y pruebas de atomicidad y seguridad. Evaluación [5]
100.5 - Granularidad de accesos y modificaciones atomicas, y el uso de secciones críticas o transacciones para modelarlos. Evaluación [1,4]
10,113.52.0 - Exclusión mútua usando cerrojos, semaforos, monitores o construcciones relacionadas. Uso [2,5]
12 0.75 - Composición Evaluación [3,5]
12 0.751.0 - Composición de acciones atómicas con granularidad gruesa usando sincronozación. Evaluación [2]
13 1.0 - Transacciones (aproximaciones optimisticas y conservativas). Familiaridad [5]
13 0.51.0 Administración de las interacciones de transacciones con almacenamiento (especialmente bufering). Familiaridad [4]

Total de Horas: 33.5.

Segunda parte: Algoritmos paralelos

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
140.5 Camino crítico, trabajo y expansión y su relación con la ley de Amdahl. Familiaridad [1,4]
141.00.5 Speed-up y escalabilidad (Modelos de computación: PRAM, BSP, etc.). Evaluación [1,3]
151.01.5 Paralelismo natural (Algoritmos embarasosamente paralelos). Evaluación [1,3]
15-162.02.0 Patrones de algoritmos paralelos (dividir y conquistar, map y reduce, maestro-trabajador, otros). Uso [3]
17-183.02.0 - Algoritmos específicos (ej. Merge-Sort paralelo). Uso [3]
19-203.02.0 Algoritmos paralelos sobre grafos (ej. camino mas corto paralelo, spanning-tree paralelo). Uso [3]
21-223.02.0 Computación paralela de matrices. Uso [1,3]
231.51.0 Algoritmos productor-consumidor y pipelined. Uso [2,3]
241.5 Ejemplos de algoritmos no escalables. Familiaridad [3]
251.51.0 Fallas y recuperación. Evaluación [1,5]

Total de Horas: 30.

Integración Curricular

Resultados de Programa (ABET)

(A) La habilidad para aplicar conocimientos de matemáticas, ciencias e ingeniería.

(B) La habilidad para analizar un problema e identificar los requerimientos necesarios para su definición y solución.

(C) La habilidad para diseñar, implementar y evaluar procesos y sistemas computacionales.

(D) La habilidad para funcionar en equipos de trabajo.

(E) El entendimiento de la responsabilidad profesional y ética.

(F) La habilidad para comunicarse efectivamente.

(G) La habilidad para analizar los impactos de la computación y la ingeniería en las personas, organizaciones y la sociedad.

(H) El reconocimiento de la necesidad de, y la habilidad para, continuar con el desarrollo profesional.

(I) La habilidad para usar las técnicas, destrezas y herramientas modernas para la práctica de la computación.

(J) La habilidad para aplicar los fundamentos y principios de las matemáticas y de la computación en el modelamiento y diseño de sistemas computacionales de manera que se demuestre comprensión de las ventajas y desventajas en las decisiones de diseño.

(K) La habilidad para aplicar los principios de diseño y desarrollo de software en la construcción de sistemas de diferente complejidad.

Relevancia del curso con los resultados de programa

Resultados de Programa
A B C D E F G H I J K
Relevancia 3 4 3 3 3 5

Escala: (1) baja relevancia - (5) alta relevancia.

Integración de objetivos, contenido y metodología del curso

El curso es presencial y con participación y trabajo en clase. Se asignarán investigaciones, ejercicios y lecturas. Durante la sesión se expondrán los conceptos acompañados de ejemplos, se fomentará la participación de los estudiantes. Se realizará un taller semanal en el que se ponga en práctica algunos conceptos de computación.

Resultados del Programa Indicadores de Desempeño Objetivos/Contenido del Curso Actividades de aprendizaje Instrumentos de medición
(A) Aplicación de Conocimientos (A1) Identificar los fundamentos científicos y los principios de ingeniería que rigen un proceso o sistema. (Conocimiento) (A2) Resolver problemas relacionados con la disciplina y otras áreas por medio de la utilización de conocimientos, modelos y formalismos de las ciencias de la computación, las matemáticas y la ingeniería. (Aplicación) (A3) Analizar conjuntos de datos. (Análisis) Capítulo 1 Exposiciones del profesor, solución de ejercicios y lecturas Exámenes
(C) Diseño (C1) Utilizar estándares de codificación en la implementación de componentes de software. (Aplicación). (C2) Identificar componentes, interacciones, relaciones e interfaces entre componentes. (Análisis). Capítulos 2,3,4 Solución de ejercicios y lecturas Proyectos y tareas
(F) Comunicación efectiva (F1) Producir textos de manera efectiva teniendo en cuenta la estructura, coherencia, flujo, ortografía y correcto uso del lenguaje. (Aplicación). (F2) Comunicarse de manera efectiva de acuerdo al público objetivo haciendo uso correcto del lenguaje, estilo, tiempo y expresión corporal. (Aplicación). (F3) Utilizar recursos gráficos para comunicar y expresar una idea. (Aplicación). (F4) Defender ideas con precisión y claridad. (Evaluación). Capítulos 2,3,4 Proyectos y tareas Presentaciones orales y reportes escritos
(H) Desarrollo profesional. (H1) Reconocer la importancia del conocimiento tanto en amplitud como en profundidad. (Compresión). Capítulo 1 Tareas Tareas
(I) Uso de herramientas y técnicas (I1) Utilizar herramientas de desarrollo de software. (Aplicación). (I2) Utilizar herramientas de diseño, modelamiento y simulación. (Aplicación). (I3) Combinar herramientas de software y hardware para resolver un problema. (Síntesis). (I4) Demostrar flexibilidad para adaptarse a diferentes paradigmas y lenguajes de programación. (Valuación). Capítulos 2,3,4 Laboratorios y lecturas Proyecto y tareas
(J) Modelamiento y diseño de sistemas computacionales (J1) Reconocer la importancia del modelamiento cuando se resuelve un problema. (Compresión). (J2) Relacionar conceptos y principios teóricos para la resolución efectiva de un problema. (Síntesis). Capitulos 2,3,4 Lecturas Proyectos y tareas

Contribución al Desarrollo de Competencias (CNA)

Resultados de Programa
A B C D E F G H I J K
Ciudadanía X X
Comunicación escrita X
Lectura crítica X
Inglés X
Razonamiento cuantitativo X X X X X X

Contribución a los objetivos educacionales

La Carrera de Ingeniería de Sistemas y Computación plantea los siguientes objetivos educacionales, El estudiante graduado de la carrera será capaz de:

  1. Ejercitar la práctica de la Ingeniería de Sistemas y Computación profesionalmente.
  2. Diseñar y operar sistemas de computación que contribuyen a la solución de problemas relacionados a la disciplina, otra área de la ciencia y la ingeniería u otras disciplinas.
  3. Contribuir al bienestar de las comunidades desde posiciones prominentes en la industria, academia, sector público o como un emprendedor.
  4. Ser distinguido por su bases sólidas en computación, su sentido de ciudadanía responsable, su profesionalismo y liderazgo.
  5. Continuar su desarrollo profesional o involucrarse en estudios de posgrado.
Resultados de Programa
A B C D E F G H I J K
Objetivo 1
Objetivo 2
Objetivo 3
Objetivo 4
Objetivo 5

Recomendaciones del Director del Programa

Reglas del curso

Calificación y Balance de Evaluación del Curso

Instrumento Porcentaje A B C D E F G H I J K
Parcial 1 15 % 5% 5% 5%
Parcial 2 20 % 5% 10% 5%
Parcial 3 20 % 5% 10% 5%
Proyecto 25 % 5% 5%15%
Tarea 10 % 5% 5%
Talleres 10 % 2% 5% 3%

Uso de material en exámenes

Asistencia

Bibliografía

  1. Introduction to Parallel Computing, Ananth Grama, George Karypis, Vipin Kumar and Anshul Gupta, Addison Wesley, 2 ed. 2003.
  2. Parallel Programming in C with MPI and OpenMP, Michael Quinn, McGraw-Hill, 2003.
  3. An Introduction to Parallel Algorithms, Joseph JaJa, Addison-Wesley Publishing Company, 1992.
  4. Parallel Computer Architecture, David Culler, Jaswinder P. Singh, Anoop Gupta, Morgan Kaufmann Publishers, 1999.

Instalaciones

Salón de clase con computador y proyector. Laboratorio de Ingeniería de Sistemas y Computación.

Material de este semestre

 
materias/programacionparalela.txt · Última modificación: 2016/08/30 16:21 por abuss
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki