Course objectives
In the "Parallel and Distributed Computing" course, students will first gain a comprehensive understanding of the principles and challenges associated with parallel and distributed computing, focusing on their fundamental concept. They will also delve into the intricacies of optimizing performance and scalability within parallel and distributed systems. Furthermore, students will apply their knowledge practically by utilizing parallel and distributed computing techniques to tackle real-world problems across various domains, showcasing their ability to implement these strategies effectively. Finally, they will develop critical analytical skills by evaluating and analyzing the performance of parallel and distributed systems, enabling them to make informed decisions and optimizations.
Course learning outcomes (CLOs)
CLO: 1. Understand the principles and challenges of parallel and distributed computing [C2, Understand]
CLO: 2. Understand and optimize performance and scalability of parallel and distributed systems [C2, Understand]
CLO: 3. Apply parallel and distributed computing techniques to solve real-world problems in various domains [C3, Apply]
CLO: 4. Analyze and evaluate the performance of parallel and distributed systems [C4, Analyze]
Course Outline
Asynchronous/synchronous computation/communication, concurrency control, fault tolerance, GPU architecture and programming, heterogeneity, interconnection topologies, load balancing, memory consistency model, memory hierarchies, Message passing interface (MPI), MIMD/SIMD, multithreaded programming, parallel algorithms & architectures, parallel I/O, performance analysis and tuning, power, programming models (data parallel, task parallel, process-centric, shared/distributed memory), scalability and performance studies, scheduling, storage systems, synchronization, and tools (Cuda, Swift, Globus, Condor, Amazon AWS, OpenStack, Cilk, gdb, threads, MPICH, OpenMP, Hadoop, FUSE).