CSC 2/458 deals with parallel computing and distributed computing. Nearly all the computers you use today in daily life -- from your mobile phone to your laptop -- are parallel computers. Without writing a parallel program, you cannot use the full capabilities of these machines.

Similarly, whenever you type in a web search query, perform an ATM transaction or solve large and complicated scientific problems, you are utilizing the services of many computers that work together to solve your problem. Such distributed systems are built using the principles of distributed computing. Distributed systems are ubiquitous, not just in computing, but also in other areas of real life.

This course will teach you how to build parallel and distributed systems that are correct and fast.


We will cover a wide range of topics:

  • Parallel Machines and Machine Models
  • Dependence-based Automatic Parallelization in hardware and in software
  • Explicit Parallelization: Parallel Programming Languages and Models (Directive-based models such as OpenMP, Task-based models such as Cilk/X10, Low-level programming models such as multithreading and multiprocessing)
  • Shared-memory Synchronization: Coherence, Consistency, Synchronization Primitives and their implementation, Transactional Memory, etc.
  • Parallel Data Structures
  • Distributed Systems, Machine Architectures, Programming Models (e.g. MPI)
  • Distributed Protocols/Algorithms for termination, consensus, checkpointing, etc.
  • Case studies of distributed systems: filesystems, blockchain, etc.

This is not an exhaustive list and is subject to change.


If you have a disability for which you may be requesting an academic accommodation, you are encouraged to contact both your instructor and the access coordinator for your school to establish eligibility for academic accommodations.

See this for more information.