Parallel computing has long played a vital role in addressing the performance demands of high-end engineering and scientific applications. Over the last decade, parallel computing has become important to a much broader audience as the regular increases in clock speed that previously fueled performance increases became infeasible. Today, nearly all computer systems --- phones, game consoles, laptops, desktops, supercomputers, and large-scale data centers --- are being built using chips with multiple processor cores. Almost all increases in the performance of recent processors comes from more parallelism rather than increases in clock speed. The shift to multicore chips affects all segments of the IT industry and all areas of Computer Science.
The goal of COMP 422/534 is to introduce you to the foundations of parallel computing including the principles of parallel algorithm design, analytical modeling of parallel programs, programming models for shared- and distributed-memory systems, parallel computer architectures, along with numerical and non-numerical algorithms for parallel systems. The course will include material on emerging multicore hardware, shared-memory programming models, message passing programming models used for cluster computing, data-parallel programming models for GPUs, and problem-solving on large-scale clusters using MapReduce. A key aim of the course is for you to gain a hands-on knowledge of the fundamentals of parallel programming by writing efficient parallel programs using some of the programming models that you learn in class.