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