This source file includes following definitions.
- mca_pml_yalla_get_send_convertor
- mca_pml_yalla_get_recv_convertor
- mca_pml_yalla_noncontig_req_init
- mca_pml_yalla_stream_unpack
- mca_pml_yalla_stream_pack
- mxm_pml_yalla_irecv_stream_cb
- mxm_pml_yalla_recv_stream_cb
- mxm_pml_yalla_isend_stream_cb
- mxm_pml_yalla_send_stream_cb
- mca_pml_yalla_set_noncontig_data_irecv
- mca_pml_yalla_set_noncontig_data_recv
- mca_pml_yalla_set_noncontig_data_isend
- mca_pml_yalla_set_noncontig_data_send
- mca_pml_yalla_convertor_construct
- mca_pml_yalla_convertor_destruct
- mca_pml_yalla_init_datatype
1
2
3
4
5
6
7
8
9
10
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