OpenMP is a standard of programming on scaling SMP-systems (SSMP, ccNUMA etc) in the shared memory model. In the shared memory programming model all the processes use the common address space which they asynchronously address with reading and writing requests. OpenMP standard includes specifications of the set of the compiler's directives and the environment's functions and variables. Development of OpenMP specification is performed by several large hardware and software manufacturers whose work is regulated by a non-commercial organization called OpenMP Architecture Review Board (ARB). The main purpose of creating OpenMP was to set programmers free from multi-thread complexity allowing them to focus on more important high-level issues. The main OpenMP advantages are:
"Incremental paralleling" of a program. OpenMP is an ideal for the developers who want to quickly parallel their calculating programs with large parallel loops. A developer does not create a new parallel program but simply sequentially adds OpenMP-directives into the text of a sequential program.
An OpenMP-program can be used as a sequential program on a single-processor platform, that is there is no need to support both the sequential and parallel versions.
Good portability. If the compiler does not even support OpenMP-directives, it still will compile a workable program which will be executed sequentially.
One of OpenMP's advantages is also support of so called "orphan" (separated) directives, that is directives of synchronizing and distributing work may not directly be included into the lexical context of the parallel area.
Parallel software development is not only a difficult algorithmic task. Parallel software is also difficult to test because errors in such programs occur irregularly and fail to be recalled. One of the methods of searching errors in parallel programs is to use static analyzers that work with the source code and do not depend on the execution environment.