November 1, 2021 to December 3, 2021
Europe/London timezone

This course is being run in collaboration with the EuroCC-funded UK National Competence Centre

This course is normally made available in an entirely self-service mode.

However, with support from the PRACE and EuroCC projects, we are able to offer a special version of this course with the following enhancements:

  • There will be additional staff support for the 5 weeks from Monday 1st Nov to Friday 3rd December 2021.
  • We will actively monitor the course chat room and respond to questions.
  • We will hold weekly "virtual office hours" where staff will be available to answer individual questions on all aspects of the course material and practical examples. These will take place on Fridays at 10:00 GMT (11:00 CET) - you will receive the link after registration.

Suggested timetable

Although you are welcome to follow the course at your own pace, we think that attendees will benefit if they are studying largely the same material at the same time. We would suggest the following schedule:

  • Week 1: Lectures 1 and 2; Exercise 1.
  • Week 2: Lectures 3 and 4; Exercises 2 and 3.
  • Week 3: Lectures 5 and 6; Exercise 4.
  • Week 4: Lectures 7, 8 and 9; Exercises 5 and 6.
  • Week 5: Lectures 10 and 12; Exercise 7.


Almost all modern computers now have a shared-memory architecture with multiple CPUs connected to the same physical memory, for example multicore laptops or large multi-processor compute servers. This course covers OpenMP, the industry standard for shared-memory programming, which enables serial programs to be parallelised easily using compiler directives. Users of desktop machines can use OpenMP on its own to improve program performance by running on multiple cores; users of parallel supercomputers can use OpenMP in conjunction with MPI to better exploit the shared-memory capabilities of the compute nodes. This course contains an introduction to the fundamental concepts of the shared variables model, followed by the syntax and semantics of OpenMP and how it can be used to parallelise real programs.

The course covers the following topics:

  • Basic concepts of shared memory: threads, tasks, shared/private data, synchronisation.
  • Concepts of OpenMP: parallel regions, shared/private variables, parallel loops, reductions
  • OpenMP parallel regions and associated clauses
  • OpenMP worksharing directives, scheduling of parallel loops
  • OpenMP synchronisation: barriers, critical sections, atomics, locks.
  • OpenMP tasks
  • Additional features of OpenMP: nesting, orphaning, threadprivate globals, OpenMP 4.0/4.5 feature
  • OpenMP tricks, tips and gotchas.
  • OpenMP implementations
  • Memory models.

This self-service course includes a series of Lecture videos (with transcript and slides downloadable) which you can work through at your own pace and in your own time.

Support will be provided via chat forums and a number of  office-hour tutorials.

Hands-on practical programming exercises are included, with the option of working in either Fortran or C.

Access to ARCHER2 provided for participants to build and run the exercises.

Learning outcomes:

On completion of this course, participants will be able to:

  • Understand the key concepts of shared memory programming
  • Have a knowledge of the syntax and semantics of the OpenMP API.
  • Be able to write a correct OpenMP program in C/C++ or Fortran.
  • Have an appreciation of some of the advanced features of OpenMP


This course is suitable for programmers with a working knowledge of Fortran, C or C++, and some familiarity with HPC systems, both at a practical and conceptual level.


Participants must have access to a laptop with a Mac, Linux, or Windows operating system (not a tablet, Chromebook, etc.) that they have administrative privileges on.

They are also required to abide by the ARCHER2 Code of Conduct.


This course is part-funded by the PRACE project and is free to all. Please register using the online form. If you have any questions, please consult the course forum page or contact