hpxMP icon indicating copy to clipboard operation
hpxMP copied to clipboard

An OpenMP runtime implemented using HPX

hpxMP: An OpenMP runtime implemented using HPX

hpxMP is a portable, scalable and flexible application programming interface using OpenMP specification that supports multi-platform shared memory multiprocessing programming in C/ C++. hpxMP is originally developed by our collaborator, Jeremy Kemp, hpxMP maps OpenMP calls to their equivalent HPX functions. OpenMP runtime shared library such as libomp.so, libgomp.so can be replaced with this library when you are running an OpenMP application.

A recorded introduction video of hpxMP can be found here.

The CircleCI contiguous integration service tracks the current build status for the master branch: CircleCI.

Motivation

OpenMP and HPX "fight against" each other if they are used in the same application as they are both controlling concurrency, doing thread scheduling, which causes performance disaster. The idea to solve this is to replace OpenMP runtime with hpxMP runtime, thus HPX will control concurrency itself. In this way, we prevent the OpenMP and HPX runtime systems from competing for resources when they are used in the same application.

Currently, STE||AR group is developing Phylanx, An Asynchronous Distributed C++ Array Processing Toolkit. This ability is useful in the context of Phylanx as our dependencies rely on libraries such as OpenBLAS which use OpenMP to manage their threading.

For long term goals, a bug free hpxMP runtime updated with most recent OpenMP specification will be implemented, and can be used in general purpose such as scientific parallel computing.

Code summary

The intel and gcc openMP runtime calls are implemented in intel_hpxMP.cpp/ gcc_hpxMP.cpp

The bulk of the work is done in hpx_runtime.cpp.

The OMPT support is implemented in ompt_hpx_general.cpp

The tests are under folder tests/, which are performing automatic tests for this program. Some of the tests are adapted from examples under folder examples/omp/tests/src which were written by Jeremy Kemp.

This is a different hpx_runtime than the one defined in the hpx implementation, and will eventually need to be replaced.

Installation

Please refer to Install Instruction for detailed instruction on how to install hpxMP.

Usage Examples

Please refer to Usage Examples for simple use examples.

DONEs and TODOs

Please refer to dones and todos for information about what has been implemented in hpxMP and what needs to be done.

Credit

Please cite as Jeremy Kemp, Tianyi Zhang, Shahrzad Shirzad, Bryce Adelstein Lelbach aka wash, Hartmut Kaiser, Bibek Wagle, … Alireza Kheirkhahan. (2019, November 26). STEllAR-GROUP/hpxMP: hpxMP v0.3.0: An OpenMP runtime implemented using HPX (Version v0.3.0). Zenodo. http://doi.org/10.5281/zenodo.3554559