This source file includes following definitions.
- vprotocol_pessimist_request_no_free
- mca_vprotocol_pessimist_test
- mca_vprotocol_pessimist_test_all
- mca_vprotocol_pessimist_test_any
- mca_vprotocol_pessimist_wait_any
- mca_vprotocol_pessimist_test_some
- mca_vprotocol_pessimist_wait_some
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 #include "ompi_config.h"
  12 #include "vprotocol_pessimist.h"
  13 #include "vprotocol_pessimist_wait.h"
  14 
  15 
  16 
  17 static int vprotocol_pessimist_request_no_free(ompi_request_t **req) {
  18     return OMPI_SUCCESS;
  19 }
  20 
  21 #define PREPARE_REQUESTS_WITH_NO_FREE(count, requests) do { \
  22     size_t i; \
  23     for(i = 0; i < count; i++) \
  24     { \
  25         if(requests[i] == MPI_REQUEST_NULL) continue; \
  26         requests[i]->req_free = vprotocol_pessimist_request_no_free; \
  27     } \
  28 } while(0)
  29 
  30 
  31 int mca_vprotocol_pessimist_test(ompi_request_t ** rptr, int *completed,
  32                                  ompi_status_public_t * status)
  33 {
  34     int ret;
  35     int index;
  36 
  37     VPROTOCOL_PESSIMIST_DELIVERY_REPLAY(1, rptr, completed, &index, status);
  38 
  39     ret = mca_pml_v.host_request_fns.req_test(rptr, completed, status);
  40     if(completed)
  41         vprotocol_pessimist_delivery_log(*rptr);
  42     else
  43         vprotocol_pessimist_delivery_log(NULL);
  44     return ret;
  45 }
  46 
  47 int mca_vprotocol_pessimist_test_all(size_t count, ompi_request_t ** requests,
  48                                      int *completed,
  49                                      ompi_status_public_t * statuses)
  50 {
  51     int ret;
  52     int index;
  53 
  54     
  55     VPROTOCOL_PESSIMIST_DELIVERY_REPLAY(1, requests, completed, &index, statuses);
  56 
  57     ret = mca_pml_v.host_request_fns.req_test_all(count, requests, completed,
  58                                                    statuses);
  59 #if 0
  60 
  61     if(completed)
  62         vprotocol_pessimist_delivery_log(requests); 
  63     else
  64         vprotocol_pessimist_delivery_log(NULL);
  65 #endif
  66     return ret;
  67 }
  68 
  69 
  70 
  71 
  72 int mca_vprotocol_pessimist_test_any(size_t count, ompi_request_t ** requests,
  73                                      int *index, int *completed,
  74                                      ompi_status_public_t * status)
  75 {
  76     int ret;
  77     size_t i;
  78 
  79     VPROTOCOL_PESSIMIST_DELIVERY_REPLAY(count, requests, completed, index, status);
  80 
  81     PREPARE_REQUESTS_WITH_NO_FREE(count, requests);
  82 
  83     
  84     ret = mca_pml_v.host_request_fns.req_test_any(count, requests, index, completed,
  85                                                   status);
  86 
  87     if(completed)
  88     {   
  89         for(i = 0; i < count; i++)
  90         {
  91             ompi_request_t *req = requests[i];
  92             if(req == MPI_REQUEST_NULL) continue;
  93 
  94             
  95             req->req_free = mca_vprotocol_pessimist_request_free;
  96             if(i == (size_t) *index)
  97             {
  98                 vprotocol_pessimist_delivery_log(req);
  99                 
 100                 if(req->req_status.MPI_ERROR == MPI_SUCCESS)
 101                     ompi_request_free(&(requests[i]));
 102                 else
 103                     ret = req->req_status.MPI_ERROR;
 104             }
 105         }
 106     }
 107     else
 108     {
 109         
 110         vprotocol_pessimist_delivery_log(NULL);
 111     }
 112     return ret;
 113 }
 114 
 115 int mca_vprotocol_pessimist_wait_any(size_t count, ompi_request_t ** requests,
 116                                      int *index, ompi_status_public_t * status)
 117 {
 118     int ret;
 119     size_t i;
 120     int dummy;
 121 
 122     VPROTOCOL_PESSIMIST_DELIVERY_REPLAY(count, requests, &dummy, index, status);
 123 
 124     PREPARE_REQUESTS_WITH_NO_FREE(count, requests);
 125 
 126     
 127     ret = mca_pml_v.host_request_fns.req_wait_any(count, requests, index, status);
 128 
 129     
 130     for(i = 0; i < count; i++)
 131     {
 132         ompi_request_t *req = requests[i];
 133         if(req == MPI_REQUEST_NULL) continue;
 134 
 135         
 136         req->req_free = mca_vprotocol_pessimist_request_free;
 137         if(i == (size_t) *index)
 138         {
 139             vprotocol_pessimist_delivery_log(req);
 140             
 141             if(req->req_status.MPI_ERROR == MPI_SUCCESS)
 142                 ompi_request_free(&(requests[i]));
 143             else
 144                 ret = req->req_status.MPI_ERROR;
 145         }
 146     }
 147     return ret;
 148 }
 149 
 150 
 151 
 152 
 153 int mca_vprotocol_pessimist_test_some(size_t count, ompi_request_t ** requests,
 154                                       int * outcount, int * indices,
 155                                       ompi_status_public_t * statuses)
 156 {
 157     int ret;
 158     ret = mca_vprotocol_pessimist_test_any(count, requests, indices, outcount, statuses);
 159     if(*outcount) *outcount = 1;
 160     return ret;
 161 }
 162 
 163 int mca_vprotocol_pessimist_wait_some(size_t count, ompi_request_t ** requests,
 164                                       int *outcount, int *indexes,
 165                                       ompi_status_public_t * statuses)
 166 {
 167     int ret;
 168     ret = mca_vprotocol_pessimist_wait_any(count, requests, indexes, statuses);
 169     if(MPI_UNDEFINED == *indexes) *outcount = 0;
 170     else *outcount = 1;
 171     return ret;
 172 }