This source file includes following definitions.
- mca_spml_base_test
- mca_spml_base_wait
- mca_spml_base_wait_nb
- mca_spml_base_oob_get_mkeys
- mca_spml_base_rmkey_unpack
- mca_spml_base_rmkey_free
- mca_spml_base_rmkey_ptr
- mca_spml_base_put_nb
- mca_spml_base_get_nb
- mca_spml_base_memuse_hook
- mca_spml_base_put_all_nb
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "oshmem_config.h"
15 #include "ompi/mca/bml/base/base.h"
16 #include "opal/datatype/opal_convertor.h"
17 #include "oshmem/proc/proc.h"
18 #include "oshmem/mca/spml/base/base.h"
19 #include "opal/mca/btl/btl.h"
20
21 #define SPML_BASE_DO_CMP(_res, _addr, _op, _val) \
22 switch((_op)) { \
23 case SHMEM_CMP_EQ: \
24 _res = *(_addr) == (_val) ? 1 : 0; \
25 break; \
26 case SHMEM_CMP_NE: \
27 _res = *(_addr) != (_val) ? 1 : 0; \
28 break; \
29 case SHMEM_CMP_GT: \
30 _res = *(_addr) > (_val) ? 1 : 0; \
31 break; \
32 case SHMEM_CMP_LE: \
33 _res = *(_addr) <= (_val) ? 1 : 0; \
34 break; \
35 case SHMEM_CMP_LT: \
36 _res = *(_addr) < (_val) ? 1 : 0; \
37 break; \
38 case SHMEM_CMP_GE: \
39 _res = *(_addr) >= (_val) ? 1 : 0; \
40 break; \
41 }
42
43 #define SPML_BASE_DO_WAIT(_res, _addr, _op, _val) \
44 do { \
45 SPML_BASE_DO_CMP(_res, _addr, _op, _val); \
46 if (_res == 0) { \
47 opal_progress(); \
48 } \
49 } while (_res == 0);
50
51
52
53
54 int mca_spml_base_test(void* addr, int cmp, void* value, int datatype, int *out_value)
55 {
56 volatile int *int_addr;
57 volatile long *long_addr;
58 volatile short *short_addr;
59 volatile long long *longlong_addr;
60 volatile int32_t *int32_addr;
61 volatile int64_t *int64_addr;
62
63 int int_value;
64 long long_value;
65 short short_value;
66 long long longlong_value;
67 int32_t int32_value;
68 int64_t int64_value;
69
70 ompi_fortran_integer_t *fint_addr, fint_value;
71 ompi_fortran_integer4_t *fint4_addr, fint4_value;
72 ompi_fortran_integer8_t *fint8_addr, fint8_value;
73
74 switch (datatype) {
75
76
77 case SHMEM_INT:
78 int_value = *(int*) value;
79 int_addr = (int*) addr;
80 SPML_BASE_DO_CMP((*out_value), int_addr, cmp, int_value);
81 break;
82
83
84 case SHMEM_SHORT:
85 short_value = *(short*) value;
86 short_addr = (short*) addr;
87 SPML_BASE_DO_CMP((*out_value), short_addr, cmp, short_value);
88 break;
89
90
91 case SHMEM_LONG:
92 long_value = *(long*) value;
93 long_addr = (long*) addr;
94 SPML_BASE_DO_CMP((*out_value), long_addr, cmp, long_value);
95 break;
96
97
98 case SHMEM_LLONG:
99 longlong_value = *(long long*) value;
100 longlong_addr = (long long*) addr;
101 SPML_BASE_DO_CMP((*out_value), longlong_addr, cmp, longlong_value);
102 break;
103
104
105 case SHMEM_INT32_T:
106 int32_value = *(int32_t*) value;
107 int32_addr = (int32_t*) addr;
108 SPML_BASE_DO_CMP((*out_value), int32_addr, cmp, int32_value);
109 break;
110
111
112 case SHMEM_INT64_T:
113 int64_value = *(int64_t*) value;
114 int64_addr = (int64_t*) addr;
115 SPML_BASE_DO_CMP((*out_value), int64_addr, cmp, int64_value);
116 break;
117
118
119 case SHMEM_FINT:
120 fint_value = *(ompi_fortran_integer_t *) value;
121 fint_addr = (ompi_fortran_integer_t *) addr;
122 SPML_BASE_DO_CMP((*out_value), fint_addr, cmp, fint_value);
123 break;
124
125
126 case SHMEM_FINT4:
127 fint4_value = *(ompi_fortran_integer4_t *) value;
128 fint4_addr = (ompi_fortran_integer4_t *) addr;
129 SPML_BASE_DO_CMP((*out_value), fint4_addr, cmp, fint4_value);
130 break;
131
132
133 case SHMEM_FINT8:
134 fint8_value = *(ompi_fortran_integer8_t *) value;
135 fint8_addr = (ompi_fortran_integer8_t *) addr;
136 SPML_BASE_DO_CMP((*out_value), fint8_addr, cmp, fint8_value);
137 break;
138 }
139
140 return OSHMEM_SUCCESS;
141 }
142
143 int mca_spml_base_wait(void* addr, int cmp, void* value, int datatype)
144 {
145 volatile int *int_addr;
146 volatile long *long_addr;
147 volatile short *short_addr;
148 volatile long long *longlong_addr;
149 volatile int32_t *int32_addr;
150 volatile int64_t *int64_addr;
151
152 int int_value;
153 long long_value;
154 short short_value;
155 long long longlong_value;
156 int32_t int32_value;
157 int64_t int64_value;
158
159 ompi_fortran_integer_t *fint_addr, fint_value;
160 ompi_fortran_integer4_t *fint4_addr, fint4_value;
161 ompi_fortran_integer8_t *fint8_addr, fint8_value;
162
163 int res = 0;
164
165 switch (datatype) {
166
167
168 case SHMEM_INT:
169 int_value = *(int*) value;
170 int_addr = (int*) addr;
171 SPML_BASE_DO_WAIT(res, int_addr, cmp, int_value);
172 break;
173
174
175 case SHMEM_SHORT:
176 short_value = *(short*) value;
177 short_addr = (short*) addr;
178 SPML_BASE_DO_WAIT(res, short_addr, cmp, short_value);
179 break;
180
181
182 case SHMEM_LONG:
183 long_value = *(long*) value;
184 long_addr = (long*) addr;
185 SPML_BASE_DO_WAIT(res, long_addr, cmp, long_value);
186 break;
187
188
189 case SHMEM_LLONG:
190 longlong_value = *(long long*) value;
191 longlong_addr = (long long*) addr;
192 SPML_BASE_DO_WAIT(res, longlong_addr, cmp, longlong_value);
193 break;
194
195
196 case SHMEM_INT32_T:
197 int32_value = *(int32_t*) value;
198 int32_addr = (int32_t*) addr;
199 SPML_BASE_DO_WAIT(res, int32_addr, cmp, int32_value);
200 break;
201
202
203 case SHMEM_INT64_T:
204 int64_value = *(int64_t*) value;
205 int64_addr = (int64_t*) addr;
206 SPML_BASE_DO_WAIT(res, int64_addr, cmp, int64_value);
207 break;
208
209
210 case SHMEM_FINT:
211 fint_value = *(ompi_fortran_integer_t *) value;
212 fint_addr = (ompi_fortran_integer_t *) addr;
213 SPML_BASE_DO_WAIT(res, fint_addr, cmp, fint_value);
214 break;
215
216
217 case SHMEM_FINT4:
218 fint4_value = *(ompi_fortran_integer4_t *) value;
219 fint4_addr = (ompi_fortran_integer4_t *) addr;
220 SPML_BASE_DO_WAIT(res, fint4_addr, cmp, fint4_value);
221 break;
222
223
224 case SHMEM_FINT8:
225 fint8_value = *(ompi_fortran_integer8_t *) value;
226 fint8_addr = (ompi_fortran_integer8_t *) addr;
227 SPML_BASE_DO_WAIT(res, fint8_addr, cmp, fint8_value);
228 break;
229 }
230
231 return OSHMEM_SUCCESS;
232 }
233
234
235
236
237
238
239
240
241
242
243 int mca_spml_base_wait_nb(void* handle)
244 {
245 MCA_SPML_CALL(quiet(oshmem_ctx_default));
246
247 return OSHMEM_SUCCESS;
248 }
249
250 int mca_spml_base_oob_get_mkeys(shmem_ctx_t ctx, int pe, uint32_t segno, sshmem_mkey_t *mkeys)
251 {
252 return OSHMEM_ERROR;
253 }
254
255 void mca_spml_base_rmkey_unpack(shmem_ctx_t ctx, sshmem_mkey_t *mkey, uint32_t segno, int pe, int tr_id)
256 {
257 }
258
259 void mca_spml_base_rmkey_free(sshmem_mkey_t *mkey)
260 {
261 }
262
263 void *mca_spml_base_rmkey_ptr(const void *dst_addr, sshmem_mkey_t *mkey, int pe)
264 {
265 return NULL;
266 }
267
268 int mca_spml_base_put_nb(void *dst_addr, size_t size,
269 void *src_addr, int dst, void **handle)
270 {
271 return OSHMEM_ERROR;
272 }
273
274 int mca_spml_base_get_nb(void *dst_addr, size_t size,
275 void *src_addr, int src, void **handle)
276 {
277 return OSHMEM_ERROR;
278 }
279
280 void mca_spml_base_memuse_hook(void *addr, size_t length)
281 {
282 }
283
284 int mca_spml_base_put_all_nb(void *target, const void *source,
285 size_t size, long *counter)
286 {
287 return OSHMEM_ERR_NOT_IMPLEMENTED;
288 }