We have entered the era of multi-core architectures and, as the applications' demands are still growing, we soon expect  to see the first many-cores which will feature hundreds or even thousands of cores. Therefore, introducing as much parallelism as possible into software applications has become ever so urgent. A major obstacle in this direction comes from the difficulty of developing distributed data structures and algorithms. This difficulty is inherent in achieving efficient synchronization and communication between processes that run concurrently.

The proliferation of multicore architectures is obviously a serious reason for studying concurrent and distributed programming but it is certainly not the only one. Distributed systems are nowadays widely used in all aspects of everyday life. Modern distributed applications should exhibit high performance and be highly fault-tolerant. The design of efficient, fault-tolerant, concurrent distributed algorithms plays a vital role in simplifying the task of programming of a distributed system, but designing such algorithms is notoriously difficult, and therefore it is a task with which none but a few experts can cope.

This course focuses on the design and analysis of distributed algorithms for current multi-cores in which communication occurs via shared memory and future many-cores which are expected to feature several islands providing cache-coherence only between the cores of the same island but not across cores residing in different islands (so explicit communication via message-passing may be needed to achieve communication across islands). The course studies appropriate models of distributed computing to capture the subtleties of modern architectures, as well as major techniques for the design and analysis of distributed data structures and algorithms. The biggest part of the course is devoted to synchronization and communication mechanisms. The course aims at providing theoretical foundations, without which it is impossible to design correct distributed algorithms, check the correctness of current distributed implementations, capture all the details of their performance, discover their inherent limitations and establish optimality results, or determine whether any design tradeoffs are indeed fundamental or simply artifacts of certain environments. The main objective of the course is to supply the students with all the required dexterities for a rigorous and complete theoretical study of current multi-core and future many-core systems.

This class is geared toward graduate students at all levels as well as advanced undergraduates.


Major objectives

  • Understanding the major tools and techniques that allow programmers to effectively program the parts of the code that require substantial communication and synchronization;
  • Studying the core ideas behind modern coordination and communication paradigms and distributed data structures;
  • Introduce a variety of methodologies and approaches for reasoning about concurrent and distributed programs;
  • Realizing not only the basic principles but also the best practice engineering techniques of concurrent and distributed computing;
  • Presenting techniques to formally study the safety and progress properties of concurrent and distributed algorithms;
  • Analyzing the performance of current multi-core and future many-core systems.

Last modified: Thursday, 19 November 2015, 1:12 PM