Pioneer in the directive-based approach to program accelerators, CAPS started to design the OpenHMPP set of directives in 2007. The objective was and is still to let developers handle hardware accelerators without the complexity associated with GPU programming. This approach based on directives enables a loose relationship between an application code and the use of hardware accelerators. Since, then CAPS, CRAY, NVIDIA and PGI have joint their effort to release in 2011 OpenACC, a common set of directives.
OpenHMPP can be seen as a superset of the OpenACC API with advanced features such as the management of multiple devices, the use of accelerated librairies with directives, the integration of hand-written CUDA device kernels, and code generation directives that either increase kernel parallelism with loop transformations or enable the use of accelerator specific features such as device shared memory.
Created in 2007, OpenHMPP has been jointly designed and used by major HPC leaders. As a high level of abstraction for programming GPUs in scientific applications, OpenHMPP preserves customers’ software assets by keeping applications portable.
The OpenHMPP directive-based programming model offers a powerful syntax to efficiently offload computations on hardware accelerators and to optimize data movement. OpenHMPP directives describe remote procedure call (RPC) on an accelerator device (e.g. GPU) or more generally a set of cores. The directives annotate C or Fortran codes to describe two sets of functionalities:
- The offloading of procedures (denoted codelets) onto a remote device;
- The optimization of data transfers between the CPU main memory and the accelerator memory.
OpenHMPP Directives concept
The OpenHMPP directives may be seen as “meta-information” added in the application source code.
They are safe meta-information i.e. they do not change the original code behavior.
They address the remote execution (RPC) of a function as well as the transfers of data to/from the HWA memory.
The table below introduces the OpenHMPP directives.
The OpenHMPP directives address different needs:
- Some of them are dedicated to declarations;
- Others are dedicated to the management of the execution.
|Control flow instructions||Directives for data management|
Beside CAPS that implements the OpenHMPP directives, PathScale is the other compiler vendor that supports OpenHMPP.