Skip to content
This repository has been archived by the owner on Nov 27, 2020. It is now read-only.

Latest commit

 

History

History
182 lines (139 loc) · 4.33 KB

index.md

File metadata and controls

182 lines (139 loc) · 4.33 KB
title layout slidelink
Research Software Engineering with C++
default
false

Introduction

In this course, we build on your knowledge of C++ to enable you to work on complex numerical codes for research. Research software needs to handle complex mathematics quickly, so the course focuses on writing software to perform multi-threaded computation. But research software is also very complicated, so the course also focuses on techniques which will enable you to build software which is easy for colleagues to understand and adapt.

Pre-requisites

  • Prior knowledge of C++, see below.

  • You should understand how your compiler toolchain works.

  • You must also understand how to use a Unix style terminal, including commands such as ls, cd and creating and editing files in a text editor of your choice.

  • We have provided setup instructions for installing the software needed for the course on your computer.

  • Eligibility: This course designed for UCL post-graduate students but with agreement of their course tutor a limited number of undegraduate students can also take it.

Your C++ knowledge should include:

  • Compiling a library, using CMake.
  • Testing and debugging
  • Arrays and structures
  • Containers
  • Classes
  • Operator overloading
  • Inheritance and polymorphism

This could be obtained through online resources such as the the C++ Essential Training course by Bill Weinman on LinkedIn Learning (accessable using your UCL single sign-on) or via a variety of C++ courses in college, such as MPHYGB24.

Registration

Members of doctoral training schools, or Masters courses who offer this module as part of their programme should register through their course organisers.

This course may not be audited without the prior permission of the course organiser Dr. Jim Dobson as due to the practical nature of the lectures there is a cap on the total number of students who can enroll.

##Synopsis

This year we propose to cover the following topics. These notes will be updated as we go through the course.

1. Intro

  • Course structure and admin
  • CMake
  • Unit tests
  • Getting setup with the development environment

2. Modern C++ (1)

  • Recap of features and concepts
  • OO concepts: encapsulation and data abstraction, inheritance, polymorphism

3. Modern C++ (2)

  • Lambda constructs
  • C++ standard library

4. Modern C++ (3)

  • Extensible code design
  • Patterns
  • Templates

5. Libraries for research computing

  • Boost
  • Linear algebra packages

6. Code Quality

  • Tools for pretty code
  • Memory leaks
  • Profiling
  • Benchmarking

7. Performance programming

  • What a computer is and how one works
  • Memory, processors, and cores
  • Caches
  • How parallel computers work
  • Shared and distributed memory
  • Schedulers and job submission

8. Shared memory parallelism (1)

  • OpenMP
  • Parallel sections, Reduction
  • Safety, Locks and races

9. Shared memory parallelism (2)

  • Task-oriented parallelism
  • Load balancing

10. Distributed memory parallelism

  • Message passing, MPI
  • Parallel storage
  • Parallel algorithms and design

Versions

You can find the course notes as HTML via the navigation bar to the left.

The notes are also available in a printable pdf format.