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 #ifndef MCA_CRCP_HOKE_PML_EXPORT_H
26 #define MCA_CRCP_HOKE_PML_EXPORT_H
27
28 #include "ompi_config.h"
29
30 #include "ompi/mca/mca.h"
31 #include "ompi/mca/crcp/crcp.h"
32 #include "ompi/communicator/communicator.h"
33
34 #include "ompi/mca/crcp/bkmrk/crcp_bkmrk.h"
35
36 BEGIN_C_DECLS
37
38
39
40
41 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_enable
42 ( bool enable, ompi_crcp_base_pml_state_t* pml_state );
43
44 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_add_comm
45 ( struct ompi_communicator_t* comm,
46 ompi_crcp_base_pml_state_t* pml_state );
47 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_del_comm
48 ( struct ompi_communicator_t* comm,
49 ompi_crcp_base_pml_state_t* pml_state );
50
51 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_add_procs
52 ( struct ompi_proc_t **procs, size_t nprocs,
53 ompi_crcp_base_pml_state_t* pml_state );
54 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_del_procs
55 ( struct ompi_proc_t **procs, size_t nprocs,
56 ompi_crcp_base_pml_state_t* pml_state );
57
58 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_progress
59 (ompi_crcp_base_pml_state_t* pml_state);
60
61 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_iprobe
62 (int dst, int tag, struct ompi_communicator_t* comm,
63 int *matched, ompi_status_public_t* status,
64 ompi_crcp_base_pml_state_t* pml_state );
65
66 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_probe
67 ( int dst, int tag, struct ompi_communicator_t* comm,
68 ompi_status_public_t* status,
69 ompi_crcp_base_pml_state_t* pml_state );
70
71 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_isend_init
72 ( void *buf, size_t count, ompi_datatype_t *datatype,
73 int dst, int tag, mca_pml_base_send_mode_t mode,
74 struct ompi_communicator_t* comm,
75 struct ompi_request_t **request,
76 ompi_crcp_base_pml_state_t* pml_state );
77
78 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_isend
79 ( void *buf, size_t count, ompi_datatype_t *datatype,
80 int dst, int tag, mca_pml_base_send_mode_t mode,
81 struct ompi_communicator_t* comm,
82 struct ompi_request_t **request,
83 ompi_crcp_base_pml_state_t* pml_state );
84
85 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_send
86 ( void *buf, size_t count, ompi_datatype_t *datatype,
87 int dst, int tag, mca_pml_base_send_mode_t mode,
88 struct ompi_communicator_t* comm,
89 ompi_crcp_base_pml_state_t* pml_state );
90
91 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_irecv_init
92 ( void *buf, size_t count, ompi_datatype_t *datatype,
93 int src, int tag, struct ompi_communicator_t* comm,
94 struct ompi_request_t **request,
95 ompi_crcp_base_pml_state_t* pml_state);
96
97 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_irecv
98 ( void *buf, size_t count, ompi_datatype_t *datatype,
99 int src, int tag, struct ompi_communicator_t* comm,
100 struct ompi_request_t **request,
101 ompi_crcp_base_pml_state_t* pml_state );
102
103 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_recv
104 ( void *buf, size_t count, ompi_datatype_t *datatype,
105 int src, int tag, struct ompi_communicator_t* comm,
106 ompi_status_public_t* status,
107 ompi_crcp_base_pml_state_t* pml_state);
108
109 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_dump
110 ( struct ompi_communicator_t* comm, int verbose,
111 ompi_crcp_base_pml_state_t* pml_state );
112
113 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_start
114 ( size_t count, ompi_request_t** requests,
115 ompi_crcp_base_pml_state_t* pml_state );
116
117 ompi_crcp_base_pml_state_t* ompi_crcp_bkmrk_pml_ft_event
118 (int state, ompi_crcp_base_pml_state_t* pml_state);
119
120 enum ompi_crcp_bkmrk_pml_quiesce_tag_type_t {
121 QUIESCE_TAG_NONE = 0,
122 QUIESCE_TAG_CKPT,
123 QUIESCE_TAG_CONTINUE,
124 QUIESCE_TAG_RESTART,
125 QUIESCE_TAG_UNKNOWN
126 };
127 typedef enum ompi_crcp_bkmrk_pml_quiesce_tag_type_t ompi_crcp_bkmrk_pml_quiesce_tag_type_t;
128
129 int ompi_crcp_bkmrk_pml_quiesce_start(ompi_crcp_bkmrk_pml_quiesce_tag_type_t tag );
130 int ompi_crcp_bkmrk_pml_quiesce_end(ompi_crcp_bkmrk_pml_quiesce_tag_type_t tag );
131
132
133
134
135 int ompi_crcp_bkmrk_request_complete(struct ompi_request_t *request);
136
137
138
139
140
141
142
143 enum ompi_crcp_bkmrk_pml_message_type_t {
144 COORD_MSG_TYPE_UNKNOWN,
145 COORD_MSG_TYPE_B_SEND,
146 COORD_MSG_TYPE_I_SEND,
147 COORD_MSG_TYPE_P_SEND,
148 COORD_MSG_TYPE_B_RECV,
149 COORD_MSG_TYPE_I_RECV,
150 COORD_MSG_TYPE_P_RECV
151 };
152 typedef enum ompi_crcp_bkmrk_pml_message_type_t ompi_crcp_bkmrk_pml_message_type_t;
153
154
155
156
157
158
159
160
161
162
163
164
165
166 struct ompi_crcp_bkmrk_pml_message_content_ref_t {
167
168 opal_list_item_t super;
169
170
171 void * buffer;
172
173
174 ompi_request_t *request;
175
176
177 ompi_status_public_t status;
178
179
180 bool active;
181
182
183 bool done;
184
185
186 bool already_posted;
187
188
189 bool already_drained;
190
191
192 uint64_t msg_id;
193 };
194 typedef struct ompi_crcp_bkmrk_pml_message_content_ref_t ompi_crcp_bkmrk_pml_message_content_ref_t;
195
196 OBJ_CLASS_DECLARATION(ompi_crcp_bkmrk_pml_message_content_ref_t);
197 void ompi_crcp_bkmrk_pml_message_content_ref_construct(ompi_crcp_bkmrk_pml_message_content_ref_t *content_ref);
198 void ompi_crcp_bkmrk_pml_message_content_ref_destruct( ompi_crcp_bkmrk_pml_message_content_ref_t *content_ref);
199
200
201
202
203
204
205 struct ompi_crcp_bkmrk_pml_drain_message_ref_t {
206
207 opal_list_item_t super;
208
209
210 uint64_t msg_id;
211
212
213 ompi_crcp_bkmrk_pml_message_type_t msg_type;
214
215
216 size_t count;
217
218
219 struct ompi_datatype_t * datatype;
220
221
222 size_t ddt_size;
223
224
225 int tag;
226
227
228 int rank;
229
230
231 ompi_communicator_t* comm;
232
233
234 opal_list_t msg_contents;
235
236
237 ompi_process_name_t proc_name;
238
239
240
241
242 int done;
243
244
245
246
247 int active;
248
249
250
251
252
253
254 int already_posted;
255
256 };
257 typedef struct ompi_crcp_bkmrk_pml_drain_message_ref_t ompi_crcp_bkmrk_pml_drain_message_ref_t;
258
259 OBJ_CLASS_DECLARATION(ompi_crcp_bkmrk_pml_drain_message_ref_t);
260 void ompi_crcp_bkmrk_pml_drain_message_ref_construct(ompi_crcp_bkmrk_pml_drain_message_ref_t *msg_ref);
261 void ompi_crcp_bkmrk_pml_drain_message_ref_destruct( ompi_crcp_bkmrk_pml_drain_message_ref_t *msg_ref);
262
263
264
265
266 struct ompi_crcp_bkmrk_pml_drain_message_ack_ref_t {
267
268 opal_list_item_t super;
269
270
271 bool complete;
272
273
274 ompi_process_name_t peer;
275 };
276 typedef struct ompi_crcp_bkmrk_pml_drain_message_ack_ref_t ompi_crcp_bkmrk_pml_drain_message_ack_ref_t;
277
278 OBJ_CLASS_DECLARATION(ompi_crcp_bkmrk_pml_drain_message_ack_ref_t);
279 void ompi_crcp_bkmrk_pml_drain_message_ack_ref_construct(ompi_crcp_bkmrk_pml_drain_message_ack_ref_t *msg_ack_ref);
280 void ompi_crcp_bkmrk_pml_drain_message_ack_ref_destruct( ompi_crcp_bkmrk_pml_drain_message_ack_ref_t *msg_ack_ref);
281
282
283
284
285
286 struct ompi_crcp_bkmrk_pml_traffic_message_ref_t {
287
288 opal_list_item_t super;
289
290
291 uint64_t msg_id;
292
293
294 ompi_crcp_bkmrk_pml_message_type_t msg_type;
295
296
297 size_t count;
298
299
300 size_t ddt_size;
301
302
303 int tag;
304
305
306 int rank;
307
308
309 ompi_communicator_t* comm;
310
311
312 opal_list_t msg_contents;
313
314
315 ompi_process_name_t proc_name;
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337 int matched;
338
339
340
341
342
343
344 int done;
345
346
347
348
349
350
351 int active;
352
353
354
355
356 int posted;
357
358
359
360
361
362 int active_drain;
363 };
364 typedef struct ompi_crcp_bkmrk_pml_traffic_message_ref_t ompi_crcp_bkmrk_pml_traffic_message_ref_t;
365
366 OBJ_CLASS_DECLARATION(ompi_crcp_bkmrk_pml_traffic_message_ref_t);
367 void ompi_crcp_bkmrk_pml_traffic_message_ref_construct(ompi_crcp_bkmrk_pml_traffic_message_ref_t *msg_ref);
368 void ompi_crcp_bkmrk_pml_traffic_message_ref_destruct( ompi_crcp_bkmrk_pml_traffic_message_ref_t *msg_ref);
369
370
371
372
373
374
375
376
377 struct ompi_crcp_bkmrk_pml_peer_ref_t {
378
379 opal_list_item_t super;
380
381
382 ompi_process_name_t proc_name;
383
384
385 opal_list_t send_list;
386 opal_list_t isend_list;
387 opal_list_t send_init_list;
388
389
390 opal_list_t recv_list;
391 opal_list_t irecv_list;
392 opal_list_t recv_init_list;
393
394
395 opal_list_t drained_list;
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415 uint32_t total_msgs_sent;
416 uint32_t matched_msgs_sent;
417
418
419 uint32_t total_msgs_recvd;
420 uint32_t matched_msgs_recvd;
421
422
423 uint32_t total_drained_msgs;
424
425
426 bool ack_required;
427 };
428 typedef struct ompi_crcp_bkmrk_pml_peer_ref_t ompi_crcp_bkmrk_pml_peer_ref_t;
429
430 OBJ_CLASS_DECLARATION(ompi_crcp_bkmrk_pml_peer_ref_t);
431 void ompi_crcp_bkmrk_pml_peer_ref_construct(ompi_crcp_bkmrk_pml_peer_ref_t *bkm_proc);
432 void ompi_crcp_bkmrk_pml_peer_ref_destruct( ompi_crcp_bkmrk_pml_peer_ref_t *bkm_proc);
433
434
435
436
437 struct ompi_crcp_bkmrk_pml_state_t {
438 ompi_crcp_base_pml_state_t p_super;
439 ompi_crcp_base_pml_state_t *prev_ptr;
440
441 ompi_crcp_bkmrk_pml_peer_ref_t *peer_ref;
442 ompi_crcp_bkmrk_pml_traffic_message_ref_t *msg_ref;
443 };
444 typedef struct ompi_crcp_bkmrk_pml_state_t ompi_crcp_bkmrk_pml_state_t;
445 OBJ_CLASS_DECLARATION(ompi_crcp_bkmrk_pml_state_t);
446
447
448
449
450
451
452
453 extern opal_list_t ompi_crcp_bkmrk_pml_peer_refs;
454
455 END_C_DECLS
456
457 #endif