OpenMP is a compiler directive based standard developed in the late 1990s jointly by a group of main computer hardware and software vendors. It is portable across a lot of popular platforms including Unix and Windows NT platforms. The OpenMP Fortran API was released on October 28, 1997 and the C/C++ API was released in late 1998. We shall talk about only about C/C++ API.
The OpenMP API uses the fork-join model of parallel implementation. As soon as an OpenMP program starts implementing it creates a single thread of implementation, known as the initial thread. The initial thread implements sequentially. As early as it gets a parallel construct, the thread makes additional threads and works as the master thread for all threads. All of the new threads implement the code inside the parallel construct. Only the master thread continues implementation of the user code beyond the end of the parallel construct. There is no restriction on the number of parallel constructs in a one program. When a thread with its child threads encounters a work-sharing construct, the work inside the construct is separated between the members of the team and implemented co-operatively instead of being implemented by every thread. Implementation of the code by every thread in the team resumes after the end of the work-sharing construct. Library routines and the Synchronization constructs are available in OpenMP to co-ordinate threads and data in parallel and work-sharing constructs.
Each OpenMP directive begins with #pragma omp. The general syntax is
#pragma omp directive-name [Set of clauses]
where omp is an OpenMP keyword. There may be additional clauses (parameters) after the directive name for dissimilar options.
Now, we shall talk about some compiler directives in OpenMP.