Enrolment options

This course will cover modern C++ programming including:

  • Topic 1: Compile-Time Computations Using C++20 Ranges
    • This topic will introduce how to use C++20 ranges can be used in code to generate, at compile-time, tables of numbers that are compile-time constants which can be used to help write code that runs faster.
  • Topic 2: Chrono, Benchmarking, and Algorithms
    • This topic will demonstate how to use the C++ standard library's <chrono> header to microbenchmark code and how to easily use the standard library's (sequential and parallel) algorithms (including using parallel algorithms on GPUs when using NVIDIA's NVHPC SDK).
  • Topic 3: Multidimensional Arrays: mdspan and submdspan
    • This topic will demonstrate how to use C++23's multi-dimensional arrays (mdspan) and C++26's ability to "slice" those arrays (submdspan). Traditionally multi-dimensional arrays and slices of them has been a feature of Fortran and some recent languages --but not C++. This has changed.
    • NOTE: While neither C++23 nor C++26 are official standards yet, all of the presented code will work with an open source reference implementation with C++14 code or newer.
  • Topic 4: Parallel Pseudo-random Number Generation
    • This topic will present-discuss how the C++ sequential PRNGs can be used safely concurrent/parallel programs.
    • While the focus of this topic will be on using the parallel PRNGs presented, this topic will include provided code and a very brief introduction to mutexes, locks, atomics, and threads which can be useful in situations that one needs more control over how parallel code runs while also striving to minimize overheads of such.


Live online classes will take place on Mon. Nov. 20, Wed. Nov. 22, Mon. Nov. 27, and Wed. Nov. 29 from 1pm to 2pm Eastern Time. Recordings of live sessions will be available afterwards for self-paced learning.

Access is restricted to Digital Research Alliance of Canada (formerly Compute Canada) authenticated users only: Yes
Self enrolment (Participant)
Self enrolment (Participant)