11.6. OpenPMIx terminology

OpenPMIx is a medium-sized project containing a number of different sub-systems and a relatively big code base. Let’s first cover some fundamental terminology in order to make the rest of the discussion easier.

First, note that you will see OpenPMIx frequently referred to as just PMIx. While there is a separate PMIx Standard, there are (as of this writing) no alternative implementations of that Standard. In fact, the Standard post-dates the library by several years, and often lags behind the library in terms of new definitions. Thus, it is customary to refer to the library as just PMIx and drop the longer name - at least, until some other implementation arises (which many consider unlikely).

11.6.1. Modular Component Architecture (MCA)

See this section for a discussion of the Modular Component Architecture (MCA). Seriously. Go read it now. From reading that section, you should understand the following terms before continuing reading these docs:

  • Framework

  • Component

  • Module

  • Parameters (variables)

Frameworks, components, and modules can be dynamic or static. That is, they can be available as plugins or they may be compiled statically into libraries (e.g., libpmix).

In PMIx, configure defaults to:

  • Building libpmix as a dynamic library

  • Linking all components directly into the libpmix libraries (vs. compiling them as independent DSOs)

These defaults can be modified by command line arguments to configure.

11.6.2. Required 3rd party libraries

Note that PMIx uses two third-party libraries for core functionality:

  • Libevent or Libev

  • Hardware Locality (“hwloc”)

These are discussed in detail in the required support libraries section.