This modules aims to introduce the learner to parallel computing concepts and practical programming on multicore/multiprocessor systems. The module provides the learner with the necessary knowledge, skills and understanding to program such systems using Pthreads and OpenMP. As mutlicore systems have become ubiquitous within modern consumer technology, the associated skills and experience of parallel programming are now an essential part of every graduate's toolkit. The ready availability of skilled computing science graduates with such experience is key to supporting multicore systems as the dominant architecture.Specifically, the module aims to:- Introduce the learner to the subject of parallel computing, and associated parallel hardware and software.- Expose learners to Shared-Memory Programming.- Give learners an appreciation of the difficulties and pitfalls associated with parallel programming.
Introduction to Parallel Computing
Introduction to parallel computing. Rationale for parallel systems. How parallel computing can result in performance increases.
Parallel Hardware and Software
Background - The von Neumann architecture. Modifications to the von Neumann Model. Parallel Hardware. Parallel Software. Input/Output. Performance. Parallel Program Design. Writing and Running a Parallel Program.
Shared-Memory Programming with Pthreads
Processes, Threads and Pthreads. "Hello World" Program. Matrix-Vector Multiplication. Critical Sections and associated synchronisation issues. Caches, Cache Coherency and False Sharing. Thread-Safety. Comparison of Shared-Memory Programming with Distributed Memory Programming: Pthreads versus MPI.
Shared-Memory Programming with OpenMP
Introduction to OpenMP. A simple Trapezoidal Rule program. Scope of Variables. The Reduction Clause. Directives. Loops in OpenMP.
Parallel Program Development
Two problems examined in detail: n-Body Solvers and Tree Search. Parallelisation of each problem. Coding and Evaluation of the resulting Parallel Programs.
|Module Content & Assessment