The course covers the core concepts, models, paradigms and techniques for concurrent programming. This forms the basis for operating systems, distributed systems and multiprocessor systems, including multicore systems. The course studies foundations and principles of concurrent programming. It gives hands-on introductions to modern programming environments, such as pthreads, openMP, MPI, Java threads, concurrent utilities, sockets and RMI.
Concurrent programming concepts, models and paradigms. Multithreaded and parallel programming with threads and shared variables. Processes and threads. Mutual exclusion and condition synchronization. Introduction to axiomatic semantics of concurrent programs. The critical section problem, locks and condition variables, barriers. Data parallelism. Selective mutual exclusion problems. Semaphores, monitors, and concurrent objects (locking, lock-free, wait-free). Multicore architectures and systems; task-centric programming models; performance models. OS support for processes and synchronization in a single processor and a multiprocessor. Concurrent programming environment: pthreads, openMP, Java threads and concurrent utilities. Distributed programming with processes. Distributed programming with message passing, RPC, RMI and rendezvous. Paradigms for process interaction. Distributed programming environments: Java Socket API, Java RMI, MPI. An introduction to parallelism in Scientific Computing Aim and Learning Outcomes The overall aim of this course is twofold.
First, to provide the necessary knowledge in foundations of concurrent programming, more specifically, in programming models, concepts, paradigms, techniques, synchronization and communication mechanisms; Second, to obtain practical skills and experience in concurrent programming environments for development of parallel and distributed programs. After completion of the course, a student should have a good understanding of the problems and solution strategies of concurrent programming in order to be capable to develop, to implement and to evaluate parallel applications for shared-memory multiprocessor as well as distributed applications for distributed platforms.