Skip to content

Commit 186bb4c

Browse files
committed
get OpenMPI working
1 parent 0fdaaed commit 186bb4c

File tree

2 files changed

+361
-0
lines changed

2 files changed

+361
-0
lines changed

src/MPI.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ import MPIPreferences
3838

3939
@static if MPIPreferences.binary == "MPICH_jll"
4040
import MPICH_jll: libmpi, mpiexec
41+
elseif MPIPreferences.binary == "OpenMPI_jll"
42+
import OpenMPI_jll: libmpi, mpiexec
43+
elseif MPIPreferences.binary == "MicrosofMPI_jll"
44+
import MicrosofMPI_jll: libmpi, mpiexec
4145
else
4246
error("Unknown MPI binarys")
4347
end
@@ -111,6 +115,8 @@ function __init__()
111115
ENV["UCX_ERROR_SIGNALS"] = "SIGILL,SIGBUS,SIGFPE"
112116
end
113117

118+
run_load_time_hooks()
119+
114120
@require CUDA="052768ef-5323-5732-b1bb-66c8b64840ba" include("cuda.jl")
115121
end
116122

src/consts/openmpi.jl

Lines changed: 355 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,355 @@
1+
# Compile-time constants
2+
# logic derived from
3+
# https://github.com/open-mpi/ompi/blob/master/ompi/include/mpi.h.in
4+
5+
# Implementation limits:
6+
const MPI_MAX_DATAREP_STRING = Cint(128)
7+
const MPI_MAX_ERROR_STRING = Cint(512)
8+
const MPI_MAX_INFO_KEY = Cint(255)
9+
const MPI_MAX_INFO_VAL = Cint(1024)
10+
const MPI_MAX_LIBRARY_VERSION_STRING = Cint(8192)
11+
const MPI_MAX_OBJECT_NAME = Cint(128)
12+
const MPI_MAX_PORT_NAME = Cint(256)
13+
const MPI_MAX_PROCESSOR_NAME = Cint(128)
14+
15+
# Types
16+
17+
# Various (signed) integer types:
18+
const MPI_Aint = Int
19+
const MPI_Fint = Int32
20+
const MPI_Count = Int64
21+
const MPI_Offset = Int64
22+
23+
# Status:
24+
struct MPI_Status
25+
MPI_SOURCE::Cint
26+
MPI_TAG::Cint
27+
MPI_ERROR::Cint
28+
_private0::Cint
29+
_private1::Cint
30+
_private2::Cint
31+
end
32+
33+
# Opaque handles:
34+
const MPI_Comm = Ptr{Cvoid}
35+
const MPI_Datatype = Ptr{Cvoid}
36+
const MPI_Errhandler = Ptr{Cvoid}
37+
const MPI_File = Ptr{Cvoid}
38+
const MPI_Group = Ptr{Cvoid}
39+
const MPI_Info = Ptr{Cvoid}
40+
const MPI_Message = Ptr{Cvoid}
41+
const MPI_Op = Ptr{Cvoid}
42+
const MPI_Request = Ptr{Cvoid}
43+
const MPI_Win = Ptr{Cvoid}
44+
45+
# Function pointers:
46+
const MPI_Comm_copy_attr_function = Ptr{Cvoid}
47+
const MPI_Comm_delete_attr_function = Ptr{Cvoid}
48+
const MPI_Comm_errhandler_function = Ptr{Cvoid}
49+
const MPI_Comm_errhandler_fn = MPI_Comm_errhandler_function
50+
const MPI_Copy_function = MPI_Comm_copy_attr_function
51+
const MPI_Datarep_conversion_function = Ptr{Cvoid}
52+
const MPI_Datarep_extent_function = Ptr{Cvoid}
53+
const MPI_Delete_function = Ptr{Cvoid}
54+
const MPI_File_errhandler_function = Ptr{Cvoid}
55+
const MPI_File_errhandler_fn = Ptr{Cvoid}
56+
const MPI_Grequest_cancel_function = Ptr{Cvoid}
57+
const MPI_Grequest_free_function = Ptr{Cvoid}
58+
const MPI_Grequest_query_function = Ptr{Cvoid}
59+
const MPI_Type_copy_attr_function = Ptr{Cvoid}
60+
const MPI_Type_delete_attr_function = Ptr{Cvoid}
61+
const MPI_User_function = Ptr{Cvoid}
62+
const MPI_Win_copy_attr_function = Ptr{Cvoid}
63+
const MPI_Win_delete_attr_function = Ptr{Cvoid}
64+
const MPI_Win_errhandler_function = Ptr{Cvoid}
65+
const MPI_Win_errhandler_fn = MPI_Win_errhandler_function
66+
67+
# Run-time constants
68+
69+
@const_ref MPI_ANY_SOURCE Cint -1
70+
@const_ref MPI_ANY_TAG Cint -1
71+
@const_ref MPI_PROC_NULL Cint -2
72+
@const_ref MPI_ROOT Cint -4
73+
74+
@const_ref MPI_CART Cint 1
75+
@const_ref MPI_GRAPH Cint 2
76+
@const_ref MPI_DIST_GRAPH Cint 3
77+
78+
@const_ref MPI_IDENT Cint 0
79+
@const_ref MPI_CONGRUENT Cint 1
80+
@const_ref MPI_SIMILAR Cint 2
81+
@const_ref MPI_UNEQUAL Cint 3
82+
83+
@const_ref MPI_KEYVAL_INVALID Cint -1
84+
@const_ref MPI_UNDEFINED Cint -32766
85+
86+
@const_ref MPI_TAG_UB Cint 0
87+
@const_ref MPI_HOST Cint 1
88+
@const_ref MPI_IO Cint 2
89+
@const_ref MPI_WTIME_IS_GLOBAL Cint 3
90+
@const_ref MPI_APPNUM Cint 4
91+
@const_ref MPI_LASTUSEDCODE Cint 5
92+
@const_ref MPI_UNIVERSE_SIZE Cint 6
93+
94+
@const_ref MPI_WIN_BASE Cint 7
95+
@const_ref MPI_WIN_SIZE Cint 8
96+
@const_ref MPI_WIN_DISP_UNIT Cint 9
97+
@const_ref MPI_WIN_CREATE_FLAVOR Cint 10
98+
@const_ref MPI_WIN_MODEL Cint 11
99+
100+
@const_ref MPI_COMBINER_NAMED Cint 0
101+
@const_ref MPI_COMBINER_DUP Cint 1
102+
@const_ref MPI_COMBINER_CONTIGUOUS Cint 2
103+
@const_ref MPI_COMBINER_VECTOR Cint 3
104+
@const_ref MPI_COMBINER_HVECTOR_INTEGER Cint 4
105+
@const_ref MPI_COMBINER_HVECTOR Cint 5
106+
@const_ref MPI_COMBINER_INDEXED Cint 6
107+
@const_ref MPI_COMBINER_HINDEXED_INTEGER Cint 7
108+
@const_ref MPI_COMBINER_HINDEXED Cint 8
109+
@const_ref MPI_COMBINER_INDEXED_BLOCK Cint 9
110+
@const_ref MPI_COMBINER_STRUCT_INTEGER Cint 10
111+
@const_ref MPI_COMBINER_STRUCT Cint 11
112+
@const_ref MPI_COMBINER_SUBARRAY Cint 12
113+
@const_ref MPI_COMBINER_DARRAY Cint 13
114+
@const_ref MPI_COMBINER_F90_REAL Cint 14
115+
@const_ref MPI_COMBINER_F90_COMPLEX Cint 15
116+
@const_ref MPI_COMBINER_F90_INTEGER Cint 16
117+
@const_ref MPI_COMBINER_RESIZED Cint 17
118+
@const_ref MPI_COMBINER_HINDEXED_BLOCK Cint 18
119+
120+
@const_ref MPI_COMM_TYPE_SHARED Cint 0
121+
122+
@const_ref MPI_DISTRIBUTE_BLOCK Cint 0
123+
@const_ref MPI_DISTRIBUTE_CYCLIC Cint 1
124+
@const_ref MPI_DISTRIBUTE_NONE Cint 2
125+
126+
@const_ref MPI_SUCCESS Cint 0
127+
@const_ref MPI_ERR_BUFFER Cint 1
128+
@const_ref MPI_ERR_COUNT Cint 2
129+
@const_ref MPI_ERR_TYPE Cint 3
130+
@const_ref MPI_ERR_TAG Cint 4
131+
@const_ref MPI_ERR_COMM Cint 5
132+
@const_ref MPI_ERR_RANK Cint 6
133+
@const_ref MPI_ERR_REQUEST Cint 7
134+
@const_ref MPI_ERR_ROOT Cint 8
135+
@const_ref MPI_ERR_GROUP Cint 9
136+
@const_ref MPI_ERR_OP Cint 10
137+
@const_ref MPI_ERR_TOPOLOGY Cint 11
138+
@const_ref MPI_ERR_DIMS Cint 12
139+
@const_ref MPI_ERR_ARG Cint 13
140+
@const_ref MPI_ERR_UNKNOWN Cint 14
141+
@const_ref MPI_ERR_TRUNCATE Cint 15
142+
@const_ref MPI_ERR_OTHER Cint 16
143+
@const_ref MPI_ERR_INTERN Cint 17
144+
@const_ref MPI_ERR_IN_STATUS Cint 18
145+
@const_ref MPI_ERR_PENDING Cint 19
146+
@const_ref MPI_ERR_ACCESS Cint 20
147+
@const_ref MPI_ERR_AMODE Cint 21
148+
@const_ref MPI_ERR_ASSERT Cint 22
149+
@const_ref MPI_ERR_BAD_FILE Cint 23
150+
@const_ref MPI_ERR_BASE Cint 24
151+
@const_ref MPI_ERR_CONVERSION Cint 25
152+
@const_ref MPI_ERR_DISP Cint 26
153+
@const_ref MPI_ERR_DUP_DATAREP Cint 27
154+
@const_ref MPI_ERR_FILE_EXISTS Cint 28
155+
@const_ref MPI_ERR_FILE_IN_USE Cint 29
156+
@const_ref MPI_ERR_FILE Cint 30
157+
@const_ref MPI_ERR_INFO_KEY Cint 31
158+
@const_ref MPI_ERR_INFO_NOKEY Cint 32
159+
@const_ref MPI_ERR_INFO_VALUE Cint 33
160+
@const_ref MPI_ERR_INFO Cint 34
161+
@const_ref MPI_ERR_IO Cint 35
162+
@const_ref MPI_ERR_KEYVAL Cint 36
163+
@const_ref MPI_ERR_LOCKTYPE Cint 37
164+
@const_ref MPI_ERR_NAME Cint 38
165+
@const_ref MPI_ERR_NO_MEM Cint 39
166+
@const_ref MPI_ERR_NOT_SAME Cint 40
167+
@const_ref MPI_ERR_NO_SPACE Cint 41
168+
@const_ref MPI_ERR_NO_SUCH_FILE Cint 42
169+
@const_ref MPI_ERR_PORT Cint 43
170+
@const_ref MPI_ERR_QUOTA Cint 44
171+
@const_ref MPI_ERR_READ_ONLY Cint 45
172+
@const_ref MPI_ERR_RMA_CONFLICT Cint 46
173+
@const_ref MPI_ERR_RMA_SYNC Cint 47
174+
@const_ref MPI_ERR_SERVICE Cint 48
175+
@const_ref MPI_ERR_SIZE Cint 49
176+
@const_ref MPI_ERR_SPAWN Cint 50
177+
@const_ref MPI_ERR_UNSUPPORTED_DATAREP Cint 51
178+
@const_ref MPI_ERR_UNSUPPORTED_OPERATION Cint 52
179+
@const_ref MPI_ERR_WIN Cint 53
180+
@const_ref MPI_T_ERR_MEMORY Cint 54
181+
@const_ref MPI_T_ERR_NOT_INITIALIZED Cint 55
182+
@const_ref MPI_T_ERR_CANNOT_INIT Cint 56
183+
@const_ref MPI_T_ERR_INVALID_INDEX Cint 57
184+
@const_ref MPI_T_ERR_INVALID_ITEM Cint 58
185+
@const_ref MPI_T_ERR_INVALID_HANDLE Cint 59
186+
@const_ref MPI_T_ERR_OUT_OF_HANDLES Cint 60
187+
@const_ref MPI_T_ERR_OUT_OF_SESSIONS Cint 61
188+
@const_ref MPI_T_ERR_INVALID_SESSION Cint 62
189+
@const_ref MPI_T_ERR_CVAR_SET_NOT_NOW Cint 63
190+
@const_ref MPI_T_ERR_CVAR_SET_NEVER Cint 64
191+
@const_ref MPI_T_ERR_PVAR_NO_STARTSTOP Cint 65
192+
@const_ref MPI_T_ERR_PVAR_NO_WRITE Cint 66
193+
@const_ref MPI_T_ERR_PVAR_NO_ATOMIC Cint 67
194+
@const_ref MPI_ERR_RMA_RANGE Cint 68
195+
@const_ref MPI_ERR_RMA_ATTACH Cint 69
196+
@const_ref MPI_ERR_RMA_FLAVOR Cint 70
197+
@const_ref MPI_ERR_RMA_SHARED Cint 71
198+
@const_ref MPI_T_ERR_INVALID Cint 72
199+
@const_ref MPI_T_ERR_INVALID_NAME Cint 73
200+
@const_ref MPI_ERR_PROC_ABORTED Cint 74
201+
@const_ref MPI_ERR_PROC_FAILED Cint 75
202+
@const_ref MPI_ERR_PROC_FAILED_PENDING Cint 76
203+
@const_ref MPI_ERR_REVOKED Cint 77
204+
205+
206+
@const_ref MPI_LOCK_EXCLUSIVE Cint 1
207+
@const_ref MPI_LOCK_SHARED Cint 2
208+
209+
210+
@const_ref MPI_MODE_CREATE Cint 1
211+
@const_ref MPI_MODE_RDONLY Cint 2
212+
@const_ref MPI_MODE_WRONLY Cint 4
213+
@const_ref MPI_MODE_RDWR Cint 8
214+
@const_ref MPI_MODE_DELETE_ON_CLOSE Cint 16
215+
@const_ref MPI_MODE_UNIQUE_OPEN Cint 32
216+
@const_ref MPI_MODE_EXCL Cint 64
217+
@const_ref MPI_MODE_APPEND Cint 128
218+
@const_ref MPI_MODE_SEQUENTIAL Cint 256
219+
220+
@const_ref MPI_MODE_NOCHECK Cint 1
221+
@const_ref MPI_MODE_NOPRECEDE Cint 2
222+
@const_ref MPI_MODE_NOPUT Cint 4
223+
@const_ref MPI_MODE_NOSTORE Cint 8
224+
@const_ref MPI_MODE_NOSUCCEED Cint 16
225+
226+
@const_ref MPI_ORDER_C Cint 0
227+
@const_ref MPI_ORDER_FORTRAN Cint 1
228+
229+
230+
@const_ref MPI_SEEK_SET Cint 600
231+
@const_ref MPI_SEEK_CUR Cint 602
232+
@const_ref MPI_SEEK_END Cint 604
233+
234+
@const_ref MPI_THREAD_SINGLE Cint 0
235+
@const_ref MPI_THREAD_FUNNELED Cint 1
236+
@const_ref MPI_THREAD_SERIALIZED Cint 2
237+
@const_ref MPI_THREAD_MULTIPLE Cint 3
238+
239+
@const_ref MPI_TYPECLASS_INTEGER Cint 1
240+
@const_ref MPI_TYPECLASS_REAL Cint 2
241+
@const_ref MPI_TYPECLASS_COMPLEX Cint 3
242+
243+
@const_ref MPI_ARGV_NULL Ptr{Cvoid} C_NULL
244+
@const_ref MPI_ARGVS_NULL Ptr{Cvoid} C_NULL
245+
246+
@const_ref MPI_UNWEIGHTED Ptr{Cvoid} 2
247+
@const_ref MPI_WEIGHTS_EMPTY Ptr{Cvoid} 3
248+
@const_ref MPI_BOTTOM Ptr{Cvoid} 0
249+
@const_ref MPI_IN_PLACE Ptr{Cvoid} 1
250+
251+
@const_ref MPI_COMM_NULL MPI_Comm cglobal((:ompi_mpi_comm_null, libmpi))
252+
@const_ref MPI_COMM_SELF MPI_Comm cglobal((:ompi_mpi_comm_self, libmpi))
253+
@const_ref MPI_COMM_WORLD MPI_Comm cglobal((:ompi_mpi_comm_world, libmpi))
254+
255+
@const_ref MPI_COMM_DUP_FN MPI_Comm_copy_attr_function cglobal((:OMPI_C_MPI_COMM_DUP_FN, libmpi))
256+
@const_ref MPI_COMM_NULL_COPY_FN MPI_Comm_copy_attr_function cglobal((:OMPI_C_MPI_COMM_NULL_COPY_FN, libmpi))
257+
@const_ref MPI_COMM_NULL_DELETE_FN MPI_Comm_delete_attr_function cglobal((:OMPI_C_MPI_COMM_NULL_DELETE_FN, libmpi))
258+
259+
@const_ref MPI_DATATYPE_NULL MPI_Datatype cglobal((:ompi_mpi_datatype_null, libmpi))
260+
261+
@const_ref MPI_BYTE MPI_Datatype cglobal((:ompi_mpi_byte, libmpi))
262+
@const_ref MPI_PACKED MPI_Datatype cglobal((:ompi_mpi_packed, libmpi))
263+
@const_ref MPI_CHAR MPI_Datatype cglobal((:ompi_mpi_char, libmpi))
264+
@const_ref MPI_SHORT MPI_Datatype cglobal((:ompi_mpi_short, libmpi))
265+
@const_ref MPI_INT MPI_Datatype cglobal((:ompi_mpi_int, libmpi))
266+
@const_ref MPI_LONG MPI_Datatype cglobal((:ompi_mpi_long, libmpi))
267+
@const_ref MPI_FLOAT MPI_Datatype cglobal((:ompi_mpi_float, libmpi))
268+
@const_ref MPI_DOUBLE MPI_Datatype cglobal((:ompi_mpi_double, libmpi))
269+
# @const_ref MPI_LONG_DOUBLE MPI_Datatype cglobal((:ompi_mpi_long_double, libmpi))
270+
@const_ref MPI_UNSIGNED_CHAR MPI_Datatype cglobal((:ompi_mpi_unsigned_char, libmpi))
271+
@const_ref MPI_SIGNED_CHAR MPI_Datatype cglobal((:ompi_mpi_signed_char, libmpi))
272+
@const_ref MPI_UNSIGNED_SHORT MPI_Datatype cglobal((:ompi_mpi_unsigned_short, libmpi))
273+
@const_ref MPI_UNSIGNED_LONG MPI_Datatype cglobal((:ompi_mpi_unsigned_long, libmpi))
274+
@const_ref MPI_UNSIGNED MPI_Datatype cglobal((:ompi_mpi_unsigned, libmpi))
275+
@const_ref MPI_FLOAT_INT MPI_Datatype cglobal((:ompi_mpi_float_int, libmpi))
276+
@const_ref MPI_DOUBLE_INT MPI_Datatype cglobal((:ompi_mpi_double_int, libmpi))
277+
@const_ref MPI_LONG_DOUBLE_INT MPI_Datatype cglobal((:ompi_mpi_longdbl_int, libmpi))
278+
@const_ref MPI_LONG_INT MPI_Datatype cglobal((:ompi_mpi_long_int, libmpi))
279+
@const_ref MPI_SHORT_INT MPI_Datatype cglobal((:ompi_mpi_short_int, libmpi))
280+
@const_ref MPI_2INT MPI_Datatype cglobal((:ompi_mpi_2int, libmpi))
281+
@const_ref MPI_UB MPI_Datatype cglobal((:ompi_mpi_ub, libmpi))
282+
@const_ref MPI_LB MPI_Datatype cglobal((:ompi_mpi_lb, libmpi))
283+
@const_ref MPI_WCHAR MPI_Datatype cglobal((:ompi_mpi_wchar, libmpi))
284+
@const_ref MPI_LONG_LONG_INT MPI_Datatype cglobal((:ompi_mpi_long_long_int, libmpi))
285+
const MPI_LONG_LONG = MPI_LONG_LONG_INT
286+
@const_ref MPI_UNSIGNED_LONG_LONG MPI_Datatype cglobal((:ompi_mpi_unsigned_long_long, libmpi))
287+
@const_ref MPI_2COMPLEX MPI_Datatype cglobal((:ompi_mpi_2cplex, libmpi))
288+
@const_ref MPI_2DOUBLE_COMPLEX MPI_Datatype cglobal((:ompi_mpi_2dblcplex, libmpi))
289+
290+
@const_ref MPI_INT8_T MPI_Datatype cglobal((:ompi_mpi_int8_t, libmpi))
291+
@const_ref MPI_UINT8_T MPI_Datatype cglobal((:ompi_mpi_uint8_t, libmpi))
292+
@const_ref MPI_INT16_T MPI_Datatype cglobal((:ompi_mpi_int16_t, libmpi))
293+
@const_ref MPI_UINT16_T MPI_Datatype cglobal((:ompi_mpi_uint16_t, libmpi))
294+
@const_ref MPI_INT32_T MPI_Datatype cglobal((:ompi_mpi_int32_t, libmpi))
295+
@const_ref MPI_UINT32_T MPI_Datatype cglobal((:ompi_mpi_uint32_t, libmpi))
296+
@const_ref MPI_INT64_T MPI_Datatype cglobal((:ompi_mpi_int64_t, libmpi))
297+
@const_ref MPI_UINT64_T MPI_Datatype cglobal((:ompi_mpi_uint64_t, libmpi))
298+
@const_ref MPI_AINT MPI_Datatype cglobal((:ompi_mpi_aint, libmpi))
299+
@const_ref MPI_OFFSET MPI_Datatype cglobal((:ompi_mpi_offset, libmpi))
300+
@const_ref MPI_C_BOOL MPI_Datatype cglobal((:ompi_mpi_c_bool, libmpi))
301+
@const_ref MPI_C_FLOAT_COMPLEX MPI_Datatype cglobal((:ompi_mpi_c_float_complex, libmpi))
302+
const MPI_C_COMPLEX = MPI_C_FLOAT_COMPLEX
303+
@const_ref MPI_C_DOUBLE_COMPLEX MPI_Datatype cglobal((:ompi_mpi_c_double_complex, libmpi))
304+
# @const_ref MPI_C_LONG_DOUBLE_COMPLEX MPI_Datatype cglobal((:ompi_mpi_c_long_double_complex, libmpi))
305+
@const_ref MPI_COUNT MPI_Datatype cglobal((:ompi_mpi_count, libmpi))
306+
307+
308+
@const_ref MPI_ERRHANDLER_NULL MPI_Errhandler cglobal((:ompi_mpi_errhandler_null, libmpi))
309+
@const_ref MPI_ERRORS_ARE_FATAL MPI_Errhandler cglobal((:ompi_mpi_errors_are_fatal, libmpi))
310+
@const_ref MPI_ERRORS_RETURN MPI_Errhandler cglobal((:ompi_mpi_errors_return, libmpi))
311+
# @const_ref MPI_ERRORS_ABORT MPI_Errhandler cglobal((:ompi_mpi_errors_abort, libmpi))
312+
313+
@const_ref MPI_FILE_NULL MPI_File cglobal((:ompi_mpi_file_null, libmpi))
314+
315+
@const_ref MPI_GROUP_EMPTY MPI_Group cglobal((:ompi_mpi_group_empty, libmpi))
316+
@const_ref MPI_GROUP_NULL MPI_Group cglobal((:ompi_mpi_group_null, libmpi))
317+
318+
@const_ref MPI_INFO_ENV MPI_Info cglobal((:ompi_mpi_info_env, libmpi))
319+
@const_ref MPI_INFO_NULL MPI_Info cglobal((:ompi_mpi_info_null, libmpi))
320+
321+
@const_ref MPI_MESSAGE_NO_PROC MPI_Message cglobal((:ompi_message_no_proc, libmpi))
322+
@const_ref MPI_MESSAGE_NULL MPI_Message cglobal((:ompi_message_null, libmpi))
323+
324+
@const_ref MPI_DISPLACEMENT_CURRENT MPI_Offset -54278278
325+
326+
@const_ref MPI_OP_NULL MPI_Op cglobal((:ompi_mpi_op_null, libmpi))
327+
@const_ref MPI_MAX MPI_Op cglobal((:ompi_mpi_op_max, libmpi))
328+
@const_ref MPI_MIN MPI_Op cglobal((:ompi_mpi_op_min, libmpi))
329+
@const_ref MPI_SUM MPI_Op cglobal((:ompi_mpi_op_sum, libmpi))
330+
@const_ref MPI_PROD MPI_Op cglobal((:ompi_mpi_op_prod, libmpi))
331+
@const_ref MPI_LAND MPI_Op cglobal((:ompi_mpi_op_land, libmpi))
332+
@const_ref MPI_BAND MPI_Op cglobal((:ompi_mpi_op_band, libmpi))
333+
@const_ref MPI_LOR MPI_Op cglobal((:ompi_mpi_op_lor, libmpi))
334+
@const_ref MPI_BOR MPI_Op cglobal((:ompi_mpi_op_bor, libmpi))
335+
@const_ref MPI_LXOR MPI_Op cglobal((:ompi_mpi_op_lxor, libmpi))
336+
@const_ref MPI_BXOR MPI_Op cglobal((:ompi_mpi_op_bxor, libmpi))
337+
@const_ref MPI_MINLOC MPI_Op cglobal((:ompi_mpi_op_minloc, libmpi))
338+
@const_ref MPI_MAXLOC MPI_Op cglobal((:ompi_mpi_op_maxloc, libmpi))
339+
@const_ref MPI_REPLACE MPI_Op cglobal((:ompi_mpi_op_replace, libmpi))
340+
@const_ref MPI_NO_OP MPI_Op cglobal((:ompi_mpi_op_no_op, libmpi))
341+
342+
@const_ref MPI_REQUEST_NULL MPI_Request cglobal((:ompi_request_null, libmpi))
343+
344+
@const_ref MPI_STATUS_IGNORE Ptr{MPI_Status} C_NULL
345+
@const_ref MPI_STATUSES_IGNORE Ptr{MPI_Status} C_NULL
346+
347+
@const_ref MPI_TYPE_DUP_FN MPI_Comm_copy_attr_function cglobal((:OMPI_C_MPI_TYPE_DUP_FN, libmpi), MPI_Comm_copy_attr_function)
348+
@const_ref MPI_TYPE_NULL_COPY_FN MPI_Type_copy_attr_function cglobal((:OMPI_C_MPI_TYPE_NULL_COPY_FN, libmpi), MPI_Comm_copy_attr_function)
349+
@const_ref MPI_TYPE_NULL_DELETE_FN MPI_Type_delete_attr_function cglobal((:OMPI_C_MPI_TYPE_NULL_DELETE_FN, libmpi), MPI_Type_delete_attr_function)
350+
351+
@const_ref MPI_WIN_NULL MPI_Win cglobal((:ompi_mpi_win_null, libmpi))
352+
353+
@const_ref MPI_WIN_DUP_FN MPI_Win_copy_attr_function cglobal((:OMPI_C_MPI_WIN_DUP_FN, libmpi), MPI_Win_copy_attr_function)
354+
@const_ref MPI_WIN_NULL_COPY_FN MPI_Win_copy_attr_function cglobal((:OMPI_C_MPI_WIN_NULL_COPY_FN, libmpi), MPI_Win_copy_attr_function)
355+
@const_ref MPI_WIN_NULL_DELETE_FN MPI_Win_delete_attr_function cglobal((:OMPI_C_MPI_WIN_NULL_DELETE_FN, libmpi), MPI_Win_delete_attr_function)

0 commit comments

Comments
 (0)