The objectives of this course are to introduce students to High-Performance Computing (HPC) and to give students the ability to understand, analyze, design and implement parallel software solutions. Students will develop skills in writing message-passing parallel codes for accelerating computational problems. Core concepts such as parallel efficiency and load balancing will be covered. The course features detailed analysis of effective techniques for parallel processing of inherently parallel problems and provides a foundation for critically analyzing current and future HPC solutions. Additionally, General Purpose Graphics Processing Units (GPGPUs) will be introduced as parallel co-processors. 

The following topics will be covered: 

• Basic parallel computer architectures • Distributed parallel computing using the Message-Passing Interface (MPI) • Shared memory parallel computing using OpenMP • Evaluating parallel programs • Partitioning strategies • Load balancing • Algorithms and applications • Co-processor acceleration using GPGPUs