This course provides the students with working knowledge in the area of parallel systems, algorithms and programming.
It concentrates on practical development of parallel codes so that the students can make effective use of the modern parallel hardware, from supercomputers with distributed memory through multicore processors to floating point accelerators and general purpose graphic processing units, to solve computationally extensive problems from different application areas.
An emphasis is put on the introduction to standard parallel paradigms, interfaces, languages, and libraries, as well as on the reflection of the actual development in the field by providing overview of the latest parallel platforms and environments. Parallel programming of distributed memory systems (i.e. the message passing model), shared memory systems (symmetric multiprocessors), and floating-point accelerators will be presented. However, cloud platforms, map-reduce model, and parallel Matlab will be discussed as well.
The tutorials will be devoted to practical design and implementation of parallel algorithms with the help of MPI, OpenMP, UPC, CUDA-C, or parallel Matlab.