# OpenPMIx v5.0.7a1

The charter of the PMIx community is to:

1. Develop an open source (non-copy-left licensed) and independent (i.e., not affiliated with any specific programming model code base) standalone library to support application interactions with Resource Managers (RMs).

2. Retain transparent compatibility with the existing PMI-1 and PMI-2 definitions, and any future PMI releases.

3. Support the Instant On initiative for rapid startup of applications at exascale and beyond.

4. Work with the HPC community to define and implement new APIs that support evolving programming model requirements for application-RM interactions.

> Note

> 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).

PMIx is designed to be particularly easy for resource managers to adopt, thus facilitating a rapid uptake into that community for application portability. Both client and server libraries are included, along with reference examples of client usage and server-side integration.

PMIx targets support for the Linux operating system. A reasonable effort is made to support all major, modern Linux distributions; however, validation is limited to the most recent 2-3 releases of RedHat Enterprise Linux (RHEL), Fedora, CentOS, and SUSE Linux Enterprise Server (SLES). Support for vendor-specific operating systems is included as provided by the vendor.

# Table of contents

- 1. Quick start
- 2. Getting help
- 3. Release notes
  - 3.1. General notes
  - 3.2. Platform Notes
  - 3.3. Compiler Notes
  - 3.4. General Run-Time Support Notes
- 4. Exceptions to the PMIx Standard
  - 4.1. Extensions
  - 4.2. Qualified Values
  - 4.3. Scheduler Integration APIs
  - 4.4. Tool APIs
  - 4.5. Utility APIs
  - 4.6. Argv Handling
  - 4.7. Value Struct Functions
  - 4.8. Data Array Functions
  - 4.9. Info Struct Functions
  - 4.10. Coordinate Struct Functions
  - 4.11. Topology Functions
  - 4.12. Cpuset Functions
  - 4.13. Geometry Functions
  - 4.14. Device Distance Functions
  - 4.15. Byte Object Functions
  - 4.16. Endpoint Functions
  - 4.17. Envar Functions
  - 4.18. Data Buffer Functions
  - 4.19. Proc Struct Functions
  - 4.20. Proc Info Functions
  - 4.21. Proc Stats Functions
  - 4.22. Disk Stats Functions
  - 4.23. Net Stats Functions
  - 4.24. Process Data Functions
  - 4.25. App Struct Functions
  - 4.26. PMIx Info List Functions
  - 4.27. Pretty-Print Functions
  - 4.28. Constants
  - 4.29. Attributes
  - 4.30. Datatypes
  - 4.31. Macros
  - 4.32. Scheduler Integration
- 5. Building and installing PMIx
  - 5.1. Installation
  - 5.2. Definitions
  - 5.3. Filesystem requirements
  - 5.4. VPATH builds
  - 5.5. Specifying compilers and flags
  - 5.6. Required support libraries
  - 5.7. `configure` command line options
  - 5.8. `configure` output summary
  - 5.9. `make` targets
  - 5.10. Installation location
  - 5.11. Advice for packagers
- 6. How Things Work
  - 6.1. Session Directories
  - 6.2. Resolving Peers and Nodes
- 7. Release Notes
  - 7.1. General notes
  - 7.2. Compiler Notes
- 8. History
- 9. Version Numbers and Binary Compatibility
  - 9.1. Software Version Number
  - 9.2. Shared Library Version Number
  - 9.3. Application Binary Interface (ABI) Compatibility
  - 9.4. Cross-Version Compatibility
- 10. The Modular Component Architecture (MCA)
  - 10.1. Terminology
  - 10.2. Setting MCA parameter values
  - 10.3. Selecting which PMIx components are used at run time
  - 10.4. Common MCA parameters
- 11. Building PMIx applications
  - 11.1. Quick start: Building PMIx-based applications
  - 11.2. Customizing wrapper compiler behavior
  - 11.3. Extracting flags from the wrapper compilers
  - 11.4. Deprecated Definitions
  - 11.5. Building fully-static PMIx applications
- 12. Developer’s guide
  - 12.1. Prerequisites
  - 12.2. GitHub, Git, and related topics
  - 12.3. Compiler Pickyness by Default
  - 12.4. Running `autogen.pl`
  - 12.5. Building PMIx
  - 12.6. OpenPMIx terminology
  - 12.7. Source code
  - 12.8. Internal frameworks
  - 12.9. Manually installing the GNU Autootools
  - 12.10. Installing and running Sphinx (building the OpenPMIx docs)
  - 12.11. ReStructured Text for those who know Markdown
- 13. Contributing to OpenPMIx
  - 13.1. Open source contributions
- 14. License
- 15. OpenPMIx Security Policy
  - 15.1. Vulnerability Disclosure Process
  - 15.2. Software Authenticity and Integrity
- 16. News
  - 16.1. PMIx v5.x series
  - 16.2. PMIx v4.x series
  - 16.3. PMIx v3.x series
  - 16.4. PMIx v2.x series
  - 16.5. PMIx v1.x series
- 17. OpenPMIx manual pages
  - 17.1. Commands (section 1)
  - 17.2. APIs (section 3)
  - 17.3. Config file manual pages (section 5)