To provide students with a deep, critical and systematic understanding of key issues and effective solutions for parallel programming for systems with multi-core processors and parallel architectures.
To develop students appreciation of a variety of approaches to parallel programming, including using MPI, OpenMP and CUDA.
To develop the students skills in parallel programming using MPI, OpenMP and CUDA.
To develop the students skills in parallelization of existing serial code.
Introduction to multi-core processors and parallel architectures, symmetric multiprocessing (SMP), computer clustered multiprocessing, Intel Many-Integrated Core architecture: opportunities and challenges (3 lectures); applications of high-performance parallel computing and business benefits of HPC: an overview (1 lecture); Elements of parallel programming: decomposition; scaling and speedup; threads; synchronization (3 lectures); MPI Overwiew (1 lecture); Principles of MPI programming for clustered multiprocessing (4 lectures); OpenMP Overview (1 lecture); Principles of OpenMP programming for SMP architectures (4 lectures); graphics processing units (GPU) and programming for compute unified device architecture (CUDA) (4 lectures); comparison of parallel programming languages, including MATHLAB, X10, Chapel, UPC, XcalableMP (1 lecture); combining MPI, OpenMP and CUDA (2 lecture); performance and scalability evaluation and testing (3 lectures) parallel debugging ( 1 lecture); parallelization of existing serial code: opportunities and challenges (2 lectures).
(LO1) At the end of the module students should be able to: Explain the concepts of multi-core processors and systems and parallel architectures, their advantages and challenges of their programming.
(LO2) Appraise the differences between various programming techniques and programming patterns available for parallel programming for multi-core systems and parallel architectures.
(LO3) Design parallel multi-threaded programs using the most appropriate for a particular application approach, using one of MPI, OpenMP, CUDA, or a combination of thereof.
(LO4) Design and implement reasonably sophisticated parallel multi-threaded programs demonstrating reasonable scalability on multi-core and parallel systems using MPI, OpenMP, or CUDA, or the combination of thereof.
(LO5) Analyse and evaluate the efficiency and scalability of parallel multi-threaded programs for multi-core parallel systems.
(S1) Improving own learning/performance - Personal action planning
(S2) Communication (oral, written and visual) - Presentation skills
(S3) Communication (oral, written and visual) - Report writing
(S4) Critical thinking and problem solving
(S5) Information skills - Critical reading
(S6) Numeracy/computational skills - Reason with numbers/mathematical concepts
(S7) Numeracy/computational skills - Problem solving
Teaching Method 1 - Lecture
Teaching Method 2 - Tutorial
Teaching Method 3 - Laboratory Work