Skip to content

Commit 2686d1b

Browse files
hppritchadalcinl
andcommitted
ABI: multiple fixes
git ignore additions ABI library: don't include functions in 19.3.4/5 in the library as they are not part of the ABI. fixes to handle count/offset/aint in abi.h fix req converter abi to ompi fix problem with request_get_status_some bindings: fix up REQUEST_CONST for abi tools: first steps to add support for ABI Turns out that the ABI standard impacts MPI_T related constants, etc. and we don't want to switch to this for our OMPI standard, so we need to add support for MPI_T_ ABI compliant functions. Additions to the binding infrastructure to support generation of ABI bindings will be introduced in a subsequent commit. fix problem with undefined symbols in libmpi_abi hack on abi json file The MPI_T source order and MPI_T cb named enum types and their enum constants need special treatment. Ultimately the tool used to generate this json file - https://github.com/Joe-Downs/mpi-standard/blob/pr/handle-constant-tool/const-tool/test.py needs to find a home either in the MPI standard or in the pympistandard repo or elsewhere. abi.h template - add MPI_T related structs binding framework: fixes for MPI T stuff Add various MPI_T related structs to the manglizer. Also more workarounds for pympistandard not knowing about MPI 5.1 chapter sections 19.3.4 and 19.3.5 not being part of the ABI standard. binding framework: add a TS_LEVEL type more hacks on the mpi-standard-5.0-abi.json json file fix for enable-mca-dso makefile changes to add symbols to libmpi_abi abi: fix problems with error handler converters Fix problem with the abi -> ompi and ompi -> abi converters for errhandler handles. Also fix the bindings code where the original problem was. We aren't using the bindings framework now to generate the converters but we may possibly return to that approach at some point so fix that code in this commit. fix problems with makefiles and some symbols being doubly defined in the profile/non-profile abi mpi libs. abi: move mpi_type_get_envelope etc. into templates MPI_Type_get_envelop and MPI_Type_get_contents are a big mess as the MPI Forum decided not just to add big variants but also add additional arguments for the big count variants. So this necessitated enhancements to the binding infrastructure to support optional suppressing of bc and non-bc variants of prototype files. rebase fixup add abi variantes of mpi_aint_diff and add add abi_set/get_fortran_info implementation of abi_set_fortran_info is not complete. abi_fortran_stuff: fix up the imp of these abi_converters: add fortran datatypes to the converters. fix for mac-os CI pr feedback on add/diff for aints configury: discover fortran logical false rather than assuming its '0'/ configury fix for case of configure with fortran abi_fortran: add support for LOGICAL16 logical16 patch missed something add comm_from/toint simpler to hard code abi/ompi variants. For ABI version add an offset to the values normally used for original "f2c/c2f" ops to push the values normally returned by "c2f" functions to be greater than any ABI defined constants. complete toint/fromint interfaces basic implementation checks if constant is <= 16384 (the largest value reserved for mpi abi constants) and returns the constant back or looks up the value in the relevant array of pointers and offsets by 16385. fix error return values for ABI routines somehow was using the wrong converter to translate ompi intern error values with abi ones. Many are actually the same but that's just by chance. minor fixup for toint/fromint rebase fix handle TAG more correctly even though currently MPI_ANY_TAG is the same in ABI and OMPI squash compiler warning add hooks for TAG_OUT type add better support for MPI_ROOT and source since MPI_ROOT for ABI is not equal to ompi. MPI_ANY_SOURCE is but still generate conversion code rather than just beining lucky. squash a compiler warning this fix kind of messes up the indenter so the resulting line in the generated code isn't nicely indented but that can be fixed later. some fixes to comm attributes wrappers also see about fixing an issue with some of the ompi mca components when using --enable-mca-dso. fix bug in comm attr copy code some fixes for attributes and more to start using the ompi-tests/ibm had to complete adding MPI_T_ to the abi. Also some other fixes. Attributes still need more work. checkpoint many changes. go back to generating abi_converters.h fix up tools for abi case, etc. fix for datatype converters distcheck fix EVENT_INSTANCE: arg type cast fix and add in a file that wasn't in the makefile! MPI_ROOT: capture proc null type too needed to get a lot of intercommunicator collectives to pass. requests: fixes to some multirequest test functions weights and source out support/fixes fixes problems with dist graph constructors and cart_shift output. some fixes for message related functions also add better support for the 'some' test/wait functions. fix testall and startall fix mpi4py break fix a few problems with datatype bindings add replacements to code bodies for various string lengths We now scan the generated internal 'c' body of each function for replaceable variants of MPI_MAX_DATAREP_STRING MPI_MAX_ERROR_STRING MPI_MAX_INFO_KEY MPI_MAX_INFO_VAL MPI_MAX_LIBRARY_VERSION_STRING MPI_MAX_OBJECT_NAME MPI_MAX_PORT_NAME MPI_MAX_PROCESSOR_NAME MPI_MAX_STRINGTAG_LEN MPI_MAX_PSET_NAME_LEN This way the code body sees the same constant values as the app sees using either the OMPI or ABI variants of the mpi.h add support for distrib array and order for subarray type datatype constructors add support for mode bits - in only add support for amode out add support for whence used by some MPI I/O functions add support for some win attributes handle special case of MPI_DISPLACEMENT_CURRENT add support for combiner, typeclass, win lock assert types c_header: comment out deprecated functions The ABI doesn't support any of the functions deprecated in MPI 3.1 or earlier. See section 20.2.1 of the MPI 5.0 standard. fix problem with special attrs for windows fix for win_shared_query fixes to rget/rget_accumulate fix problem with code gen for win create keyval fix rank problem in rput/raccumulate add MPI_GROUP_EMPTY to predefined group handles handle user error classes and codes temporary WAR for non-blocking alltoallw variants. We'll need to append the temporary arrays holding translated datatype handles to the nbc request for cleanup after the non-blocking op is completed or the persistent request has been freed. add support for comm topos support INOUT attribute for all handles thanks to dalcinl for help here fix problem with attribute callback handling need to convert the ompi internal keyval to abi one before invoking user supplied callbacks for win, type, comm catch use of special buffer consts like MPI_BUFFER_AUTOMATIC remove some debug statements swat nit patch get_address add new type to handle out void stars from buffer detach operations. fixes for datatypes for neighbor collectives add inouts for op, errhandler, info cleanup datatype tmps for ialltoallw and friends leverage nbc infrastructure a logical16 fix Thanks to dalcinl for finding. abi_get_version/get_info add to ompi abi lib and correction major/minor versoin returned from the ABI build. toint fixes thanks to dalcinl ! fix issue with ASYNC data arrays cleanup various fixes from dalcinl ompi-codegen.patch from dalcinl ompi-abiinfo.patch from dalcinl ompi-status.patch from dalcinl fixes to setting/getting status fields and some more move some deprecated funcs out of libmpi-abi add support for typeclass ops: convert data from internal to abi for user ops split rdma modes out from modes for files the ompi internal rdma and file mode bits overlap, so we need to treat them that way in the bindings generation code too. add SOURCE_ARRAY type to help out MPI_Group_translate_ranks fixes to abi_get_fortran_info for logicals apply patch omp-op-inout.patch from dalcinl apply patch ompi-abi-fortran.patch from dalcinl fix for FD_INOUT fix for isend dst arg needs to go through translation apply patch ompi-query-thread.patch from dalcinl various pt2pt fixes to handle proc_null etc. eventually we'll use separate SOURCE and DEST (or something like that) types. rma: updates to args to handle proc_null etc adjustments for improbe and iprobe fix for status array for MPI_Request_testsome switch to using a malloc wrapper per dalcinl suggestion plug memory leak handling REQUEST_INOUT type patch status out to handle copy in there are many functions where a status is conditionally returned. Trying to treat each of these would be too complex so instead copy contents of the status supplied as input into any temporary status variables then copy back out. handle dargs for darray_create correctly fixes for spawn multiple - array of info args and array of errorcodes disable async NBC-based cleanup for now turn back on async array cleanup stuff and add a check that the returned request isn't complete. mpi_info_toint/fromint prior to MPI_Init or MPI_Session_init first pass at errhandler support simplify python support for user-defined err handlers VERSION - add support for versioning libmpi_abi add a blurb about how current and age and revision should work for this library. add man pages for new MPI_Abi and fromint/toint functions attributes - clean up extra helper data using the bindings_extra_state arg to ompi_attr_create_keyval add a readme about the MPI ABI support fortran: add the MPI_Abi entry points python framework: improve debugging also import util module Signed-off-by: Howard Pritchard <[email protected]> Co-authored-by: Lisandro Dalcin <[email protected]>
1 parent ac5f8b3 commit 2686d1b

File tree

478 files changed

+9816
-2144
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

478 files changed

+9816
-2144
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,11 @@ docs/man
537537
ompi/mpi/c/*_generated*.c
538538
ompi/mpi/c/standard_*.c
539539
ompi/mpi/c/abi.h
540+
ompi/mpi/c/abi_get_info.c
541+
ompi/mpi/c/abi_converters.h
542+
ompi/mpi/c/abi_converters.c
540543
ompi/mpi/c/standard_abi
544+
ompi/mpi/tool/*_generated*.c
541545

542546
# Generated Fortran Bindings
543547
ompi/mpi/fortran/use-mpi-f08/*_generated.F90

VERSION

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ minor=1
2020
release=0
2121

2222
# MPI Standard Compliance Level
23-
mpi_standard_version=3
23+
mpi_standard_version=5
2424
mpi_standard_subversion=1
2525

2626
# OMPI required dependency versions.
@@ -92,6 +92,14 @@ date="Unreleased developer copy"
9292
# but they are "public" within the OMPI code base and select 3rd party
9393
# software packages.
9494

95+
# The current and age values of the libmpi_abi shared library are
96+
# implicitly determined by the MPI ABI definition of the
97+
# version of the MPI specification supported by this Open MPI release.
98+
# The MPI ABI is intended not to break backward compatibility,
99+
# so presumably the current and age values will move in lock step.
100+
# We assume we have flexibility with the revision number as
101+
# bugs are fixed, etc.
102+
95103
# Version numbers are described in the Libtool current:revision:age
96104
# format.
97105

@@ -100,6 +108,7 @@ libmpi_mpifh_so_version=0:0:0
100108
libmpi_usempi_tkr_so_version=0:0:0
101109
libmpi_usempi_ignore_tkr_so_version=0:0:0
102110
libmpi_usempif08_so_version=0:0:0
111+
libmpi_abi_so_version=0:0:0
103112
libopen_pal_so_version=0:0:0
104113
libmpi_java_so_version=0:0:0
105114
liboshmem_so_version=0:0:0

config/ompi_fortran_check_logical_array.m4

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ dnl All rights reserved.
1111
dnl Copyright (c) 2011-2012 Cisco Systems, Inc. All rights reserved.
1212
dnl Copyright (c) 2015 Research Organization for Information Science
1313
dnl and Technology (RIST). All rights reserved.
14+
dnl Copyright (c) 2025 Triad National Security, LLC. All rights
15+
dnl reserved.
1416
dnl $COPYRIGHT$
1517
dnl
1618
dnl Additional copyrights may follow
@@ -64,7 +66,7 @@ void ompi_check_f(ompi_fortran_logical_t * logical)
6466
FILE *f=fopen("conftestval", "w");
6567
if (!f) exit(1);
6668

67-
if (logical[[0]] == 0 &&
69+
if (logical[[0]] == $ompi_cv_fortran_false_value &&
6870
logical[[1]] == $ompi_cv_fortran_true_value)
6971
result = 1;
7072
fprintf(f, "%d\n", result);

config/ompi_fortran_get_value_true.m4

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ dnl All rights reserved.
1111
dnl Copyright (c) 2011-2012 Cisco Systems, Inc. All rights reserved.
1212
dnl Copyright (c) 2015 Research Organization for Information Science
1313
dnl and Technology (RIST). All rights reserved.
14+
dnl Copyright (c) 2025 Triad National Security, LLC. All rights
15+
dnl reserved.
1416
dnl $COPYRIGHT$
1517
dnl
1618
dnl Additional copyrights may follow
@@ -27,16 +29,22 @@ AC_DEFUN([OMPI_FORTRAN_GET_VALUE_TRUE],[
2729
if test "$ompi_cv_fortran_true_value" = "0" ; then
2830
unset ompi_cv_fortran_true_value
2931
fi
32+
if test "$ompi_cv_fortran_false_value" = "0" ; then
33+
unset ompi_cv_fortran_false_value
34+
fi
3035

3136
AS_VAR_PUSHDEF([fortran_true_var],
3237
[ompi_cv_fortran_true_value])
38+
AS_VAR_PUSHDEF([fortran_false_var],
39+
[ompi_cv_fortran_false_value])
3340

3441
AC_CACHE_CHECK([Fortran value for .TRUE. logical type],
3542
fortran_true_var,
3643
[if test "$1" = "none" || \
3744
test $OMPI_TRY_FORTRAN_BINDINGS -eq $OMPI_FORTRAN_NO_BINDINGS || \
3845
test $ompi_fortran_happy -eq 0 ; then
39-
value=77
46+
tvalue=77
47+
fvalue=77
4048
else
4149
#
4250
# C module
@@ -98,6 +106,14 @@ EOF
98106
CALL ompi_print(value)
99107
end
100108
EOF
109+
cat > conftestf2.f <<EOF
110+
program main
111+
logical value
112+
value=.FALSE.
113+
CALL ompi_print(value)
114+
end
115+
EOF
116+
101117

102118
#
103119
# Try the compilation and run.
@@ -114,11 +130,40 @@ EOF
114130
AS_IF([test "$cross_compiling" = "yes"],
115131
[AC_MSG_ERROR([Can not determine value of .TRUE. when cross-compiling])],
116132
[OPAL_LOG_COMMAND([./conftest],
117-
[value=`sed 's/ *//' conftestval`],
133+
[tvalue=`sed 's/ *//' conftestval`],
118134
[AC_MSG_ERROR([Could not determine value of Fotran .TRUE.. Aborting.])])])
135+
136+
cat > conftestf.f <<EOF
137+
program main
138+
logical value
139+
value=.FALSE.
140+
CALL ompi_print(value)
141+
end
142+
EOF
143+
144+
#
145+
# Try the compilation and run.
146+
#
147+
OPAL_LOG_COMMAND([$CC $CFLAGS -I. -c conftest.c],
148+
[OPAL_LOG_COMMAND([$FC $FCFLAGS -o conftest conftest.o conftestf.f $LDFLAGS $LIBS],
149+
[happy=1], [happy=0])],
150+
[happy=0])
151+
152+
AS_IF([test $happy -eq 0 && test $ompi_fortran_happy -eq 1],
153+
[AC_MSG_ERROR([Could not compile Fortran .FALSE. test. Aborting.])
154+
])
155+
156+
AS_IF([test "$cross_compiling" = "yes"],
157+
[AC_MSG_ERROR([Can not determine value of .FALSE. when cross-compiling])],
158+
[OPAL_LOG_COMMAND([./conftest],
159+
[fvalue=`sed 's/ *//' conftestval`],
160+
[AC_MSG_ERROR([Could not determine value of Fotran .FALSE.. Aborting.])])])
119161
fi
120-
AS_VAR_SET(fortran_true_var, [$value])
121-
unset value
162+
AS_VAR_SET(fortran_true_var, [$tvalue])
163+
unset tvalue
164+
AS_VAR_SET(fortran_false_var, [$fvalue])
165+
unset fvalue
166+
122167
])
123168

124169
AS_VAR_COPY([ompi_fortran_true_value], [fortran_true_var])
@@ -127,6 +172,13 @@ EOF
127172
[Fortran value for LOGICAL .TRUE. value])
128173
AS_VAR_POPDEF([fortran_true_var])
129174

175+
AS_VAR_COPY([ompi_fortran_false_value], [fortran_false_var])
176+
AC_DEFINE_UNQUOTED([OMPI_FORTRAN_VALUE_FALSE],
177+
[$ompi_fortran_false_value],
178+
[Fortran value for LOGICAL .FALSE. value])
179+
AS_VAR_POPDEF([fortran_false_var])
180+
181+
130182
unset happy ompi_print_logical_fn
131183
rm -rf conftest*
132184
])dnl

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ OPAL_SAVE_VERSION([OPAL], [Open Portable Access Layer], [$srcdir/VERSION],
147147

148148
m4_ifdef([project_ompi],
149149
[AC_SUBST(libmpi_so_version)
150+
AC_SUBST(libmpi_abi_so_version)
150151
AC_SUBST(libmpi_mpifh_so_version)
151152
AC_SUBST(libmpi_usempi_tkr_so_version)
152153
AC_SUBST(libmpi_usempi_ignore_tkr_so_version)

docs/Makefile.am

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ OMPI_MAN1 = \
8787
opal_wrapper.1
8888

8989
OMPI_MAN3 = \
90+
MPI_Abi_get_fortran_booleans.3 \
91+
MPI_Abi_get_fortran_info.3 \
92+
MPI_Abi_get_info.3 \
93+
MPI_Abi_get_version.3 \
94+
MPI_Abi_set_fortran_booleans.3 \
95+
MPI_Abi_set_fortran_info.3 \
9096
MPI_Abort.3 \
9197
MPI_Accumulate.3 \
9298
MPI_Add_error_class.3 \
@@ -151,6 +157,7 @@ OMPI_MAN3 = \
151157
MPI_Comm_flush_buffer.3 \
152158
MPI_Comm_free.3 \
153159
MPI_Comm_free_keyval.3 \
160+
MPI_Comm_fromint.3 \
154161
MPI_Comm_get_attr.3 \
155162
MPI_Comm_get_errhandler.3 \
156163
MPI_Comm_get_info.3 \
@@ -174,6 +181,7 @@ OMPI_MAN3 = \
174181
MPI_Comm_split.3 \
175182
MPI_Comm_split_type.3 \
176183
MPI_Comm_test_inter.3 \
184+
MPI_Comm_toint.3 \
177185
MPI_Compare_and_swap.3 \
178186
MPI_Dims_create.3 \
179187
MPI_Dist_graph_create.3 \
@@ -182,8 +190,10 @@ OMPI_MAN3 = \
182190
MPI_Dist_graph_neighbors_count.3 \
183191
MPI_Errhandler_create.3 \
184192
MPI_Errhandler_free.3 \
193+
MPI_Errhandler_fromint.3 \
185194
MPI_Errhandler_get.3 \
186195
MPI_Errhandler_set.3 \
196+
MPI_Errhandler_toint.3 \
187197
MPI_Error_class.3 \
188198
MPI_Error_string.3 \
189199
MPI_Errors.3 \
@@ -196,6 +206,7 @@ OMPI_MAN3 = \
196206
MPI_File_create_errhandler.3 \
197207
MPI_File_delete.3 \
198208
MPI_File_f2c.3 \
209+
MPI_File_fromint.3 \
199210
MPI_File_get_amode.3 \
200211
MPI_File_get_atomicity.3 \
201212
MPI_File_get_byte_offset.3 \
@@ -239,6 +250,7 @@ OMPI_MAN3 = \
239250
MPI_File_set_size.3 \
240251
MPI_File_set_view.3 \
241252
MPI_File_sync.3 \
253+
MPI_File_toint.3 \
242254
MPI_File_write.3 \
243255
MPI_File_write_all.3 \
244256
MPI_File_write_all_begin.3 \
@@ -282,13 +294,15 @@ OMPI_MAN3 = \
282294
MPI_Group_excl.3 \
283295
MPI_Group_f2c.3 \
284296
MPI_Group_free.3 \
297+
MPI_Group_fromint.3 \
285298
MPI_Group_from_session_pset.3 \
286299
MPI_Group_incl.3 \
287300
MPI_Group_intersection.3 \
288301
MPI_Group_range_excl.3 \
289302
MPI_Group_range_incl.3 \
290303
MPI_Group_rank.3 \
291304
MPI_Group_size.3 \
305+
MPI_Group_toint.3 \
292306
MPI_Group_translate_ranks.3 \
293307
MPI_Group_union.3 \
294308
MPI_Iallgather.3 \
@@ -317,12 +331,14 @@ OMPI_MAN3 = \
317331
MPI_Info_env.3 \
318332
MPI_Info_f2c.3 \
319333
MPI_Info_free.3 \
334+
MPI_Info_fromint.3 \
320335
MPI_Info_get.3 \
321336
MPI_Info_get_nkeys.3 \
322337
MPI_Info_get_nthkey.3 \
323338
MPI_Info_get_string.3 \
324339
MPI_Info_get_valuelen.3 \
325340
MPI_Info_set.3 \
341+
MPI_Info_toint.3 \
326342
MPI_Init.3 \
327343
MPI_Initialized.3 \
328344
MPI_Init_thread.3 \
@@ -348,6 +364,8 @@ OMPI_MAN3 = \
348364
MPI_Lookup_name.3 \
349365
MPI_Message_c2f.3 \
350366
MPI_Message_f2c.3 \
367+
MPI_Message_fromint.3 \
368+
MPI_Message_toint.3 \
351369
MPI_Mprobe.3 \
352370
MPI_Mrecv.3 \
353371
MPI_Neighbor_allgather.3 \
@@ -366,6 +384,8 @@ OMPI_MAN3 = \
366384
MPI_Open_port.3 \
367385
MPI_Op_f2c.3 \
368386
MPI_Op_free.3 \
387+
MPI_Op_fromint.3 \
388+
MPI_Op_toint.3 \
369389
MPI_Pack.3 \
370390
MPI_Pack_external.3 \
371391
MPI_Pack_external_size.3 \
@@ -398,10 +418,12 @@ OMPI_MAN3 = \
398418
MPI_Request_c2f.3 \
399419
MPI_Request_f2c.3 \
400420
MPI_Request_free.3 \
421+
MPI_Request_fromint.3 \
401422
MPI_Request_get_status.3 \
402423
MPI_Request_get_status_all.3 \
403424
MPI_Request_get_status_any.3 \
404425
MPI_Request_get_status_some.3 \
426+
MPI_Request_toint.3 \
405427
MPI_Rget.3 \
406428
MPI_Rget_accumulate.3 \
407429
MPI_Rput.3 \
@@ -423,12 +445,14 @@ OMPI_MAN3 = \
423445
MPI_Session_f2c.3 \
424446
MPI_Session_finalize.3 \
425447
MPI_Session_flush_buffer.3 \
448+
MPI_Session_fromint.3 \
426449
MPI_Session_get_info.3 \
427450
MPI_Session_get_nth_pset.3 \
428451
MPI_Session_get_num_psets.3 \
429452
MPI_Session_get_pset_info.3 \
430453
MPI_Session_iflush_buffer.3 \
431454
MPI_Session_init.3 \
455+
MPI_Session_toint.3 \
432456
MPI_Sizeof.3 \
433457
MPI_Ssend.3 \
434458
MPI_Ssend_init.3 \
@@ -440,6 +464,7 @@ OMPI_MAN3 = \
440464
MPI_Status_f082f.3 \
441465
MPI_Status_f2c.3 \
442466
MPI_Status_f2f08.3 \
467+
MPI_Status_fromint.3 \
443468
MPI_Status_get_error.3 \
444469
MPI_Status_get_source.3 \
445470
MPI_Status_get_tag.3 \
@@ -449,6 +474,7 @@ OMPI_MAN3 = \
449474
MPI_Status_set_error.3 \
450475
MPI_Status_set_source.3 \
451476
MPI_Status_set_tag.3 \
477+
MPI_Status_toint.3 \
452478
MPI_T.3 \
453479
MPI_T_category_changed.3 \
454480
MPI_T_category_get_categories.3 \
@@ -525,6 +551,7 @@ OMPI_MAN3 = \
525551
MPI_Type_f2c.3 \
526552
MPI_Type_free.3 \
527553
MPI_Type_free_keyval.3 \
554+
MPI_Type_fromint.3 \
528555
MPI_Type_get_attr.3 \
529556
MPI_Type_get_contents.3 \
530557
MPI_Type_get_envelope.3 \
@@ -544,6 +571,7 @@ OMPI_MAN3 = \
544571
MPI_Type_size.3 \
545572
MPI_Type_size_x.3 \
546573
MPI_Type_struct.3 \
574+
MPI_Type_toint.3 \
547575
MPI_Type_ub.3 \
548576
MPI_Type_vector.3 \
549577
MPI_Unpack.3 \
@@ -573,6 +601,7 @@ OMPI_MAN3 = \
573601
MPI_Win_flush_local_all.3 \
574602
MPI_Win_free.3 \
575603
MPI_Win_free_keyval.3 \
604+
MPI_Win_fromint.3 \
576605
MPI_Win_get_attr.3 \
577606
MPI_Win_get_errhandler.3 \
578607
MPI_Win_get_group.3 \
@@ -589,6 +618,7 @@ OMPI_MAN3 = \
589618
MPI_Win_start.3 \
590619
MPI_Win_sync.3 \
591620
MPI_Win_test.3 \
621+
MPI_Win_toint.3 \
592622
MPI_Win_unlock.3 \
593623
MPI_Win_unlock_all.3 \
594624
MPI_Win_wait.3 \

docs/building-apps/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Open MPI "wrapper" compilers.
1414
removed-mpi-constructs
1515
deprecation-warnings
1616
building-static-apps
17+
mpi-abi
1718

1819
.. warning:: Open MPI does not attempt to interoperate with other MPI
1920
implementations, nor executables that were compiled for

docs/building-apps/mpi-abi.rst

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
.. _label-building-with-mpi-abi:
2+
3+
Building MPI applications using the MPI ABI
4+
===========================================
5+
6+
What is the MPI ABI
7+
-------------------
8+
9+
Starting with MPI 5.0, the MPI standard specifies an ABI for the c and
10+
Fortran MPI interfaces. In this release, Open MPI supports the c
11+
part of the MPI ABI.
12+
13+
By using the MPI ABI, an MPI application can be built against one
14+
implementation of MPI that supports the MPI ABI, and later run using
15+
the MPI ABI compliant MPI library generated using a different MPI
16+
implementation. This assumes that the application is dynamically linked.
17+
18+
The MPI 5.0 standard specifies the file name of the MPI ABI compliant
19+
library - libmpi_abi. The major version of the library is 1 and minor
20+
version is 0.
21+
22+
How to build an application using the MPI ABI
23+
---------------------------------------------
24+
25+
To build an application against the MPI ABI compliant Open MPI library,
26+
the ``mpicc_abi`` compiler wrapper must be used for compiling and
27+
linking the application or shared library.
28+
29+
This release does not support the Fortran ABI so there is no ``mpifort_abi``
30+
compiler wrapper. This mixed c/Fortran MPI apps cannot make use of the
31+
MPI ABI library with this release.
32+
33+

0 commit comments

Comments
 (0)