1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 #ifndef OMPI_MPI_MPIRUNTIME_H
33 #define OMPI_MPI_MPIRUNTIME_H
34
35 #include "ompi_config.h"
36
37 #include "opal/class/opal_list.h"
38 #include "opal/class/opal_hash_table.h"
39 #include "opal/threads/mutex.h"
40
41 BEGIN_C_DECLS
42
43
44 struct ompi_communicator_t;
45
46 struct opal_thread_t;
47
48 struct ompi_predefined_datatype_t;
49
50
51
52
53 OMPI_DECLSPEC extern opal_mutex_t ompi_mpi_bootstrap_mutex;
54
55 OMPI_DECLSPEC extern opal_atomic_int32_t ompi_mpi_state;
56
57 OMPI_DECLSPEC extern volatile bool ompi_rte_initialized;
58
59
60 OMPI_DECLSPEC extern bool ompi_mpi_thread_multiple;
61
62 OMPI_DECLSPEC extern int ompi_mpi_thread_requested;
63
64 OMPI_DECLSPEC extern int ompi_mpi_thread_provided;
65
66 OMPI_DECLSPEC extern struct opal_thread_t *ompi_mpi_main_thread;
67
68
69
70
71
72
73
74 typedef enum {
75 OMPI_MPI_STATE_NOT_INITIALIZED = 0,
76
77 OMPI_MPI_STATE_INIT_STARTED,
78 OMPI_MPI_STATE_INIT_COMPLETED,
79
80
81
82
83
84
85
86 OMPI_MPI_STATE_FINALIZE_STARTED,
87 OMPI_MPI_STATE_FINALIZE_PAST_COMM_SELF_DESTRUCT,
88 OMPI_MPI_STATE_FINALIZE_COMPLETED
89 } ompi_mpi_state_t;
90
91
92
93
94
95
96
97 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_character_addr;
98 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical_addr;
99 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical1_addr;
100 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical2_addr;
101 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical4_addr;
102 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_logical8_addr;
103 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer_addr;
104 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer1_addr;
105 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer2_addr;
106 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer4_addr;
107 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer8_addr;
108 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_integer16_addr;
109 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_real_addr;
110 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_real2_addr;
111 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_real4_addr;
112 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_real8_addr;
113 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_real16_addr;
114 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_dblprec_addr;
115 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_cplex_addr;
116 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_complex4_addr;
117 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_complex8_addr;
118 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_complex16_addr;
119 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_complex32_addr;
120 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_dblcplex_addr;
121 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_2real_addr;
122 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_2dblprec_addr;
123 OMPI_DECLSPEC extern struct ompi_predefined_datatype_t *ompi_mpi_2integer_addr;
124
125 OMPI_DECLSPEC extern struct ompi_status_public_t *ompi_mpi_status_ignore_addr;
126 OMPI_DECLSPEC extern struct ompi_status_public_t *ompi_mpi_statuses_ignore_addr;
127
128
129
130 #define OMPI_THREADLEVEL_SINGLE_BF 0x00000001
131 #define OMPI_THREADLEVEL_FUNNELED_BF 0x00000002
132 #define OMPI_THREADLEVEL_SERIALIZED_BF 0x00000004
133 #define OMPI_THREADLEVEL_MULTIPLE_BF 0x00000008
134
135 #define OMPI_THREADLEVEL_SET_BITFLAG(threadlevelin,threadlevelout) { \
136 if ( MPI_THREAD_SINGLE == threadlevelin ) { \
137 threadlevelout |= OMPI_THREADLEVEL_SINGLE_BF; \
138 } else if ( MPI_THREAD_FUNNELED == threadlevelin ) { \
139 threadlevelout |= OMPI_THREADLEVEL_FUNNELED_BF; \
140 } else if ( MPI_THREAD_SERIALIZED == threadlevelin ) { \
141 threadlevelout |= OMPI_THREADLEVEL_SERIALIZED_BF; \
142 } else if ( MPI_THREAD_MULTIPLE == threadlevelin ) { \
143 threadlevelout |= OMPI_THREADLEVEL_MULTIPLE_BF; \
144 }}
145
146
147 #define OMPI_THREADLEVEL_IS_MULTIPLE(threadlevel) (threadlevel & OMPI_THREADLEVEL_MULTIPLE_BF)
148
149
150
151
152 OMPI_DECLSPEC extern opal_list_t ompi_registered_datareps;
153
154
155
156
157
158
159 extern opal_hash_table_t ompi_mpi_f90_integer_hashtable;
160 extern opal_hash_table_t ompi_mpi_f90_real_hashtable;
161 extern opal_hash_table_t ompi_mpi_f90_complex_hashtable;
162
163
164 OMPI_DECLSPEC extern const char ompi_version_string[];
165
166
167
168
169
170
171
172 void ompi_mpi_thread_level(int requested, int *provided);
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194 int ompi_mpi_init(int argc, char **argv, int requested, int *provided,
195 bool reinit_ok);
196
197
198
199
200
201
202
203
204
205
206 int ompi_mpi_finalize(void);
207
208
209
210
211 OMPI_DECLSPEC int ompi_mpi_abort(struct ompi_communicator_t* comm,
212 int errcode);
213
214
215
216
217
218 int ompi_init_preconnect_mpi(void);
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236 void ompi_mpi_dynamics_disable(const char *msg);
237
238
239
240
241
242
243 bool ompi_mpi_dynamics_is_enabled(const char *function);
244
245
246
247
248
249 void ompi_mpi_dynamics_finalize(void);
250
251 END_C_DECLS
252
253 #endif