Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
7e425a4
Add initial ABI generation code and new libraries
jtronge Sep 28, 2023
eebd824
Move ABI support into big count binding code
hppritcha May 10, 2025
1881940
bindings: fix up makefile for c interfaces
hppritcha May 28, 2025
20c973b
makefile fixes
hppritcha May 29, 2025
772b08c
checkpoint
hppritcha Jun 2, 2025
50e1f7d
some fixes and start of a wrapper method
hppritcha Jul 2, 2025
5a652c6
attributes: add wrapper infrastructure
hppritcha Jul 7, 2025
3257cb5
abi: move converter functions to a persistent file
hppritcha Jul 29, 2025
a449c28
minor compiler complaint fix
hppritcha Jul 29, 2025
2b9eaa8
temp commit with comments notes
hppritcha Aug 12, 2025
2302419
Switch to using MPI Standard ABI values
Joe-Downs Jun 26, 2025
d40150d
distcheck fix and more
hppritcha Aug 21, 2025
3a65c12
git ignore additions
hppritcha Aug 23, 2025
44b620e
ABI library: don't include functions in 19.3.4/5
hppritcha Aug 23, 2025
a6da325
fixes to handle count/offset/aint in abi.h
hppritcha Aug 25, 2025
5fac420
fix req converter abi to ompi
hppritcha Aug 26, 2025
39491dd
fix problem with request_get_status_some
hppritcha Aug 26, 2025
fbd0788
bindings: fix up REQUEST_CONST for abi
hppritcha Aug 26, 2025
03250b6
tools: first steps to add support for ABI
hppritcha Sep 2, 2025
fca68c3
fix problem with undefined symbols in libmpi_abi
hppritcha Sep 2, 2025
360a2d7
hack on abi json file
hppritcha Sep 3, 2025
9bd8e9f
abi.h template - add MPI_T related structs
hppritcha Sep 3, 2025
143e5b3
binding framework: fixes for MPI T stuff
hppritcha Sep 3, 2025
3ba5c08
binding framework: add a TS_LEVEL type
hppritcha Sep 3, 2025
fa5de6a
more hacks on the mpi-standard-5.0-abi.json
hppritcha Sep 3, 2025
e0c4614
fix for enable-mca-dso
hppritcha Sep 3, 2025
76265a4
makefile changes to add symbols to libmpi_abi
hppritcha Sep 16, 2025
b99a3af
abi: fix problems with error handler converters
hppritcha Sep 17, 2025
479147b
fix problems with makefiles and some symbols
hppritcha Sep 17, 2025
5981a87
abi: move mpi_type_get_envelope etc. into templates
hppritcha Sep 18, 2025
e0af62a
rebase fixup
hppritcha Sep 19, 2025
2231aab
add abi variantes of mpi_aint_diff and add
hppritcha Sep 19, 2025
5d15192
add abi_set/get_fortran_info
hppritcha Sep 19, 2025
d9c25b7
abi_fortran_stuff: fix up the imp of these
hppritcha Sep 22, 2025
2df3922
abi_converters: add fortran datatypes to
hppritcha Sep 22, 2025
a584be1
fix for mac-os CI
hppritcha Sep 23, 2025
fcd00af
pr feedback on add/diff for aints
hppritcha Sep 23, 2025
126c14a
configury: discover fortran logical false
hppritcha Sep 23, 2025
acebae0
configury fix
hppritcha Sep 23, 2025
5a3d235
squashme: temporary commit
hppritcha Sep 23, 2025
79385ef
add abi_get/set_fortran_booleans c interfaces
hppritcha Sep 25, 2025
73ba61b
abi_fortran: add support for LOGICAL16
hppritcha Sep 25, 2025
d7d0d9b
logical16 patch
hppritcha Sep 29, 2025
e525beb
add comm_from/toint
hppritcha Sep 29, 2025
908d1b8
complete toint/fromint interfaces
hppritcha Oct 1, 2025
c837bbb
fix error return values for ABI routines
hppritcha Oct 1, 2025
c3c500b
minor fixup for toint/fromint
hppritcha Oct 1, 2025
1ac6657
rebase fix
hppritcha Oct 1, 2025
12c623f
handle TAG more correctly
hppritcha Oct 1, 2025
6650e86
squash compiler warning
hppritcha Oct 1, 2025
a444b9b
add hooks for TAG_OUT type
hppritcha Oct 1, 2025
026df5f
add better support for MPI_ROOT and source
hppritcha Oct 1, 2025
ae72028
squash a compiler warning
hppritcha Oct 2, 2025
9eba648
some fixes to comm attributes wrappers
hppritcha Oct 3, 2025
47a6e9e
fix bug in comm attr copy code
hppritcha Oct 3, 2025
931430f
some fixes for attributes and more
hppritcha Oct 7, 2025
528e5e9
checkpoint
hppritcha Oct 9, 2025
47f9c3b
fix for datatype converters
hppritcha Oct 9, 2025
8385db5
distcheck fix
hppritcha Oct 9, 2025
c3a4451
EVENT_INSTANCE: arg type cast fix
hppritcha Oct 9, 2025
b8f8e4c
MPI_ROOT: capture proc null type too
hppritcha Oct 9, 2025
667db71
requests: fixes to some multirequest test functions
hppritcha Oct 10, 2025
97c71d2
weights and source out support/fixes
hppritcha Oct 10, 2025
1f0254a
some fixes for message related functions
hppritcha Oct 11, 2025
d86c6e4
fix mpi4py break
hppritcha Oct 11, 2025
949868f
fix a few problems with datatype bindings
hppritcha Oct 11, 2025
b86d21e
update gitignore
hppritcha Oct 11, 2025
d0b9d14
add replacements to code bodies for various string lengths
hppritcha Oct 13, 2025
b18a8a5
add support for distrib array and order
hppritcha Oct 13, 2025
117356e
add support for mode bits - in only
hppritcha Oct 13, 2025
fd1a0a8
add support for amode out
hppritcha Oct 13, 2025
57094ab
add support for whence
hppritcha Oct 14, 2025
311eadd
add support for some win attributes
hppritcha Oct 14, 2025
e8ea562
handle special case of MPI_DISPLACEMENT_CURRENT
hppritcha Oct 14, 2025
5df6bae
add support for combiner, typeclass, win lock assert
hppritcha Oct 14, 2025
8f7628b
c_header: comment out deprecated functions
hppritcha Oct 15, 2025
6009f50
fix problem with special attrs for windows
hppritcha Oct 15, 2025
4f2aecf
fix for win_shared_query
hppritcha Oct 15, 2025
869c1a2
fixes to rget/rget_accumulate
hppritcha Oct 16, 2025
e08a17a
fix problem with code gen for win create keyval
hppritcha Oct 16, 2025
12e750a
fix rank problem in rput/raccumulate
hppritcha Oct 16, 2025
4fcf510
add MPI_GROUP_EMPTY to predefined group handles
hppritcha Oct 16, 2025
f707467
handle user error classes and codes
hppritcha Oct 16, 2025
220739a
temporary WAR for non-blocking alltoallw
hppritcha Oct 20, 2025
7d6fa88
add support for comm topos
hppritcha Oct 20, 2025
e39a31b
support INOUT attribute for all handles
hppritcha Oct 20, 2025
db8111c
fix problem with attribute callback handling
hppritcha Oct 20, 2025
e342404
catch use of special buffer consts
hppritcha Oct 21, 2025
353ad35
remove some debug statements
hppritcha Oct 21, 2025
43624b7
swat nit
hppritcha Oct 21, 2025
b691dac
patch get_address
hppritcha Oct 21, 2025
1a962e6
add new type to handle out void stars
hppritcha Oct 21, 2025
f3bfbf3
fixes for datatypes for neighbor collectives
hppritcha Oct 21, 2025
dc5e23d
add inouts for op, errhandler, info
hppritcha Oct 22, 2025
a3c7260
cleanup datatype tmps for ialltoallw and friends
hppritcha Oct 22, 2025
3375287
a logical16 fix
hppritcha Oct 22, 2025
0a36325
abi_get_version/get_info add to ompi abi lib
hppritcha Oct 22, 2025
0c3cbde
toint fixes
hppritcha Oct 23, 2025
f9f6acd
fix issue with ASYNC data arrays cleanup
hppritcha Oct 24, 2025
ddb6d74
various fixes from dalcinl
hppritcha Oct 24, 2025
27c2e6a
fix a problem
hppritcha Oct 24, 2025
15092ef
ompi-codegen.patch from dalcinl
hppritcha Oct 24, 2025
d165aed
ompi-abiinfo.patch from dalcinl
hppritcha Oct 24, 2025
3126f86
ompi-status.patch from dalcinl
hppritcha Oct 25, 2025
d56b5e6
move some deprecated funcs out of libmpi-abi
hppritcha Oct 27, 2025
4694f63
add support for typeclass
hppritcha Oct 27, 2025
ce93d8c
ops: convert data from internal to abi
hppritcha Oct 27, 2025
5f27c44
split rdma modes out from modes for files
hppritcha Oct 27, 2025
f738ba1
add SOURCE_ARRAY type
hppritcha Oct 27, 2025
0704146
fixes to abi_get_fortran_info
hppritcha Oct 28, 2025
d6baa28
apply patch omp-op-inout.patch
hppritcha Oct 29, 2025
0b710d6
apply patch ompi-abi-fortran.patch
hppritcha Oct 29, 2025
34df931
fix for FD_INOUT
hppritcha Oct 29, 2025
9e79d60
fix for isend dst arg
hppritcha Oct 29, 2025
1688d76
apply patch ompi-query-thread.patch
hppritcha Oct 29, 2025
06cc3ea
various pt2pt fixes to handle proc_null etc.
hppritcha Oct 30, 2025
edbe8e5
rma: updates to args to handle proc_null etc
hppritcha Oct 30, 2025
bc73bac
adjustments for improbe and iprobe
hppritcha Oct 30, 2025
9153ff7
fix for status array for MPI_Request_testsome
hppritcha Oct 30, 2025
60275b5
switch to using a malloc wrapper
hppritcha Nov 2, 2025
eeca33f
plug memory leak handling REQUEST_INOUT type
hppritcha Nov 2, 2025
a33ccb8
patch status out to handle copy in
hppritcha Nov 3, 2025
7b7f032
handle dargs for darray_create correctly
hppritcha Nov 4, 2025
b8535be
fixes for spawn multiple - array of info args
hppritcha Nov 4, 2025
53dc796
disable async NBC-based cleanup for now
hppritcha Nov 4, 2025
4a10921
turn back on async array cleanup stuff
hppritcha Nov 7, 2025
7fced6c
cleanup: patch the coll libnbc to free data arrays
hppritcha Nov 7, 2025
2ab7ec9
small patch from dalcinl
hppritcha Nov 8, 2025
7d9a631
info array tweak from dalcinl (ompi-info-array.patch)
hppritcha Nov 10, 2025
742d99c
MPI_Info_toint/fromint allow to be calleable
hppritcha Nov 10, 2025
0307fe0
first pass at errhandler support
hppritcha Nov 11, 2025
d581080
gitignore - add a file
hppritcha Nov 13, 2025
eb15f01
simplify python support for user-defined err handlers
hppritcha Nov 13, 2025
c766023
minor compiler warning cleanups
hppritcha Nov 16, 2025
1e9f54f
VERSION - add support for versioning libmpi_abi
hppritcha Nov 16, 2025
590e08e
add man pages for new MPI_Abi and fromint/toint functions
hppritcha Nov 16, 2025
979e947
attributes - clean up extra helper data
hppritcha Nov 17, 2025
c10ad8f
minor cleanup
hppritcha Nov 17, 2025
6f61c18
a bit more cleanup
hppritcha Nov 17, 2025
43a3314
add a readme about the MPI ABI support
hppritcha Nov 17, 2025
3f18ae2
add short blurb for users about c ABI support
hppritcha Nov 17, 2025
ffa676e
fix up blurb about libmpi_abi versioning
hppritcha Nov 18, 2025
1d1cf81
fortran: add the MPI_Abi entry points
hppritcha Nov 25, 2025
a566ddf
python framework: improve debugging
hppritcha Nov 25, 2025
c3d6e57
fortran: fix it
hppritcha Nov 25, 2025
874bbd1
pr feedback
hppritcha Nov 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/building-apps/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Open MPI "wrapper" compilers.
removed-mpi-constructs
deprecation-warnings
building-static-apps
mpi-abi

.. warning:: Open MPI does not attempt to interoperate with other MPI
implementations, nor executables that were compiled for
Expand Down
33 changes: 33 additions & 0 deletions docs/building-apps/mpi-abi.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
.. _label-building-with-mpi-abi:

Building MPI applications using the MPI ABI
===========================================

What is the MPI ABI
-------------------

Starting with MPI 5.0, the MPI standard specifies an ABI for the c and
Fortran MPI interfaces. In this release, Open MPI supports the c
part of the MPI ABI.
Comment on lines +9 to +11
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not accurate. The Fortran interfaces are not part of the ABI.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean the MPI_Abi_fortran* are not part of the ABI or that MPI fortran entry points in general are not part of the ABI? Section 20.4.2 The MPI ABI Fortran Modules and Shared Library states that there is a Fortran ABI.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MPI fortran entry points in general are not part of the ABI?

This one.

Section 20.4.2 The MPI ABI Fortran Modules and Shared Library states that there is a Fortran ABI.

Maybe a leftover from @jeffhammond ?

@hppritcha What I'm trying to point out is that currently (and probably forever) it is not possible to define an interoperable ABI for Fortran. User cannot expect to compiler their Fortran code with MPICH's Fortran modules and libraries, and at runtime switch and run against Open MPI's implementation of Fortran stuff.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

somehow i figured the fortran in the mpi_f08 module would be generic enough that it would be interoperable. I guess i need to tweak my slides for the OMPI BOF.

Okay in this light I'll scrub the fortran wording in the README.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm really worried that the lack of a Fortran ABI will defeat the core interoperability purpose of the ABI to the point that we the new great stuff will not adopted widely.

There is only one possible solution for Fortran: Someone (Jeff) or the community (MPICH+OpenMPI) develop Fortran bindings that use the MPI C API exclusively, and then MPI implementaitons can vendor in their releases mostly unmodified. However, such Fortran bindings would be much easier to implement if MPI fixed a few shortcomings here and there to better support callbacks/trampolines. Such enhancements would benefit other language bindings, not only Fortran.


By using the MPI ABI, an MPI application can be built against one
implementation of MPI that supports the MPI ABI, and later run using
the MPI ABI compliant MPI library generated using a different MPI
implementation. This assumes that the application is dynamically linked.

The MPI 5.0 standard specifies the file name of the MPI ABI compliant
library - libmpi_abi. The major version of the library is 1 and minor
version is 0.
Comment on lines +18 to +20
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is confusing. How is Open MPI going to define the SONAME? I'm assume that is going to be libmpi_abi.so.0. As per the libtool rules, this is the first version ever of the library, so the .0 prefix.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the soname used by mpich? If they use a different soname that defeats the whole point of having a consistent ABI

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right now it is libmpi_abi.so.0, but I do not know if that is because the ABI in MPICH is in a "development" stage, I hope not.

Again, by the Linux/libtool conventions, the SONAME should be libmpi_abi.so.0, and hopefully stay that way forever, unless the MPI Forum takes the unwise route of removing/changing interfaces.

I elaborated in the matter long ago, but I'm not sure people really understood my point.
mpi-forum/mpi-abi-stubs#28

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes I was going to check that (the MPICH libmpich_abi soname) as I had the same concern. Right now we are using a c/r/a that ends up generating a libmpi_abi with an soname of libmpi_abi.so.0.

I wrote a blurb in the VERSION file (where we set these c,r,a for each of our Open MPI so's):

# The current and age values of the libmpi_abi shared library are defined by the
# specification of the ABI for the version of the MPI standard supported
# by this Open MPI release.  One would hope that these always move in
# sync.  We assume we have flexibility with the revision number as
# bugs are fixed, etc.

I guess it should say are implicitly defined. I was thinking that as we have to patch our ABI related code we (Open MPI project) would increment the revision number.

I was thinking that if we (MPI Forum) add interfaces to the ABI we (Open MPI project) would crank up the current and age such that the C-A remains 0. And as @dalcinl notes we (MPI forum) would hopefully not do something that would case us to have to increment C and reset A to zero!

I'll check out mpi-forum/mpi-abi-stubs#28 - it looks relevant.

In any case I'll tweak the comment in the VERSION file.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess it should say are implicitly defined.

Sounds good.

I'll check out mpi-forum/mpi-abi-stubs#28 - it looks relevant.

My initial proposal there is outdated, I originally proposed to start with current=1 age=0 to be in sync with MPI_ABI_VERSION. But that's not the usual recommendation, the very first release of a shared library should have current=0 age=0. So let it be that way. It will hopefully never change, and we will all enjoy libmpi_abi.so.0 for ever after.


How to build an application using the MPI ABI
---------------------------------------------

To build an application against the MPI ABI compliant Open MPI library,
the ``mpicc_abi`` compiler wrapper must be used for compiling and
linking the application or shared library.

This release does not support the Fortran ABI so there is no ``mpifort_abi``
compiler wrapper. This mixed c/Fortran MPI apps cannot make use of the
MPI ABI library with this release.
Comment on lines +29 to +31
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe rephrase this part as per my previous comment about no Fortran ABI?