El objetivo de este curso es brindarle una base sólida para desarrollar, analizar e implementar algoritmos paralelos y de uso local. Este curso se centra en fundamentos teóricos. Para dar una idea práctica de cómo los algoritmos se asignan y se comportan en sistemas reales, complementaremos la teoría algorítmica con ejercicios prácticos en sistemas HPC modernos, como Cilk Plus u OpenMP en nodos de memoria compartida, CUDA para coprocesadores gráficos (GPU) ), y modelos MPI y PGAS para sistemas de memoria distribuida.
Este curso es una introducción de posgrado a algoritmos paralelos escalables. "Escala" realmente se refiere a dos cosas: eficiente a medida que crece el tamaño del problema, y eficiente a medida que crece el tamaño del sistema (medido en números de núcleos o nodos de cómputo). Para escalar realmente su algoritmo en estos dos sentidos, debe ser inteligente en cuanto a reducir la complejidad asintótica de la manera en que lo hizo para los algoritmos secuenciales desde CS 101; pero también debe pensar en reducir la comunicación y el movimiento de datos. Este curso trata sobre las técnicas algorítmicas básicas que necesitarás para hacerlo.
Las técnicas que encontrará cubren las principales ideas de diseño y análisis de algoritmos para tres clases principales de máquinas: para máquinas de memoria compartida multinúcleo y muchas de núcleo, a través del modelo de intervalo de trabajo; para máquinas de memoria distribuida como clústeres y supercomputadoras, a través de modelos de red; y para máquinas secuenciales o paralelas con jerarquías de memoria profunda (por ejemplo, cachés). Verá estas técnicas aplicadas a problemas fundamentales, como ordenar, buscar en árboles y gráficos, y álgebra lineal, entre otros. El aspecto práctico de este curso es la implementación de algoritmos y técnicas que aprenderá a ejecutarse en sistemas paralelos y distribuidos reales, para que pueda verificar si lo que parece funcionar bien en teoría también se traduce en práctica. (Los modelos de programación que usarás incluyen Cilk Plus, OpenMP y MPI, y posiblemente otros).
El objetivo de este curso es brindarle una base sólida para desarrollar, analizar e implementar algoritmos paralelos y de uso local. Este curso se centra en fundamentos teóricos. Para dar una idea práctica de cómo los algoritmos se asignan y se comportan en sistemas reales, complementaremos la teoría algorítmica con ejercicios prácticos en sistemas HPC modernos, como Cilk Plus u OpenMP en nodos de memoria compartida, CUDA para coprocesadores gráficos (GPU) ), y modelos MPI y PGAS para sistemas de memoria distribuida.
Este curso es una introducción de posgrado a algoritmos paralelos escalables. "Escala" realmente se refiere a dos cosas: eficiente a medida que crece el tamaño del problema, y eficiente a medida que crece el tamaño del sistema (medido en números de núcleos o nodos de cómputo). Para escalar realmente su algoritmo en estos dos sentidos, debe ser inteligente en cuanto a reducir la complejidad asintótica de la manera en que lo hizo para los algoritmos secuenciales desde CS 101; pero también debe pensar en reducir la comunicación y el movimiento de datos. Este curso trata sobre las técnicas algorítmicas básicas que necesitarás para hacerlo.
Las técnicas que encontrará cubren las principales ideas de diseño y análisis de algoritmos para tres clases principales de máquinas: para máquinas de memoria compartida multinúcleo y muchas de núcleo, a través del modelo de intervalo de trabajo; para máquinas de memoria distribuida como clústeres y supercomputadoras, a través de modelos de red; y para máquinas secuenciales o paralelas con jerarquías de memoria profunda (por ejemplo, cachés). Verá estas técnicas aplicadas a problemas fundamentales, como ordenar, buscar en árboles y gráficos, y álgebra lineal, entre otros. El aspecto práctico de este curso es la implementación de algoritmos y técnicas que aprenderá a ejecutarse en sistemas paralelos y distribuidos reales, para que pueda verificar si lo que parece funcionar bien en teoría también se traduce en práctica. (Los modelos de programación que usarás incluyen Cilk Plus, OpenMP y MPI, y posiblemente otros).