Introducción

En los últimos años los sistemas distribuidos cobraron gran importancia debido a la crecientes mejoras en las redes de computadoras. La reciente adopción masiva por parte de la industria y la academia de clusters, clouds y Grids hizo posible una gran disponibilidad de plataformas de computación distribuida a bajo costo. Por otro lado, se popularizaron enormemente las computadoras con múltiples procesadores y núcleos, haciendo que el software paralelo deje de ser exclusivo de ambientes especializados y de computación de alto desempeño.

El uso y desarrollo eficiente de sistemas distribuidos y paralelos es de crucial importancia debido a que la mayoría de los sistemas que se desarrollan en la actualidad son distribuidos y/o paralelos.

El curso tiene por objetivo introducir al alumno al área de computación paralela y distribuida, sus conceptos, herramientas y aplicaciones. Se pretende dar una visión sobre el desarrollo de software paralelo y distribuido, incluyendo plataformas, lenguajes de programación y herramientas.

Docentes

Fechas

  • Jueves 9 y viernes 10 de Mayo de 9:00 a 12:00, sala videoconferencias ISISTAN
  • Lunes 13 y martes 14 de Mayo de 9:00 a 12:00, sala videoconferencias ISISTAN
  • Viernes 17 de Mayo de 9:00 a 12:00, sala videoconferencias ISISTAN
  • Viernes 24 de Mayo 15:00, sala videoconferencias ISISTAN
  • Fechas de consulta a definir.

Apuntes

  1. Introducción
  2. Big Data
  3. Clusters
  4. OpenMP
  5. The Java Concurrency API & JPPF

Trabajos prácticos

  1. Cursada 2019
  2. Final 2019

Herramientas

  1. Compilador C/C++ para Windows con soporte OpenMP
  2. IDE C/C++ para Linux/Windows
  3. JPPF

Programa

Unidad 1: Introducción

Evolución de las infraestructuras de software/hardware paralelas y distribuidas. Motivaciones. Conceptos. Ventajas. Aplicaciones.

Unidad 2: Clasificación de Computación Paralela y Distribuida

Tipos de sistemas paralelos y distribuidos. Multiprocesadores, supercomputadores y paralelismo. Memoria compartida. Memoria distribuida. Computación distribuida en el escritorio, clusters, computación de alto desempeño, clusters de datos, clouds, grids, P2P. Cuándo paralelizar o distribuir algoritmos.

Unidad 3: Computación Paralela

HPC. Modelos de programación paralela. Paralelización de programas. Niveles de paralelismo. Análisis de desempeño. Hilos explícitos, hilos implícitos.

Unidad 4: Clusters

Orígenes y motivaciones. SSI y SSE. Ejemplos: OpenMosix, MPI.

Unidad 5: Cluods, Virtualización y Contenedores

Orígenes y motivaciones. Ventajas y desventajas. Virtualización. Imágenes de máquina. Plataformas. Contenedores. Ejemplos Docker.

Unidad 6: P2P

Orígenes y motivaciones. Computación distribuida en el escritorio. Computación P2P. Modelo desestructurado y estructurado. DHT. Ejemplos y aplicaciones..

Unidad 8: Conclusiones y Tendencias

Discusión. Problemas y limitaciones. Líneas de investigación.