root/ompi/mca/pml/yalla/pml_yalla_datatype.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mca_pml_yalla_get_send_convertor
  2. mca_pml_yalla_get_recv_convertor
  3. mca_pml_yalla_noncontig_req_init
  4. mca_pml_yalla_stream_unpack
  5. mca_pml_yalla_stream_pack
  6. mxm_pml_yalla_irecv_stream_cb
  7. mxm_pml_yalla_recv_stream_cb
  8. mxm_pml_yalla_isend_stream_cb
  9. mxm_pml_yalla_send_stream_cb
  10. mca_pml_yalla_set_noncontig_data_irecv
  11. mca_pml_yalla_set_noncontig_data_recv
  12. mca_pml_yalla_set_noncontig_data_isend
  13. mca_pml_yalla_set_noncontig_data_send
  14. mca_pml_yalla_convertor_construct
  15. mca_pml_yalla_convertor_destruct
  16. mca_pml_yalla_init_datatype

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (C) Mellanox Technologies Ltd. 2001-2011.  ALL RIGHTS RESERVED.
   4  * Copyright (c) 2015      Los Alamos National Security, LLC. All rights
   5  *                         reserved.
   6  * $COPYRIGHT$
   7  *
   8  * Additional copyrights may follow
   9  *
  10  * $HEADER$
  11  */
  12 
  13 #include "pml_yalla_datatype.h"
  14 #include "pml_yalla_request.h"
  15 
  16 
  17 static mca_pml_yalla_convertor_t *mca_pml_yalla_get_send_convertor(void *buf, size_t count,
  18                                                                    ompi_datatype_t *datatype)
  19 {
  20     mca_pml_yalla_convertor_t *convertor = (mca_pml_yalla_convertor_t *)PML_YALLA_FREELIST_GET(&ompi_pml_yalla.convs);
  21 
  22     convertor->datatype = datatype;
  23     OMPI_DATATYPE_RETAIN(datatype);
  24     opal_convertor_copy_and_prepare_for_send(ompi_proc_local_proc->super.proc_convertor,
  25                                              &datatype->super, count, buf, 0,
  26                                              &convertor->convertor);
  27     return convertor;
  28 }
  29 
  30 static mca_pml_yalla_convertor_t *mca_pml_yalla_get_recv_convertor(void *buf, size_t count,
  31                                                                    ompi_datatype_t *datatype)
  32 {
  33     mca_pml_yalla_convertor_t *convertor = (mca_pml_yalla_convertor_t *)PML_YALLA_FREELIST_GET(&ompi_pml_yalla.convs);
  34 
  35     convertor->datatype = datatype;
  36     OMPI_DATATYPE_RETAIN(datatype);
  37     opal_convertor_copy_and_prepare_for_recv(ompi_proc_local_proc->super.proc_convertor,
  38                                              &datatype->super, count, buf, 0,
  39                                              &convertor->convertor);
  40     return convertor;
  41 }
  42 
  43 static void mca_pml_yalla_noncontig_req_init(mxm_req_base_t *mxm_req,
  44                                              mca_pml_yalla_convertor_t *convertor,
  45                                              mxm_stream_cb_t stream_cb)
  46 {
  47     mxm_req->data_type      = MXM_REQ_DATA_STREAM;
  48     mxm_req->data.stream.cb = stream_cb;
  49     opal_convertor_get_packed_size(&convertor->convertor, &mxm_req->data.stream.length);
  50 }
  51 
  52 static size_t mca_pml_yalla_stream_unpack(void *buffer, size_t length, size_t offset,
  53                                           opal_convertor_t *convertor)
  54 {
  55     uint32_t iov_count;
  56     struct iovec iov;
  57 
  58     iov_count    = 1;
  59     iov.iov_base = buffer;
  60     iov.iov_len  = length;
  61 
  62     opal_convertor_set_position(convertor, &offset);
  63     opal_convertor_unpack(convertor, &iov, &iov_count, &length);
  64     return length;
  65 }
  66 
  67 static size_t mca_pml_yalla_stream_pack(void *buffer, size_t length, size_t offset,
  68                                         opal_convertor_t *convertor)
  69 {
  70     uint32_t iov_count;
  71     struct iovec iov;
  72 
  73     iov_count    = 1;
  74     iov.iov_base = buffer;
  75     iov.iov_len  = length;
  76 
  77     opal_convertor_set_position(convertor, &offset);
  78     opal_convertor_pack(convertor, &iov, &iov_count, &length);
  79     return length;
  80 }
  81 
  82 static size_t mxm_pml_yalla_irecv_stream_cb(void *buffer, size_t length,
  83                                             size_t offset, void *context)
  84 {
  85     mca_pml_yalla_base_request_t *req = context;
  86     return mca_pml_yalla_stream_unpack(buffer, length, offset, &req->convertor->convertor);
  87 }
  88 
  89 static size_t mxm_pml_yalla_recv_stream_cb(void *buffer, size_t length,
  90                                            size_t offset, void *context)
  91 {
  92     mca_pml_yalla_convertor_t *convertor = context;
  93     return mca_pml_yalla_stream_unpack(buffer, length, offset, &convertor->convertor);
  94 }
  95 
  96 static size_t mxm_pml_yalla_isend_stream_cb(void *buffer, size_t length,
  97                                             size_t offset, void *context)
  98 {
  99     mca_pml_yalla_base_request_t *req = context;
 100     return mca_pml_yalla_stream_pack(buffer, length, offset, &req->convertor->convertor);
 101 }
 102 
 103 static size_t mxm_pml_yalla_send_stream_cb(void *buffer, size_t length,
 104                                            size_t offset, void *context)
 105 {
 106     mca_pml_yalla_convertor_t *convertor = context;
 107     return mca_pml_yalla_stream_pack(buffer, length, offset, &convertor->convertor);
 108 }
 109 
 110 void mca_pml_yalla_set_noncontig_data_irecv(mxm_req_base_t *mxm_req, void *buf,
 111                                             size_t count, ompi_datatype_t *datatype,
 112                                             mca_pml_yalla_recv_request_t *rreq)
 113 {
 114     rreq->super.convertor = mca_pml_yalla_get_recv_convertor(buf, count, datatype);
 115     mca_pml_yalla_noncontig_req_init(mxm_req, rreq->super.convertor, mxm_pml_yalla_irecv_stream_cb);
 116 }
 117 
 118 void mca_pml_yalla_set_noncontig_data_recv(mxm_req_base_t *mxm_req, void *buf,
 119                                            size_t count, ompi_datatype_t *datatype)
 120 {
 121     mca_pml_yalla_convertor_t *convertor;
 122 
 123     convertor = mca_pml_yalla_get_recv_convertor(buf, count, datatype);
 124     mca_pml_yalla_noncontig_req_init(mxm_req, convertor, mxm_pml_yalla_recv_stream_cb);
 125     mxm_req->context = convertor;
 126 }
 127 
 128 void mca_pml_yalla_set_noncontig_data_isend(mxm_req_base_t *mxm_req, void *buf,
 129                                             size_t count, ompi_datatype_t *datatype,
 130                                             mca_pml_yalla_send_request_t *sreq)
 131 {
 132     sreq->super.convertor = mca_pml_yalla_get_send_convertor(buf, count, datatype);
 133     mca_pml_yalla_noncontig_req_init(mxm_req, sreq->super.convertor, mxm_pml_yalla_isend_stream_cb);
 134 }
 135 
 136 void mca_pml_yalla_set_noncontig_data_send(mxm_req_base_t *mxm_req, void *buf,
 137                                            size_t count, ompi_datatype_t *datatype)
 138 {
 139     mca_pml_yalla_convertor_t *convertor;
 140 
 141     convertor = mca_pml_yalla_get_send_convertor(buf, count, datatype);
 142     mca_pml_yalla_noncontig_req_init(mxm_req, convertor, mxm_pml_yalla_send_stream_cb);
 143     mxm_req->context = convertor;
 144 }
 145 
 146 static void mca_pml_yalla_convertor_construct(mca_pml_yalla_convertor_t *convertor)
 147 {
 148     OBJ_CONSTRUCT(&convertor->convertor, opal_convertor_t);
 149 }
 150 
 151 static void mca_pml_yalla_convertor_destruct(mca_pml_yalla_convertor_t *convertor)
 152 {
 153     OBJ_DESTRUCT(&convertor->convertor);
 154 }
 155 
 156 void mca_pml_yalla_init_datatype(void)
 157 {
 158     PML_YALLA_FREELIST_INIT(&ompi_pml_yalla.convs, mca_pml_yalla_convertor_t,
 159                          128, -1, 128);
 160 }
 161 
 162 OBJ_CLASS_INSTANCE(mca_pml_yalla_convertor_t,
 163                    opal_free_list_item_t,
 164                    mca_pml_yalla_convertor_construct,
 165                    mca_pml_yalla_convertor_destruct);
 166 

/* [<][>][^][v][top][bottom][index][help] */