The course will present the students with basic knowledge for working in the field of parallel and distributed computing. It will familiarize the students with the characteristics of a wide range of modern parallel systems with shared and distributed memory, starting from multi-core processors and multi-processor systems through computing accelerators to parallel systems with distributed memory. It will focus mainly on the design and implementation of efficient parallel algorithms for solving various types of computationally intensive tasks from different application areas.
The emphasis is placed on both the description of standard parallel paradigms, interfaces, languages , and libraries, and on reflecting current developments in this area by introducing the latest parallel platforms and environments. The student will be introduced to the programming of shared memory systems (OpenMP), computing accelerators, and the creation of distributed applications using the message passing model (MPI). Cloud platforms, the map-reduce model, or parallelism in Python will also be discussed.
The exercises will be devoted to the design and implementation of parallel algorithms in the OpenMP, MPI, or CUDA-C environment.