| OPENMP API Specification: Version 5.1 November 2020

1  Overview of the OpenMP API

The collection of compiler directives, library routines, and environment variables that this document describes collectively define the specification of the OpenMP Application Program Interface (OpenMP API) for parallelism in C, C++ and Fortran programs.

This specification provides a model for parallel programming that is portable across architectures from different vendors. Compilers from numerous vendors support the OpenMP API. More information about the OpenMP API can be found at the following web site


The directives, library routines, environment variables, and tool support that this document defines allow users to create, to manage, to debug and to analyze parallel programs while permitting portability. The directives extend the C, C++ and Fortran base languages with single program multiple data (SPMD) constructs, tasking constructs, device constructs, worksharing constructs, and synchronization constructs, and they provide support for sharing, mapping and privatizing data. The functionality to control the runtime environment is provided by library routines and environment variables. Compilers that support the OpenMP API often include command line options to enable or to disable interpretation of some or all OpenMP directives.

 1.1  Scope
 1.2  Glossary
  1.2.1  Threading Concepts
  1.2.2  OpenMP Language Terminology
  1.2.3  Loop Terminology
  1.2.4  Synchronization Terminology
  1.2.5  Tasking Terminology
  1.2.6  Data Terminology
  1.2.7  Implementation Terminology
  1.2.8  Tool Terminology
 1.3  Execution Model
 1.4  Memory Model
  1.4.1  Structure of the OpenMP Memory Model
  1.4.2  Device Data Environments
  1.4.3  Memory Management
  1.4.4  The Flush Operation
  1.4.5  Flush Synchronization and Happens Before
  1.4.6  OpenMP Memory Consistency
 1.5  Tool Interfaces
  1.5.1  OMPT
  1.5.2  OMPD
 1.6  OpenMP Compliance
 1.7  Normative References
 1.8  Organization of this Document