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