Moore’s Law has been a guideline for the semiconductor industry for several decades. However, manufacturing technologies are reaching a physical limit affecting the design of processors, specifically thermal dissipation. Because of this, modern computer architectures have incorporated multiple processing units onto a single integrated circuit instead of just making ever increasingly complex single processors. This trend has become ubiquitous and multiprocessors can now be found on systems ranging from mobile devices to supercomputers.
People working on IT-related fields should be able to program parallel systems to create those applications that are required by society and high-tech industries. This course is focused on the topic of parallelism in computing and the relevance of considering both hardware and software to achieve computing efficiency. Fundamental concepts of parallel and distributed computing will be studied in hand with the main tools and algorithms used to design, implement and validate parallel applications.
Instructor
Diego Jiménez (djimenez@cenat.ac.cr)
Teaching Assistant
Elías Arce (amendezelias0@gmail.com)
Schedule
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 |
Requirements
Enrolled students are supposed to meet the following requirements:
- Programming knowledge with C/C++
- Familiarity with the use of UNIX/Linux environments and the use of commandline instructions.
- Knowledge on the basics of algorithmic analysis and data structures.
Materials

Kabré Supercomputer
1 file(s) 0.00 KB













Introduction
1 file(s) 573.01 KB













Machine Organization
1 file(s) 1.84 MB













Parallel Programming Design Patterns with OpenMP
1 file(s) 378.35 KB













Shared Memory Programming with OpenMP
1 file(s) 473.45 KB













Distributed Memory Programming with MPI
1 file(s) 1.75 MB













Interconnects
1 file(s) 439.13 KB













Performance
1 file(s) 1.58 MB













Matrix Algorithms
1 file(s) 767.63 KB













Sorting Algorithms
1 file(s) 1.19 MB













Graph Algorithms
1 file(s) 1.63 MB













Accelerator Programming with OpenACC
1 file(s) 362.38 KB