La Ley de Moore ha sido una pauta para la industria de los semiconductores durante varias décadas. Sin embargo, las tecnologías de fabricación están llegando a un límite físico que afecta el diseño de los procesadores, específicamente la disipación térmica. Debido a esto, las arquitecturas informáticas modernas han incorporado múltiples unidades de procesamiento en un solo circuito integrado en lugar de simplemente hacer procesadores únicos cada vez más complejos. Esta tendencia se ha vuelto omnipresente y ahora se pueden encontrar multiprocesadores en sistemas que van desde dispositivos móviles hasta supercomputadoras.
Las personas que trabajan en campos relacionados con las tecnologías de la información deberían poder programar sistemas paralelos para crear las aplicaciones que requieren la sociedad y las industrias de alta tecnología. Este curso se centra en el tema del paralelismo en la informática y la relevancia de considerar tanto el hardware como el software para lograr la eficiencia informática. Se estudiarán conceptos fundamentales de computación paralela y distribuida de la mano de las principales herramientas y algoritmos utilizados para diseñar, implementar y validar aplicaciones paralelas.
Instructor
Diego Jiménez (djimenez@cenat.ac.cr)
Asistente
Elías Arce (amendezelias0@gmail.com)
Horario
Week | Topic |
1 | Introduction to Parallel and Distributed Computing |
2 | Computer Organization |
3 | Parallel Algorithms Design |
4 | Shared Memory Programming with OpenMP – Part I |
5 | Shared Memory Programming with OpenMP – Part II |
6 | Distributed Memory Programming with MPI – Part I |
7 | Distributed Memory Programming with MPI – Part II |
8 | Interconnects |
9 | Analytic Modeling of Parallel Programs |
10 | Project Assignment and Paraview Tutorial |
11 | Matrix Algorithms |
12 | Sorting Algorithms |
13 | Graph Algorithms |
14 | Accelerator Programming with OpenACC |
15 | Project Presentation |
Requerimientos
Se esperan los siguientes conocimientos de parte de los estudiantes involucrados:
- Conocimiento de programación en C/C++
- Familiaridad con el uso de UNIX/Linux y la manipulación de la línea de comandos
- Conocimiento básico de análisis de algoritmos y estructuras de datos.