Open Multi-Processing (OpenMP)
Open multi-processing (OpenMP) is a standard, shared-memory, multi-processing application program interface
(API) for shared-memory parallelism. OpenMP is an add-on in a compiler. It provides a set of compiler directives, environment variables, and runtime library routines for threads creation, management, and synchronization. When a parallel region executes, the program creates a number of threads running concurrently. With OpenMP, forked threads have access to shared memory. For more details, visit the OpenMP home page.
MPI Versus OpenMP
The following is a list of the most common differences between MPI and OpenMP.
MPI | OpenMP |
---|---|
Available from different vendors and gets compiled on Windows, macOS, and Linux operating systems.. |
An add-on in a compiler such as a GNU compiler and Intel compiler. |
Supports parallel computation for distributed-memory and shared-memory systems. |
Supports parallel computation for shared-memory systems only. |
A process-based parallelism. |
A thread-based parallelism. |
With MPI, each process has its own memory space and executes independently from the other processes. |
With OpenMP, threads share the same resources and access shared memory. |
Processes exchange data by passing messages to each other. |
There is no notion of message-passing. Threads access shared memory. |
Process creation overhead occurs one time. |
It depends on the implementation. More overhead can occur when creating threads to join a task. |