Permite añadir concurrencia a los programas escritos en C, C++ y Fortran sobre la base del modelo de ejecución fork-join.
Para octubre se lanza la versión 1.0 de la especificación OpenMP para Fortran y para el año siguiente empiezan a aparecer las primeras aplicaciones híbridas con MPI y OpenMP.
En 2001 se forma la cOMPunity creada por usuarios de OpenMP, así mismo se crean talleres en América del Norte, Europa y Asia.
Provocando que OpenMP opere más allá de sus límites tradicionales.
En 2015 se lanza la versión 4.5 la cual añade soporte para algunas características de Fortran 2003.
En cualquiera de los dos casos, cuando se publica una versión, siempre hay un período de tiempo antes de que los desarrolladores del compilador se pongan al día para agregar todas las nuevas funciones y correcciones a su lenguaje.
Debido a que la compatibilidad con el compilador no está completamente implementada para la versión 5.0 de OpenMP.
OpenMP ARB (es decir, la corporación propietaria de OpenMP) ha calificado la versión 5.0 como un "gran avance", ya que en sus propias palabras: "agrega muchas características nuevas que serán útiles para aplicaciones altamente paralelas y complejas", muchas de las cuales fueron solicitadas por los usuarios.
Con esto, se espera que una próxima versión 6.0 contenga más soporte para sistemas en tiempo real y algunos cambios en la terminología.
[2] OpenMP se basa en el modelo fork-join, paradigma que proviene de los sistemas Unix, donde una tarea muy pesada se divide en K hilos (fork) con menor peso, para luego "recolectar" sus resultados al final y unirlos en un solo resultado (join).
Este tipo de ejecución se denomina fork-join.
El uso de tareas da lugar a sincronización con una granularidad más fina.
Este sobrecoste ha de ser amortizado mediante el potencial paralelismo adicional que las tareas exponen.
En cambio, dos dependencias de escritura sobre el mismo valor-i serán siempre serializadas, puesto que modifican la memoria.
Las WAR y WAW se tienen como falsas dependencias puesto que la dependencia existe por tener un mismo nombre (dirección de memoria del valor-i).
Si la tarea no lee dicha dirección de memoria, solo la escribe, a efectos prácticos le da igual que otra instrucción anterior la lea.
También permite manejar candados (locks) y tomar mediciones de tiempo.
[3] Hay partes de la especificación que son dependientes de la implementación por lo que el programa no tiene porqué comportarse igual si el binario se genera primero con una implementación y luego por otra.
La asignación de identificadores a procesadores no sigue siempre el mismo orden salvo que se indique lo contrario.
Las funciones aquí listadas se corresponden con la versión 4.5 del estándar OpenMP.
Estas funciones se enlazan según las normas del lenguaje C y no lanzan excepciones.