Channels ▼


Introduction to OpenMP

OpenMP Programming Model

Shared Memory, Thread Based Parallelism:

  • OpenMP is based upon the existence of multiple threads in the shared memory programming paradigm. A shared memory process consists of multiple threads.

Explicit Parallelism:

  • OpenMP is an explicit (not automatic) programming model, offering the programmer full control over parallelization.

Fork - Join Model:

  • OpenMP uses the fork-join model of parallel execution:

  • All OpenMP programs begin as a single process: the master thread. The master thread executes sequentially until the first parallel region construct is encountered.

  • FORK: the master thread then creates a team of parallel threads

  • The statements in the program that are enclosed by the parallel region construct are then executed in parallel among the various team threads

  • JOIN: When the team threads complete the statements in the parallel region construct, they synchronize and terminate, leaving only the master thread

Compiler Directive Based:

  • Most OpenMP parallelism is specified through the use of compiler directives which are imbedded in C/C++ or Fortran source code.

Nested Parallelism Support:

  • The API provides for the placement of parallel constructs inside of other parallel constructs.
  • Implementations may or may not support this feature.

Dynamic Threads:

  • The API provides for dynamically altering the number of threads which may used to execute different parallel regions.
  • Implementations may or may not support this feature.


  • OpenMP specifies nothing about parallel I/O. This is particularly important if multiple threads attempt to write/read from the same file.

  • If every thread conducts I/O to a different file, the issues are not as significant.
  • It is entirely up to the programmer to insure that I/O is conducted correctly within the context of a multi-threaded program.

Memory Model: FLUSH Often?

  • OpenMP provides a "relaxed-consistency" and "temporary" view of thread memory (in their words). In other words, threads can "cache" their data and are not required to maintain exact consistency with real memory all of the time.

  • When it is critical that all threads view a shared variable identically, the programmer is responsible for insuring that the variable is FLUSHed by all threads as needed.

  • More on this later...

Example OpenMP Code Structure

Fortran - General Code Structure



       // Serial code 


      // Beginning of parallel section. Fork a team of threads. 
     //  Specify variable scoping 

       // Parallel section executed by all threads 
             .. .

       // All threads join master thread and disband 


       // Resume serial code 



C / C++ - General Code Structure

#include <omp.h>

main ()  {

int var1, var2, var3;

// Serial code

// Beginning of parallel section. Fork a team of threads.
// Specify variable scoping 
#pragma omp parallel private(var1, var2) shared(var3)

 // Parallel section executed by all threads 

  // All threads join master thread and disband 


// Resume serial code 


Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.