The course examines the design principles and system-level aspects of parallel computing from the perspective of computer architecture and parallel processing. It covers techniques for developing efficient code on modern computing systems, leveraging the memory hierarchy, analyzing data dependencies, and using vector instructions, either directly or through the compiler.
The course includes the following thematic units:
- Basic performance concepts (FLOPs, MIPS, execution time)
- Processors: ILP, pipelines, superscalar, VLIW
- Processes and IPC (inter-process communication)
- Fundamental principles of parallelism (Amdahl’s Law, Flynn’s taxonomy)
- Use of threads and compiler optimizations
- Parallel programming with OpenMP (basic → advanced → tasks)
- SIMD and vectorization
- Caches and multicore systems (MIMD)
- Memory coherence and consistency (atomic, critical, MSI, etc.)