Skip to main content


Teaching in Durham is associated with the departments and not with the individual reserach groups. However, the scientific computing research group champions a couple of courses within the University, and it organises a cross-departmental training agenda outside of the classic undergrad/postgrad degrees.


Advances in many fields from science, engineering and economy will be driven by those skilled in handling large parallel machines and data sets with extreme volume or velocity. The Durham MSc in Scientific Computing and Data Analysis (MISCADA) trains students in these areas, equips them with essential professional, entrepreneurial and collaborative skills, and gives them the opportunity to apply all acquired knowledge to challenging, state-of-the-art problems from a computational specialisation area.

Courses in the department

We organise and lead the MISCADA MSc programme. Group members deliver a number of courses on numerical methods and high performance computing in both this MSc and also the Computer Science undergraduate programme.

The MISCADA courses are available to PhD students in the University on an informal basis: please get in touch with the relevant lecturer.

COMP3577 · Parallel Scientific Computing I

This introductory course teaches fundamentals of scientific computing and the numerical solution of problems in science and engineering.

It covers numerical stability and integration of ordinary differential equations with a focus on the use of parallel programming techniques and the development of understanding of appropriate parallelisation schemes.

COMP3547 · Deep Learning and Reinforcement Learning

Deep Learning focuses on statistical learning theory and high-dimensional differentiable geometry to develop modern neural networks that generalise. It covers principles to build and train deep generative models and discriminative models with PyTorch.

Reinforcement learning covers foundations from dynamic programming, Monte Carlo methods, and temporal-difference learning to train agents in non-iid environments. These maximise future rewards such as to learn to play games or control robots in OpenAI Gym.

COMP4187 · Parallel Scientific Computing II

The follow-on from COMP3577, this course introduces discretisation techniques for partial differential equations along with implicit ODE solvers. The focus is on algorithmically optimal methods, and we introduce multigrid approaches for scalar elliptic equations.

In tandem, the course covers programming paradigms for massively parallel, distributed memory architectures, and efficient data structures for the implementation of parallel PDE solvers.

PHYS52015 · Introduction to High Performance Computing

This course, part of the MISCADA MSc provides an introduction to the dominant programming paradigms in high performance scientific computing. Taken as a core course by all MISCADA students, and also available to graduate students across the University.

The course covers OpenMP and MPI programming in C, and introduces the concepts and tools needed to write and run parallel programs efficiently.

COMP52315 · Performance Engineering

COMP52315 Performance Modelling, Vectorisation and GPU Programming This course is an optional course in MISCADA, and covers performance analysis, modelling and engineering for scientific computing.
It equips students to answer the question “Given some code, which I would like to run faster, how do I know what to do?”.
The module outlines the differences between CPU and GPUs architectures and covers parallel programming skills for heterogenous hardware with SIMD intrinsics, CUDA, OpenMP and SYCL.