OpenSHMEM is an increasingly popular standard of the SHMEM programming model. There are many different OpenSHMEM implementations such as Sandia OpenSHMEM, OSHMEM in Open MPI, Cray SHMEM etc. Many of these implementations utilize only one or a few network providers and platforms.
On the other hand, MPI has been the de facto standard for parallel programming for more than 2 decades. Popular MPI implementations provide good performance on supports a wide range of platforms. To leverage MPI’s performance and portability, we attempt to build an OpenSHMEM implementation on top of MPI, called OSHMPI.
- Full support of OpenSHMEM specification 1.4.
- Function inline for all OSHMPI internal routines..
- Caching internal MPI communicators for collective operations with PE active set.
- OpenSHMEM multithreading safety support.
- Active message support of OpenSHMEM atomic operations. MPI accumulates cannot be directly used because MPI does not guarantee atomicity between different reduce operations.
- Optional asynchronous progress thread support for active message based atomic.
- OSHMPI achieves comparable latency and message rate to Sandia OpenSHMEM (SOS) using OFI/psm2 on an Intel Omni-path cluster.
- OSHMPI is also close to the pure communication performance which is shown by using only the native OFI write/read operations.