Parallel and Distributed Systems: paradigms and models

Code 305AA
Credits 9

Learning outcomes

The course aims at providing a mix of foundations and advanced knowledge in the field of parallel computing specifically targeting data intensive applications. A first, small part of the course will provide the necessary background related to the parallel hardware, from multicore to accelerators up to distributed systems such as clusters and cloud. Then the principles of parallel computing will be addressed, including measures characterizing parallel computations, mechanisms and policies supporting parallel computing and typical data intensive patterns. Eventually a survey of existing programming frameworks will be included, aimed at preparing the students to use and exploit the more modern and advanced framework currently used in both research and production institutions. As a result, the student attending the course will be given a general perspective of the parallel computing area as well as a comprehensive survey of the currently available frameworks for data intensive computing. The whole set of arguments will be complemented with practical exercises, in class—according to the bring your own device principle—or as homework assignments. The different programming frameworks used in the course will be introduced detailing the main features and usage patterns, leaving to the student the task of learning the low level syntactic details (under the supervision of the professors) as part of the homework assignments.

Contents
a) Evolution of computing devices from sequential to parallel: introduction to multicore, general purpose many core, accelerators, clusters and cloud architectures.
b) Principles of parallel computing: measures of interest (time and power), horizontal and vertical scalability, communication/sharing and synchronization mechanisms, concurrent activities (processes, threads, kernels) , vectorization, typical patterns for data intensive parallel computing. Lab exercise and assignments using state-of-the-art parallel programming frameworks targeting shared memory multicores.
c) Advanced parallel & distributed computing frameworks for data intensive applications: GPU, data stream processing and data intensive programming frameworks. Lab exercise and assignments state-of-the-art programming frameworks targeting distributed architectures or accelerators.