The OpenMP Architecture Review Board (ARB) is pleased to announce Version 5.0 of the OpenMP API Specification, a major upgrade of the OpenMP language. The OpenMP community has made many requests since version 4.5 was introduced in 2015. As a result OpenMP 5.0 adds many new features that will be useful for highly parallel and complex applications. OpenMP now covers the entire hardware spectrum from embedded and accelerator devices to multicore systems with shared-memory. Vendors have made reference implementations of parts of the standard, and user courses will soon be given at OpenMP workshops and major conferences.
The OpenMP API is used in a wide range of fields, from physics, automotive and aeronautic simulations to biotech, and from automation and robotics, to financial analysis. Requests from users in these fields included adding features to enhance OpenMP for the embedded system and accelerator spaces, to provide a standard interface for debugging, and to improve performance tools. In addition to meeting these requests, OpenMP 5.0 also improves portability and usability, while bringing the specification to support the latest versions of C, C++, and Fortran.
“OpenMP 5.0 adds critical features in several areas. For example, it significantly reduces the effort to use accelerators effectively through its support for unified shared memory via the requires directive and for implicit declare target directives,” said Bronis R. de Supinski, the Chair of the OpenMP Language Committee and the ARB Representative from Lawrence Livermore National Laboratory. “I have personally represented user requirements not only from the CORAL procurements but also from the Department of Energy’s Exascale Computing Project. Representatives from several other sites have brought a variety of other requirements, such as improvements to OpenMP’s tasking model.”
Version 5.0 of the OpenMP specification was jointly developed by the OpenMP ARB, a group of major computer hardware and software vendors, as well as users throughout the OpenMP community. In addition to several minor improvements, the updated specification includes the following major additions:
- Full support for accelerator devices. OpenMP now has full support for accelerator devices, including mechanisms to require unified shared memory between the host system and coprocessor devices, the ability to use device-specific function implementations, better control of implicit data mappings, and the ability to override device offload at runtime. In addition, it supports reverse offload, implicit function generation, and the ability to copy object-oriented data structures easily.
- Improved debugging and performance analysis. Two new tool interfaces enable the development of third party tools to support intuitive debugging and deep performance analysis.
- Support for the latest versions of C, C++, and Fortran. OpenMP now supports important features of Fortran 2008, C11, and C++17.
- Support for a fully descriptive loop construct. The loop construct lets the compiler optimize a loop while not forcing any specific implementation. This construct allows the compiler more freedom to choose a good implementation for a specific target than do other OpenMP directives.
- Multilevel memory systems. Memory allocation mechanisms are available that place data in different kinds of memories, such as high-bandwidth memory. New OpenMP features also make it easier to deal with the NUMA-ness of modern HPC systems.
- Enhanced portability. The declare variant directive and a new meta-directive allow programmers to improve performance portability by adapting OpenMP pragmas and user code at compile time.
The Proceedings of the IEEE recently published an article by the leaders of the OpenMP Language Committee that details many of these features as well as plans for future enhancements of the language. Subscribers to the IEEE Digital Library can access it here.
Major vendors have implemented parts of the OpenMP 5.0 specification in their products. GNU is the furthest along with their implementation of GCC and they plan to have quite a few features in the next release of GCC, viz GCC 9. In addition, vendors’ debugging and performance tools are being extended with OpenMP 5.0 features. More information can be found on the Resources tab of the OpenMP website, where you can also find links for OpenMP benchmarks and OpenMP research projects.
The OpenMP ARB has released several auxiliary documents to accompany OpenMP 5.0. These documents provide OpenMP context definitions in addition to example header files and interfaces that previously appeared in appendices of the OpenMP specification. A header file for the new tool interfaces is also provided. These associated source example will now be available in a compilable form.
The OpenMP YouTube channel is a great place to find educational videos about OpenMP, from entry-level to advanced, including information about the new features. On the OpenMP website you can find links to tutorials and advanced courses on OpenMP 5.0 given at OpenMP workshops and the SC conferences (SC18 & SC19). OpenMP workshops where courses on OpenMP 5.0 are offered are the International Workshop on OpenMP (IWOMP), the OpenMP Developers Conference (OpenMPCon), and the UK OpenMP Users’ Group. Of course, once OpenMP 5.0 implementations are widely available, the basic OpenMP courses given at universities and other venues will be updated. Finally, several books about OpenMP provide detailed lessons on the language and many OpenMP examples are available on the OpenMP website.
The OpenMP ARB has as mission to standardize directive-based multi-language high-level parallelism that is performant, productive and portable. Jointly defined by a group of major computer hardware and software vendors, the OpenMP API is a portable, scalable model that gives parallel programmers a simple and flexible interface for developing parallel applications for platforms ranging from embedded systems and accelerator devices to multicore systems and shared-memory systems. The OpenMP ARB owns the OpenMP brand, oversees the OpenMP specification and produces and approves new versions of the specification. Further information can be found at http://www.openmp.org/.