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 #ifndef MCA_CRCP_H
29 #define MCA_CRCP_H
30
31 #include "ompi_config.h"
32
33 #include "opal/class/opal_object.h"
34 #include "ompi/mca/mca.h"
35 #include "opal/mca/base/base.h"
36 #include "opal/mca/crs/crs.h"
37 #include "opal/mca/crs/base/base.h"
38 #include "opal/mca/btl/btl.h"
39 #include "opal/mca/btl/base/base.h"
40 #include "opal/class/opal_free_list.h"
41
42 #include "ompi/datatype/ompi_datatype.h"
43 #include "ompi/request/request.h"
44 #include "ompi/mca/pml/pml.h"
45 #include "ompi/mca/pml/base/base.h"
46
47
48 BEGIN_C_DECLS
49
50
51
52
53
54 typedef int (*ompi_crcp_base_module_init_fn_t)
55 (void);
56
57
58
59
60
61 typedef int (*ompi_crcp_base_module_finalize_fn_t)
62 (void);
63
64
65
66
67
68
69
70
71 typedef int (*ompi_crcp_base_quiesce_start_fn_t)
72 (MPI_Info *info);
73
74
75
76
77 typedef int (*ompi_crcp_base_quiesce_end_fn_t)
78 (MPI_Info *info);
79
80
81
82
83
84
85
86
87
88 enum ompi_crcp_base_pml_states_t {
89 OMPI_CRCP_PML_PRE,
90 OMPI_CRCP_PML_POST,
91 OMPI_CRCP_PML_SKIP,
92 OMPI_CRCP_PML_DONE
93 };
94 typedef enum ompi_crcp_base_pml_states_t ompi_crcp_base_pml_states_t;
95
96 struct ompi_crcp_base_pml_state_t {
97 opal_free_list_item_t super;
98 ompi_crcp_base_pml_states_t state;
99 int error_code;
100 mca_pml_base_component_t *wrapped_pml_component;
101 mca_pml_base_module_t *wrapped_pml_module;
102 };
103 typedef struct ompi_crcp_base_pml_state_t ompi_crcp_base_pml_state_t;
104 OMPI_DECLSPEC OBJ_CLASS_DECLARATION(ompi_crcp_base_pml_state_t);
105
106 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_enable_fn_t)
107 (bool enable, ompi_crcp_base_pml_state_t* );
108
109 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_add_comm_fn_t)
110 ( struct ompi_communicator_t* comm , ompi_crcp_base_pml_state_t*);
111 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_del_comm_fn_t)
112 ( struct ompi_communicator_t* comm , ompi_crcp_base_pml_state_t*);
113
114 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_add_procs_fn_t)
115 ( struct ompi_proc_t **procs, size_t nprocs , ompi_crcp_base_pml_state_t*);
116 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_del_procs_fn_t)
117 ( struct ompi_proc_t **procs, size_t nprocs , ompi_crcp_base_pml_state_t*);
118
119 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_progress_fn_t)
120 (ompi_crcp_base_pml_state_t*);
121
122 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_iprobe_fn_t)
123 (int dst, int tag, struct ompi_communicator_t* comm, int *matched,
124 ompi_status_public_t* status, ompi_crcp_base_pml_state_t* );
125
126 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_probe_fn_t)
127 ( int dst, int tag, struct ompi_communicator_t* comm,
128 ompi_status_public_t* status, ompi_crcp_base_pml_state_t* );
129
130 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_isend_init_fn_t)
131 ( void *buf, size_t count, ompi_datatype_t *datatype, int dst, int tag,
132 mca_pml_base_send_mode_t mode, struct ompi_communicator_t* comm,
133 struct ompi_request_t **request, ompi_crcp_base_pml_state_t* );
134
135 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_isend_fn_t)
136 ( void *buf, size_t count, ompi_datatype_t *datatype, int dst, int tag,
137 mca_pml_base_send_mode_t mode, struct ompi_communicator_t* comm,
138 struct ompi_request_t **request, ompi_crcp_base_pml_state_t* );
139
140 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_send_fn_t)
141 ( void *buf, size_t count, ompi_datatype_t *datatype, int dst, int tag,
142 mca_pml_base_send_mode_t mode, struct ompi_communicator_t* comm,
143 ompi_crcp_base_pml_state_t* );
144
145 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_irecv_init_fn_t)
146 ( void *buf, size_t count, ompi_datatype_t *datatype, int src, int tag,
147 struct ompi_communicator_t* comm, struct ompi_request_t **request,
148 ompi_crcp_base_pml_state_t*);
149
150 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_irecv_fn_t)
151 ( void *buf, size_t count, ompi_datatype_t *datatype, int src, int tag,
152 struct ompi_communicator_t* comm, struct ompi_request_t **request,
153 ompi_crcp_base_pml_state_t* );
154
155 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_recv_fn_t)
156 ( void *buf, size_t count, ompi_datatype_t *datatype, int src, int tag,
157 struct ompi_communicator_t* comm, ompi_status_public_t* status,
158 ompi_crcp_base_pml_state_t*);
159
160 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_dump_fn_t)
161 ( struct ompi_communicator_t* comm, int verbose, ompi_crcp_base_pml_state_t* );
162
163 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_start_fn_t)
164 ( size_t count, ompi_request_t** requests, ompi_crcp_base_pml_state_t* );
165
166 typedef ompi_crcp_base_pml_state_t* (*ompi_crcp_base_pml_ft_event_fn_t)
167 (int state, ompi_crcp_base_pml_state_t*);
168
169
170 typedef int (*ompi_crcp_base_request_complete_fn_t)
171 (struct ompi_request_t *request);
172
173
174
175
176
177
178
179
180 enum ompi_crcp_base_btl_states_t {
181 OMPI_CRCP_BTL_PRE,
182 OMPI_CRCP_BTL_POST,
183 OMPI_CRCP_BTL_SKIP,
184 OMPI_CRCP_BTL_DONE
185 };
186 typedef enum ompi_crcp_base_btl_states_t ompi_crcp_base_btl_states_t;
187
188 struct ompi_crcp_base_btl_state_t {
189 opal_free_list_item_t super;
190 ompi_crcp_base_btl_states_t state;
191 int error_code;
192 mca_btl_base_descriptor_t* des;
193 mca_btl_base_component_t *wrapped_btl_component;
194 mca_btl_base_module_t *wrapped_btl_module;
195 };
196 typedef struct ompi_crcp_base_btl_state_t ompi_crcp_base_btl_state_t;
197 OBJ_CLASS_DECLARATION(ompi_crcp_base_btl_state_t);
198
199 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_add_procs_fn_t)
200 ( struct mca_btl_base_module_t* btl,
201 size_t nprocs,
202 struct ompi_proc_t** procs,
203 struct mca_btl_base_endpoint_t** endpoints,
204 struct opal_bitmap_t* reachable,
205 ompi_crcp_base_btl_state_t* );
206
207 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_del_procs_fn_t)
208 ( struct mca_btl_base_module_t* btl,
209 size_t nprocs,
210 struct ompi_proc_t** procs,
211 struct mca_btl_base_endpoint_t**,
212 ompi_crcp_base_btl_state_t*);
213
214 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_register_fn_t)
215 ( struct mca_btl_base_module_t* btl,
216 mca_btl_base_tag_t tag,
217 mca_btl_base_module_recv_cb_fn_t cbfunc,
218 void* cbdata,
219 ompi_crcp_base_btl_state_t*);
220
221 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_finalize_fn_t)
222 ( struct mca_btl_base_module_t* btl,
223 ompi_crcp_base_btl_state_t*);
224
225 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_alloc_fn_t)
226 ( struct mca_btl_base_module_t* btl,
227 size_t size,
228 ompi_crcp_base_btl_state_t*);
229
230 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_free_fn_t)
231 ( struct mca_btl_base_module_t* btl,
232 mca_btl_base_descriptor_t* descriptor,
233 ompi_crcp_base_btl_state_t*);
234
235 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_prepare_fn_t)
236 ( struct mca_btl_base_module_t* btl,
237 struct mca_btl_base_endpoint_t* endpoint,
238 mca_rcache_base_registration_t* registration,
239 struct opal_convertor_t* convertor,
240 size_t reserve,
241 size_t* size,
242 ompi_crcp_base_btl_state_t*);
243
244 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_send_fn_t)
245 ( struct mca_btl_base_module_t* btl,
246 struct mca_btl_base_endpoint_t* endpoint,
247 struct mca_btl_base_descriptor_t* descriptor,
248 mca_btl_base_tag_t tag,
249 ompi_crcp_base_btl_state_t*);
250
251 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_put_fn_t)
252 ( struct mca_btl_base_module_t* btl,
253 struct mca_btl_base_endpoint_t* endpoint,
254 struct mca_btl_base_descriptor_t* descriptor,
255 ompi_crcp_base_btl_state_t*);
256
257 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_get_fn_t)
258 ( struct mca_btl_base_module_t* btl,
259 struct mca_btl_base_endpoint_t* endpoint,
260 struct mca_btl_base_descriptor_t* descriptor,
261 ompi_crcp_base_btl_state_t*);
262
263 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_dump_fn_t)
264 ( struct mca_btl_base_module_t* btl,
265 struct mca_btl_base_endpoint_t* endpoint,
266 int verbose,
267 ompi_crcp_base_btl_state_t*);
268
269 typedef ompi_crcp_base_btl_state_t* (*mca_crcp_base_btl_module_ft_event_fn_t)
270 (int state,
271 ompi_crcp_base_btl_state_t*);
272
273
274
275
276
277 struct ompi_crcp_base_component_2_0_0_t {
278
279 mca_base_component_t base_version;
280
281 mca_base_component_data_t base_data;
282
283
284 int verbose;
285
286 int output_handle;
287
288 int priority;
289
290 };
291 typedef struct ompi_crcp_base_component_2_0_0_t ompi_crcp_base_component_2_0_0_t;
292 typedef struct ompi_crcp_base_component_2_0_0_t ompi_crcp_base_component_t;
293
294
295
296
297 struct ompi_crcp_base_module_1_0_0_t {
298
299 ompi_crcp_base_module_init_fn_t crcp_init;
300
301 ompi_crcp_base_module_finalize_fn_t crcp_finalize;
302
303
304 ompi_crcp_base_quiesce_start_fn_t quiesce_start;
305 ompi_crcp_base_quiesce_end_fn_t quiesce_end;
306
307
308 ompi_crcp_base_pml_enable_fn_t pml_enable;
309
310 ompi_crcp_base_pml_add_comm_fn_t pml_add_comm;
311 ompi_crcp_base_pml_del_comm_fn_t pml_del_comm;
312
313 ompi_crcp_base_pml_add_procs_fn_t pml_add_procs;
314 ompi_crcp_base_pml_del_procs_fn_t pml_del_procs;
315
316 ompi_crcp_base_pml_progress_fn_t pml_progress;
317
318 ompi_crcp_base_pml_iprobe_fn_t pml_iprobe;
319 ompi_crcp_base_pml_probe_fn_t pml_probe;
320
321 ompi_crcp_base_pml_isend_init_fn_t pml_isend_init;
322 ompi_crcp_base_pml_isend_fn_t pml_isend;
323 ompi_crcp_base_pml_send_fn_t pml_send;
324
325 ompi_crcp_base_pml_irecv_init_fn_t pml_irecv_init;
326 ompi_crcp_base_pml_irecv_fn_t pml_irecv;
327 ompi_crcp_base_pml_recv_fn_t pml_recv;
328
329 ompi_crcp_base_pml_dump_fn_t pml_dump;
330 ompi_crcp_base_pml_start_fn_t pml_start;
331
332 ompi_crcp_base_pml_ft_event_fn_t pml_ft_event;
333
334
335 ompi_crcp_base_request_complete_fn_t request_complete;
336
337
338 mca_crcp_base_btl_module_add_procs_fn_t btl_add_procs;
339 mca_crcp_base_btl_module_del_procs_fn_t btl_del_procs;
340
341 mca_crcp_base_btl_module_register_fn_t btl_register;
342 mca_crcp_base_btl_module_finalize_fn_t btl_finalize;
343
344 mca_crcp_base_btl_module_alloc_fn_t btl_alloc;
345 mca_crcp_base_btl_module_free_fn_t btl_free;
346
347 mca_crcp_base_btl_module_prepare_fn_t btl_prepare_src;
348 mca_crcp_base_btl_module_prepare_fn_t btl_prepare_dst;
349
350 mca_crcp_base_btl_module_send_fn_t btl_send;
351 mca_crcp_base_btl_module_put_fn_t btl_put;
352 mca_crcp_base_btl_module_get_fn_t btl_get;
353
354 mca_crcp_base_btl_module_dump_fn_t btl_dump;
355
356 mca_crcp_base_btl_module_ft_event_fn_t btl_ft_event;
357 };
358 typedef struct ompi_crcp_base_module_1_0_0_t ompi_crcp_base_module_1_0_0_t;
359 typedef struct ompi_crcp_base_module_1_0_0_t ompi_crcp_base_module_t;
360
361 OMPI_DECLSPEC extern ompi_crcp_base_module_t ompi_crcp;
362
363
364
365
366 #define OMPI_CRCP_BASE_VERSION_2_0_0 \
367 OMPI_MCA_BASE_VERSION_2_1_0("crcp", 2, 0, 0)
368
369
370
371
372 #if OPAL_ENABLE_FT_CR == 1
373 #define OMPI_CRCP_REQUEST_COMPLETE(req) \
374 if( NULL != ompi_crcp.request_complete) { \
375 ompi_crcp.request_complete(req); \
376 }
377 #else
378 #define OMPI_CRCP_REQUEST_COMPLETE(req) ;
379 #endif
380
381 END_C_DECLS
382
383 #endif