Module and Programme Catalogue

Search site

Find information on

This module is inactive in the selected year. The information shown below is for the academic year that the module was last running in, prior to the year selected.

2019/20 Taught Postgraduate Module Catalogue

COMP5811M Parallel and Concurrent Programming

15 creditsClass Size: 60

Module manager: Dr. Mai Elshehaly

Taught: Semester 1 (Sep to Jan) View Timetable

Year running 2019/20

Pre-requisite qualifications

We will assume a good standard of C++ programming, including use of classes, basic templates, and overloading. Knowledge of computer architecture, in particular the memory hierarchy.

This module is not approved as an Elective

Module summary

This module introduces students to the principles and practice of parallel and concurrent programming on shared memory architectures (both CPU and GPU). It covers the fundamental concepts underlying concurrency, in particular the complexity of managing shared resources and the language/data abstractions used to mediate interaction between threads of execution. The module also introduces students to the challenge of designing algorithms that minimise synchronisation bottlenecks, and the use of tools to understand and tune the performance of code running on parallel architectures.


* understand the fundamental concepts of concurrent programming, including: threads, shared variables, critical regions, atomics, semaphores, race conditions, deadlock
* survey and critique examples of parallel architecture, covering both multi-core (CPU) and many-core (GPU) platforms.
* develop the practical understanding and skills needed to design, program, test, debug, and tune non-trivial parallel and concurrent applications using industry-standard tools and APIs, eg. CUDA, C++.
* for concurrent programming, introduce students to lock-based and lock-free data structures
* for parallel programming, understand the complex relationships between data organisation, memory system and performance on parallel architectures, and the design and implementation of algorithms that exploit the architecture effectively, e.g. by reducing or eliminating use of locking.

Learning outcomes
Students will understand the main concepts underlying parallel & concurrent programming, the relationship of the concepts to both hardware and software, and the practical implications for software development. They will be able to write programs of intermediate complexity on both multi-core and many-core architectures using languages and tools that are in widespread industrial use. And they will understand the implications of concurrency and parallelism across the software development process, from the design of efficient data representations through to the challenge of testing, debugging and tuning programs. Over the course of the module students will also have further exposure to the tool ecosystem that is essential to professional software development.

Skills outcomes
* programming & development with industry-standard tools eg. C++ and CUDA
* professional software development


* The evolution of computer architecture
* Architectural examples
* Threads
* Shared variables, race conditions, deadlock, and semaphores
* Atomic types and operations
* SIMD instructions and maths
* Mutexes and locking
* Testing, debugging, and profiling multithreaded code
* Lock-based and lock-free concurrent data structures
* Thread management and pools
* Programming for the GPU: SIMT, blocks, grids, warps, kernels, and synchronization points.
* Efficient parallel programming: avoiding locking, exploiting specialised memory regions and coalesced access.
* Synchronizing concurrent operations
* Efficient CUDA programming: avoiding divergence, exploiting coalesced memory access, specialised memory regions, and streams.
* Thrust library

Teaching methods

Due to COVID-19, teaching and assessment activities are being kept under review - see module enrolment pages for information

Delivery typeNumberLength hoursStudent hours
Class tests, exams and assessment222.0044.00
Private study hours66.00
Total Contact hours84.00
Total hours (100hr per 10 credits)150.00

Private study

Parallel/concurrent programming introduces students to new hardware and software concepts that are both complex in themselves, and significantly complicate the task of programming. Of the ~6 hours per week of private study, 2 hours should be dedicated to comprehending the underlying theory through studying material from the module’s reading list. The remaining time will be spent carrying out practical programming exercises, both practical sheets and further exercises from the literature as indicated by the module leader.

Opportunities for Formative Feedback

The weekly supervised practical classes will provide feedback on students’ ability to deploy the new concepts covered in that week.

Methods of assessment

Due to COVID-19, teaching and assessment activities are being kept under review - see module enrolment pages for information

Assessment typeNotes% of formal assessment
AssignmentProgramming Task20.00
AssignmentProgramming Task20.00
Total percentage (Assessment Coursework)40.00

Normally resits will be assessed by the same methodology as the first attempt, unless otherwise stated

Exam typeExam duration% of formal assessment
Unseen exam 2 hr 00 mins60.00
Total percentage (Assessment Exams)60.00

Normally resits will be assessed by the same methodology as the first attempt, unless otherwise stated

Reading list

The reading list is available from the Library website

Last updated: 30/09/2019


Browse Other Catalogues

Errors, omissions, failed links etc should be notified to the Catalogue Team.PROD

© Copyright Leeds 2019