PMIx Standard Releases

The following versions of the PMIx Standard document are available:

Direct repository link to the latest release.

You can track current developments on the community resources for contributors.

Expectations attached with the PMIx Standard

While an implementor of the PMIx library itself must at least include the standard PMIx headers and instantiate each function, they are free to return “not supported” for many function they choose not to implement.

This also applies to the host environments. Resource managers and other system management stack components retain the right to decide on support of a particular function. The PMIx community highlights functions that are critical to basic application execution (e.g., PMIx_Get), while leaving flexibility for tailoring a vendor’s software for their target market segment.

Similarly, while a PMIx library implementor, or an SMS component server, may choose to support a particular PMIx API, they are not required to support every attribute that might apply to it. This would pose a significant barrier to entry for an implementor as there can be a broad range of applicable attributes to a given API, at least some of which may rarely be used. The PMIx community is attempting to help differentiate the attributes by indicating those that are generally used (and therefore, of higher importance to support) vs those that a “complete implementation” would support.

Note that an environment that does not include support for a particular attribute/API pair is not “incomplete” or of lower quality than one that does include that support. Vendors must decide where to invest their time based on the needs of their target markets, and it is perfectly reasonable for them to perform cost/benefit decisions when considering what functions and attributes to support.

The flip side of that statement is also true: Users who find that their current vendor does not support a function or attribute they require may raise that concern to their vendor and request that the implementation be expanded. Alternatively, users may wish to utilize the PMIx Reference Server as a “shim” between their application and the host environment as it might provide the desired support until the vendor can respond. Finally, in the extreme, one can exploit the portability of PMIx-based application to change vendors.

Quick Summary of features per version

This list presents a short summary of features added during different iterations of the PMIx standard. In recent revisions of the standard document, a full changelog is provided that contains a complete list of changes.

PMIx v1

The initial version of the standard, released in late 2015, covers the basic functions required to launch and wireup a parallel application. This includes the following APIs:

  • Client APIs
    • PMIx_Init, PMIx_Initialized, PMIx_Abort, PMIx_Finalize
    • PMIx_Put, PMIx_Commit, PMIx_Fence, PMIx_Get
    • PMIx_Publish, PMIx_Lookup, PMIx_Unpublish
    • PMIx_Spawn, PMIx_Connect, PMIx_Disconnect
    • PMIx_Resolve_nodes, PMIx_Resolve_peers
  • Server APIs
    • PMIx_server_init, PMIx_server_finalize
    • PMIx_generate_regex, PMIx_generate_ppn
    • PMIx_server_register_nspace, PMIx_server_deregister_nspace
    • PMIx_server_register_client, PMIx_server_deregister_client
    • PMIx_server_setup_fork, PMIx_server_dmodex_request
  • Common APIs
    • PMIx_Get_version, PMIx_Store_internal, PMIx_Error_string
    • PMIx_Register_errhandler, PMIx_Deregister_errhandler, PMIx_Notify_error

Note that the last set of APIs (focused on error handlers) was subsequently replaced in v2 with a more generalized ability to handle events. In addition, there was a modification made to PMIx_Init and PMIx_Finalize in v2 to extend their flexibility and bring them into alignment with the PMIx standard practice of including attribute arrays to support future modifications of behavior.

PMIx v2

The second version of the standard, released in mid 2017, extended the v1 release by adding support for workflow orchestration and tools.

  • Client APIs
    • PMIx_Query_info_nb, PMIx_Log_nb
    • PMIx_Allocation_request_nb, PMIx_Job_control_nb, PMIx_Process_monitor_nb
  • Server APIs
    • PMIx_server_setup_application, PMIx_server_setup_local_support
  • Tool APIs
    • PMIx_tool_init, PMIx_tool_finalize
  • Common APIs
    • PMIx_Register_event_handler, PMIx_Deregister_event_handler, PMIx_Notify_event
    • PMIx_Proc_state_string, PMIx_Scope_string, PMIx_Persistence_string
    • PMIx_Data_range_string, PMIx_Info_directives_string, PMIx_Data_type_string
    • PMIx_Alloc_directive_string
    • PMIx_Data_pack, PMIx_Data_unpack, PMIx_Data_copy, PMIx_Data_print, PMIx_Data_copy_payload

Descriptions of these APIs are provided in the v2 RFCs shown below.

PMIx v3

The third version of the standard, released in July 2018, focused on completion of “instant on” support, further support for tools and debuggers, and extension to support fabric and storage manager integration.

  • Client APIs
    • PMIx_Log
    • PMIx_Get_credential, PMIx_Validate_credential
    • PMIx_IOF_pull, PMIx_IOF_deregister, PMIx_IOF_push
    • PMIx_Allocation_request, PMIx_Job_control, PMIx_Process_monitor
  • Server APIs
    • PMIx_server_IOF_deliver
    • PMIx_server_collect_inventory, PMIx_server_deliver_inventory
  • Tool APIs
    • PMIx_tool_connect_to_server
  • Common APIs
    • PMIx_IOF_channel_string

PMIx v4

The fourth version of the standard, v4.0 released in December 2020 focused on providing schedulers with access to point-to-point communication cost information along with providing general access to network topology graphs, completion of debugger tool support, the initial support for storage requests, and support for the new PMIx Groups concept (in collaboration with the MPI Sessions Working Group). In addition, Python bindings for the PMIx APIs were introduced in this release.

v4.1 released October 2022 added a chapter to manage data storage.

v4.2 still under development will backport some of v5 features (in particular deprecation of macros and introduction of ABI compatible functions) and some erratas.

PMIx v5

The fifth version of the standard, released in May 2023, focused on defining a common PMIx ABI by assigning specific values to defined constants. A Use-Cases appendix was added to give examples of how PMIx APIs are used in existing software. PMIx Standard v5 was the first version approved using the procedures defined in the PMIx Governance v1.7 document.

  • Client APIs
    • PMIx_Topology_destruct
  • Common APIs
    • PMIx_Data_embed
    • PMIx_Value_load
    • PMIx_Value_unload
    • PMIx_Value_xfer
    • PMIx_Info_list_start
    • PMIx_Info_list_add
    • PMIx_Info_list_xfer
    • PMIx_Info_list_convert
    • PMIx_Info_list_release

Historical Standardization Process

Prior ad hoc versions of the standard were embodied in the header files of the corresponding releases of the PMIx Reference Implementation. These definitions have been superseded by the formal documents. Each version of the Standard includes information on all prior versions (e.g., the Version 2.0 document contains the definitions from Version 1) and clearly marks all additions/changes incorporated since the last release. Note that the PMIx Community chose not to release a Version 1 document due to the delay in getting the formal Standard document completed.

You can refer to the historical RFCs standardization process manifesto to review early standardization practices.