1
2
3
4
5
6
7
8
9
10 #include "oshmem_config.h"
11
12 #include "oshmem/constants.h"
13 #include "oshmem/include/shmem.h"
14
15 #include "oshmem/runtime/runtime.h"
16
17 #include "oshmem/mca/spml/spml.h"
18
19
20
21
22
23
24
25
26
27
28 #define DO_SHMEM_TYPE_PUT(ctx, type, target, source, len, pe) do { \
29 int rc = OSHMEM_SUCCESS; \
30 size_t size = 0; \
31 \
32 RUNTIME_CHECK_INIT(); \
33 RUNTIME_CHECK_PE(pe); \
34 RUNTIME_CHECK_ADDR(target); \
35 \
36 size = len * sizeof(type); \
37 rc = MCA_SPML_CALL(put( \
38 ctx, \
39 (void*)target, \
40 size, \
41 (void*)source, \
42 pe)); \
43 RUNTIME_CHECK_RC(rc); \
44 } while (0)
45
46 #define SHMEM_CTX_TYPE_PUT(type_name, type) \
47 void shmem_ctx##type_name##_put(shmem_ctx_t ctx, type *target, const type *source, size_t len, int pe)\
48 { \
49 DO_SHMEM_TYPE_PUT(ctx, type, target, source, len, pe); \
50 return ; \
51 }
52
53 #define SHMEM_TYPE_PUT(type_name, type) \
54 void shmem##type_name##_put(type *target, const type *source, size_t len, int pe)\
55 { \
56 DO_SHMEM_TYPE_PUT(oshmem_ctx_default, type, target, \
57 source, len, pe); \
58 return ; \
59 }
60
61 #if OSHMEM_PROFILING
62 #include "oshmem/include/pshmem.h"
63 #pragma weak shmem_ctx_char_put = pshmem_ctx_char_put
64 #pragma weak shmem_ctx_short_put = pshmem_ctx_short_put
65 #pragma weak shmem_ctx_int_put = pshmem_ctx_int_put
66 #pragma weak shmem_ctx_long_put = pshmem_ctx_long_put
67 #pragma weak shmem_ctx_float_put = pshmem_ctx_float_put
68 #pragma weak shmem_ctx_double_put = pshmem_ctx_double_put
69 #pragma weak shmem_ctx_longlong_put = pshmem_ctx_longlong_put
70 #pragma weak shmem_ctx_schar_put = pshmem_ctx_schar_put
71 #pragma weak shmem_ctx_uchar_put = pshmem_ctx_uchar_put
72 #pragma weak shmem_ctx_ushort_put = pshmem_ctx_ushort_put
73 #pragma weak shmem_ctx_uint_put = pshmem_ctx_uint_put
74 #pragma weak shmem_ctx_ulong_put = pshmem_ctx_ulong_put
75 #pragma weak shmem_ctx_ulonglong_put = pshmem_ctx_ulonglong_put
76 #pragma weak shmem_ctx_longdouble_put = pshmem_ctx_longdouble_put
77 #pragma weak shmem_ctx_int8_put = pshmem_ctx_int8_put
78 #pragma weak shmem_ctx_int16_put = pshmem_ctx_int16_put
79 #pragma weak shmem_ctx_int32_put = pshmem_ctx_int32_put
80 #pragma weak shmem_ctx_int64_put = pshmem_ctx_int64_put
81 #pragma weak shmem_ctx_uint8_put = pshmem_ctx_uint8_put
82 #pragma weak shmem_ctx_uint16_put = pshmem_ctx_uint16_put
83 #pragma weak shmem_ctx_uint32_put = pshmem_ctx_uint32_put
84 #pragma weak shmem_ctx_uint64_put = pshmem_ctx_uint64_put
85 #pragma weak shmem_ctx_size_put = pshmem_ctx_size_put
86 #pragma weak shmem_ctx_ptrdiff_put = pshmem_ctx_ptrdiff_put
87
88 #pragma weak shmem_char_put = pshmem_char_put
89 #pragma weak shmem_short_put = pshmem_short_put
90 #pragma weak shmem_int_put = pshmem_int_put
91 #pragma weak shmem_long_put = pshmem_long_put
92 #pragma weak shmem_float_put = pshmem_float_put
93 #pragma weak shmem_double_put = pshmem_double_put
94 #pragma weak shmem_longlong_put = pshmem_longlong_put
95 #pragma weak shmem_schar_put = pshmem_schar_put
96 #pragma weak shmem_uchar_put = pshmem_uchar_put
97 #pragma weak shmem_ushort_put = pshmem_ushort_put
98 #pragma weak shmem_uint_put = pshmem_uint_put
99 #pragma weak shmem_ulong_put = pshmem_ulong_put
100 #pragma weak shmem_ulonglong_put = pshmem_ulonglong_put
101 #pragma weak shmem_longdouble_put = pshmem_longdouble_put
102 #pragma weak shmem_int8_put = pshmem_int8_put
103 #pragma weak shmem_int16_put = pshmem_int16_put
104 #pragma weak shmem_int32_put = pshmem_int32_put
105 #pragma weak shmem_int64_put = pshmem_int64_put
106 #pragma weak shmem_uint8_put = pshmem_uint8_put
107 #pragma weak shmem_uint16_put = pshmem_uint16_put
108 #pragma weak shmem_uint32_put = pshmem_uint32_put
109 #pragma weak shmem_uint64_put = pshmem_uint64_put
110 #pragma weak shmem_size_put = pshmem_size_put
111 #pragma weak shmem_ptrdiff_put = pshmem_ptrdiff_put
112
113 #pragma weak shmem_ctx_putmem = pshmem_ctx_putmem
114 #pragma weak shmem_ctx_put8 = pshmem_ctx_put8
115 #pragma weak shmem_ctx_put16 = pshmem_ctx_put16
116 #pragma weak shmem_ctx_put32 = pshmem_ctx_put32
117 #pragma weak shmem_ctx_put64 = pshmem_ctx_put64
118 #pragma weak shmem_ctx_put128 = pshmem_ctx_put128
119
120 #pragma weak shmem_putmem = pshmem_putmem
121 #pragma weak shmem_put8 = pshmem_put8
122 #pragma weak shmem_put16 = pshmem_put16
123 #pragma weak shmem_put32 = pshmem_put32
124 #pragma weak shmem_put64 = pshmem_put64
125 #pragma weak shmem_put128 = pshmem_put128
126 #include "oshmem/shmem/c/profile/defines.h"
127 #endif
128
129 SHMEM_CTX_TYPE_PUT(_char, char)
130 SHMEM_CTX_TYPE_PUT(_short, short)
131 SHMEM_CTX_TYPE_PUT(_int, int)
132 SHMEM_CTX_TYPE_PUT(_long, long)
133 SHMEM_CTX_TYPE_PUT(_longlong, long long)
134 SHMEM_CTX_TYPE_PUT(_schar, signed char)
135 SHMEM_CTX_TYPE_PUT(_uchar, unsigned char)
136 SHMEM_CTX_TYPE_PUT(_ushort, unsigned short)
137 SHMEM_CTX_TYPE_PUT(_uint, unsigned int)
138 SHMEM_CTX_TYPE_PUT(_ulong, unsigned long)
139 SHMEM_CTX_TYPE_PUT(_ulonglong, unsigned long long)
140 SHMEM_CTX_TYPE_PUT(_float, float)
141 SHMEM_CTX_TYPE_PUT(_double, double)
142 SHMEM_CTX_TYPE_PUT(_longdouble, long double)
143 SHMEM_CTX_TYPE_PUT(_int8, int8_t)
144 SHMEM_CTX_TYPE_PUT(_int16, int16_t)
145 SHMEM_CTX_TYPE_PUT(_int32, int32_t)
146 SHMEM_CTX_TYPE_PUT(_int64, int64_t)
147 SHMEM_CTX_TYPE_PUT(_uint8, uint8_t)
148 SHMEM_CTX_TYPE_PUT(_uint16, uint16_t)
149 SHMEM_CTX_TYPE_PUT(_uint32, uint32_t)
150 SHMEM_CTX_TYPE_PUT(_uint64, uint64_t)
151 SHMEM_CTX_TYPE_PUT(_size, size_t)
152 SHMEM_CTX_TYPE_PUT(_ptrdiff, ptrdiff_t)
153
154 SHMEM_TYPE_PUT(_char, char)
155 SHMEM_TYPE_PUT(_short, short)
156 SHMEM_TYPE_PUT(_int, int)
157 SHMEM_TYPE_PUT(_long, long)
158 SHMEM_TYPE_PUT(_longlong, long long)
159 SHMEM_TYPE_PUT(_schar, signed char)
160 SHMEM_TYPE_PUT(_uchar, unsigned char)
161 SHMEM_TYPE_PUT(_ushort, unsigned short)
162 SHMEM_TYPE_PUT(_uint, unsigned int)
163 SHMEM_TYPE_PUT(_ulong, unsigned long)
164 SHMEM_TYPE_PUT(_ulonglong, unsigned long long)
165 SHMEM_TYPE_PUT(_float, float)
166 SHMEM_TYPE_PUT(_double, double)
167 SHMEM_TYPE_PUT(_longdouble, long double)
168 SHMEM_TYPE_PUT(_int8, int8_t)
169 SHMEM_TYPE_PUT(_int16, int16_t)
170 SHMEM_TYPE_PUT(_int32, int32_t)
171 SHMEM_TYPE_PUT(_int64, int64_t)
172 SHMEM_TYPE_PUT(_uint8, uint8_t)
173 SHMEM_TYPE_PUT(_uint16, uint16_t)
174 SHMEM_TYPE_PUT(_uint32, uint32_t)
175 SHMEM_TYPE_PUT(_uint64, uint64_t)
176 SHMEM_TYPE_PUT(_size, size_t)
177 SHMEM_TYPE_PUT(_ptrdiff, ptrdiff_t)
178
179 #define DO_SHMEM_PUTMEM(ctx, target, source, element_size, nelems, pe) do { \
180 int rc = OSHMEM_SUCCESS; \
181 size_t size = 0; \
182 \
183 RUNTIME_CHECK_INIT(); \
184 RUNTIME_CHECK_PE(pe); \
185 RUNTIME_CHECK_ADDR(target); \
186 \
187 size = nelems * element_size; \
188 rc = MCA_SPML_CALL(put( \
189 ctx, \
190 (void*)target, \
191 size, \
192 (void*)source, \
193 pe)); \
194 RUNTIME_CHECK_RC(rc); \
195 } while (0)
196
197 #define SHMEM_CTX_TYPE_PUTMEM(name, element_size, prefix) \
198 void prefix##_ctx##name(shmem_ctx_t ctx, void *target, const void *source, size_t nelems, int pe) \
199 { \
200 DO_SHMEM_PUTMEM(ctx, target, source, \
201 element_size, nelems, pe); \
202 return ; \
203 }
204
205 #define SHMEM_TYPE_PUTMEM(name, element_size, prefix) \
206 void prefix##name(void *target, const void *source, size_t nelems, int pe) \
207 { \
208 DO_SHMEM_PUTMEM(oshmem_ctx_default, target, \
209 source, element_size, nelems, pe); \
210 return ; \
211 }
212
213 SHMEM_CTX_TYPE_PUTMEM(_putmem, 1, shmem)
214 SHMEM_CTX_TYPE_PUTMEM(_put8, 1, shmem)
215 SHMEM_CTX_TYPE_PUTMEM(_put16, 2, shmem)
216 SHMEM_CTX_TYPE_PUTMEM(_put32, 4, shmem)
217 SHMEM_CTX_TYPE_PUTMEM(_put64, 8, shmem)
218 SHMEM_CTX_TYPE_PUTMEM(_put128, 16, shmem)
219 SHMEM_TYPE_PUTMEM(_putmem, 1, shmem)
220 SHMEM_TYPE_PUTMEM(_put8, 1, shmem)
221 SHMEM_TYPE_PUTMEM(_put16, 2, shmem)
222 SHMEM_TYPE_PUTMEM(_put32, 4, shmem)
223 SHMEM_TYPE_PUTMEM(_put64, 8, shmem)
224 SHMEM_TYPE_PUTMEM(_put128, 16, shmem)
225