ABSTRACT

This chapter considers OpenMP threading, and discusses how best to utilize OpenMP directives to thread a previously un-threaded application. The most important aspect of utilizing the non-uniform memory architecture architecture of a node is to ensure that the hybrid application has the MPI tasks and threads within the Message Passing Interface (MPI) allocated correctly on the node. The ultimate method for adding OpenMP threading is to investigate the SPMD approach discussed later in this section. The SPMD approach can require significant refactoring of an application and in some cases may not be appropriate. The WOMBAT project has had the benefit that collaboration with the MPI developers has excellerated the development of not only a thread-safe MPI, but an extremely efficient thread-safe MPI that minimizes locks to achieve very good scaling. WOMBAT takes minimization of synchronization to extreme, by having each thread perform its own messaging with MPI RDMA, recently available in the MPI standard.