Module overview
Aims and Objectives
Learning Outcomes
Knowledge and Understanding
Having successfully completed this module, you will be able to demonstrate knowledge and understanding of:
- Explain parallelism using the concept of an iteration space
 - Describe the types of parallelism provided by contemporary hardware platforms
 - Explain how parallelism can speed-up programs, and why this speed-up is often limited
 
Subject Specific Practical Skills
Having successfully completed this module you will be able to:
- Use CUDA or OpenCL to accelerate a given function using a GPU or FPGA
 - Use C++ to accelerate a given function using threads and SIMD
 
Subject Specific Intellectual and Research Skills
Having successfully completed this module you will be able to:
- Identify data-races in a program and use locking or synchronisation to remove them
 - Analyse a parallel algorithm and choose an appropriate programming paradigm and hardware target
 - Analyse a given program and identify opportunities for parallelism
 
Syllabus
Core concepts for parallelism:
- What is parallelism?
- Typical hardware structures supporting parallelism
- Iteration spaces
- Performance expectations, limitations, and prediction
- Hazards and conflicts
- Locking and synchronisation
Frameworks and languages for parallel programming
- Threads (C++)
- SIMD (Intrinsics)
- GPUs (CUDA)
- FPGAs (OpenCL)
Application and optimisation:
- Example: regular bulk synchronous problem
- Example: irregular asynchronous problem
- Profiling and optimisation
- Design patterns for parallel programming
- Parallel programming in distributed systems
    Learning and Teaching
Teaching and learning methods
Lectures, problem-classes, and independent coursework
      
              | Type | Hours | 
|---|---|
| Lecture | 36 | 
| Problem Classes | 12 | 
| Completion of assessment task | 46 | 
| Revision | 10 | 
| Guided independent study | 46 | 
| Total study time | 150 | 
Assessment
Summative
This is how we’ll formally assess what you have learned in this module.
| Method | Percentage contribution | 
|---|---|
| Computing assignment | 30% | 
| Computing assignment | 30% | 
| Exam | 40% | 
Referral
This is how we’ll assess you if you don’t meet the criteria to pass this module.
| Method | Percentage contribution | 
|---|---|
| Exam | 100% | 
Repeat
An internal repeat is where you take all of your modules again, including any you passed. An external repeat is where you only re-take the modules you failed.
| Method | Percentage contribution | 
|---|---|
| Exam | 100% |