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 #define DO_SHMEM_TYPE_IGET(ctx, type, target, source, tst, sst, nelems, pe) do { \
27 int rc = OSHMEM_SUCCESS; \
28 size_t element_size = 0; \
29 size_t i = 0; \
30 \
31 RUNTIME_CHECK_INIT(); \
32 RUNTIME_CHECK_PE(pe); \
33 RUNTIME_CHECK_ADDR(source); \
34 \
35 element_size = sizeof(type); \
36 for (i = 0; i < nelems; i++) \
37 { \
38 rc = MCA_SPML_CALL(get( \
39 ctx, \
40 (void*)(source + i * sst), \
41 element_size, \
42 (void*)(target + i * tst), \
43 pe)); \
44 } \
45 RUNTIME_CHECK_RC(rc); \
46 } while (0)
47
48 #define SHMEM_CTX_TYPE_IGET(type_name, type) \
49 void shmem_ctx##type_name##_iget(shmem_ctx_t ctx, type *target, const type *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
50 { \
51 DO_SHMEM_TYPE_IGET(ctx, type, target, source, tst, sst, nelems, pe); \
52 return ; \
53 }
54
55 #define SHMEM_TYPE_IGET(type_name, type) \
56 void shmem##type_name##_iget(type *target, const type *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
57 { \
58 DO_SHMEM_TYPE_IGET(oshmem_ctx_default, type, target, source, \
59 tst, sst, nelems, pe); \
60 return ; \
61 }
62
63 #if OSHMEM_PROFILING
64 #include "oshmem/include/pshmem.h"
65 #pragma weak shmem_ctx_char_iget = pshmem_ctx_char_iget
66 #pragma weak shmem_ctx_short_iget = pshmem_ctx_short_iget
67 #pragma weak shmem_ctx_int_iget = pshmem_ctx_int_iget
68 #pragma weak shmem_ctx_long_iget = pshmem_ctx_long_iget
69 #pragma weak shmem_ctx_float_iget = pshmem_ctx_float_iget
70 #pragma weak shmem_ctx_double_iget = pshmem_ctx_double_iget
71 #pragma weak shmem_ctx_longlong_iget = pshmem_ctx_longlong_iget
72 #pragma weak shmem_ctx_schar_iget = pshmem_ctx_schar_iget
73 #pragma weak shmem_ctx_uchar_iget = pshmem_ctx_uchar_iget
74 #pragma weak shmem_ctx_ushort_iget = pshmem_ctx_ushort_iget
75 #pragma weak shmem_ctx_uint_iget = pshmem_ctx_uint_iget
76 #pragma weak shmem_ctx_ulong_iget = pshmem_ctx_ulong_iget
77 #pragma weak shmem_ctx_ulonglong_iget = pshmem_ctx_ulonglong_iget
78 #pragma weak shmem_ctx_longdouble_iget = pshmem_ctx_longdouble_iget
79 #pragma weak shmem_ctx_int8_iget = pshmem_ctx_int8_iget
80 #pragma weak shmem_ctx_int16_iget = pshmem_ctx_int16_iget
81 #pragma weak shmem_ctx_int32_iget = pshmem_ctx_int32_iget
82 #pragma weak shmem_ctx_int64_iget = pshmem_ctx_int64_iget
83 #pragma weak shmem_ctx_uint8_iget = pshmem_ctx_uint8_iget
84 #pragma weak shmem_ctx_uint16_iget = pshmem_ctx_uint16_iget
85 #pragma weak shmem_ctx_uint32_iget = pshmem_ctx_uint32_iget
86 #pragma weak shmem_ctx_uint64_iget = pshmem_ctx_uint64_iget
87 #pragma weak shmem_ctx_size_iget = pshmem_ctx_size_iget
88 #pragma weak shmem_ctx_ptrdiff_iget = pshmem_ctx_ptrdiff_iget
89
90 #pragma weak shmem_char_iget = pshmem_char_iget
91 #pragma weak shmem_short_iget = pshmem_short_iget
92 #pragma weak shmem_int_iget = pshmem_int_iget
93 #pragma weak shmem_long_iget = pshmem_long_iget
94 #pragma weak shmem_float_iget = pshmem_float_iget
95 #pragma weak shmem_double_iget = pshmem_double_iget
96 #pragma weak shmem_longlong_iget = pshmem_longlong_iget
97 #pragma weak shmem_schar_iget = pshmem_schar_iget
98 #pragma weak shmem_uchar_iget = pshmem_uchar_iget
99 #pragma weak shmem_ushort_iget = pshmem_ushort_iget
100 #pragma weak shmem_uint_iget = pshmem_uint_iget
101 #pragma weak shmem_ulong_iget = pshmem_ulong_iget
102 #pragma weak shmem_ulonglong_iget = pshmem_ulonglong_iget
103 #pragma weak shmem_longdouble_iget = pshmem_longdouble_iget
104 #pragma weak shmem_int8_iget = pshmem_int8_iget
105 #pragma weak shmem_int16_iget = pshmem_int16_iget
106 #pragma weak shmem_int32_iget = pshmem_int32_iget
107 #pragma weak shmem_int64_iget = pshmem_int64_iget
108 #pragma weak shmem_uint8_iget = pshmem_uint8_iget
109 #pragma weak shmem_uint16_iget = pshmem_uint16_iget
110 #pragma weak shmem_uint32_iget = pshmem_uint32_iget
111 #pragma weak shmem_uint64_iget = pshmem_uint64_iget
112 #pragma weak shmem_size_iget = pshmem_size_iget
113 #pragma weak shmem_ptrdiff_iget = pshmem_ptrdiff_iget
114
115 #pragma weak shmem_ctx_iget8 = pshmem_ctx_iget8
116 #pragma weak shmem_ctx_iget16 = pshmem_ctx_iget16
117 #pragma weak shmem_ctx_iget32 = pshmem_ctx_iget32
118 #pragma weak shmem_ctx_iget64 = pshmem_ctx_iget64
119 #pragma weak shmem_ctx_iget128 = pshmem_ctx_iget128
120
121 #pragma weak shmem_iget8 = pshmem_iget8
122 #pragma weak shmem_iget16 = pshmem_iget16
123 #pragma weak shmem_iget32 = pshmem_iget32
124 #pragma weak shmem_iget64 = pshmem_iget64
125 #pragma weak shmem_iget128 = pshmem_iget128
126 #include "oshmem/shmem/c/profile/defines.h"
127 #endif
128
129 SHMEM_CTX_TYPE_IGET(_char, char)
130 SHMEM_CTX_TYPE_IGET(_short, short)
131 SHMEM_CTX_TYPE_IGET(_int, int)
132 SHMEM_CTX_TYPE_IGET(_long, long)
133 SHMEM_CTX_TYPE_IGET(_longlong, long long)
134 SHMEM_CTX_TYPE_IGET(_schar, signed char)
135 SHMEM_CTX_TYPE_IGET(_uchar, unsigned char)
136 SHMEM_CTX_TYPE_IGET(_ushort, unsigned short)
137 SHMEM_CTX_TYPE_IGET(_uint, unsigned int)
138 SHMEM_CTX_TYPE_IGET(_ulong, unsigned long)
139 SHMEM_CTX_TYPE_IGET(_ulonglong, unsigned long long)
140 SHMEM_CTX_TYPE_IGET(_float, float)
141 SHMEM_CTX_TYPE_IGET(_double, double)
142 SHMEM_CTX_TYPE_IGET(_longdouble, long double)
143 SHMEM_CTX_TYPE_IGET(_int8, int8_t)
144 SHMEM_CTX_TYPE_IGET(_int16, int16_t)
145 SHMEM_CTX_TYPE_IGET(_int32, int32_t)
146 SHMEM_CTX_TYPE_IGET(_int64, int64_t)
147 SHMEM_CTX_TYPE_IGET(_uint8, uint8_t)
148 SHMEM_CTX_TYPE_IGET(_uint16, uint16_t)
149 SHMEM_CTX_TYPE_IGET(_uint32, uint32_t)
150 SHMEM_CTX_TYPE_IGET(_uint64, uint64_t)
151 SHMEM_CTX_TYPE_IGET(_size, size_t)
152 SHMEM_CTX_TYPE_IGET(_ptrdiff, ptrdiff_t)
153
154 SHMEM_TYPE_IGET(_char, char)
155 SHMEM_TYPE_IGET(_short, short)
156 SHMEM_TYPE_IGET(_int, int)
157 SHMEM_TYPE_IGET(_long, long)
158 SHMEM_TYPE_IGET(_longlong, long long)
159 SHMEM_TYPE_IGET(_schar, signed char)
160 SHMEM_TYPE_IGET(_uchar, unsigned char)
161 SHMEM_TYPE_IGET(_ushort, unsigned short)
162 SHMEM_TYPE_IGET(_uint, unsigned int)
163 SHMEM_TYPE_IGET(_ulong, unsigned long)
164 SHMEM_TYPE_IGET(_ulonglong, unsigned long long)
165 SHMEM_TYPE_IGET(_float, float)
166 SHMEM_TYPE_IGET(_double, double)
167 SHMEM_TYPE_IGET(_longdouble, long double)
168 SHMEM_TYPE_IGET(_int8, int8_t)
169 SHMEM_TYPE_IGET(_int16, int16_t)
170 SHMEM_TYPE_IGET(_int32, int32_t)
171 SHMEM_TYPE_IGET(_int64, int64_t)
172 SHMEM_TYPE_IGET(_uint8, uint8_t)
173 SHMEM_TYPE_IGET(_uint16, uint16_t)
174 SHMEM_TYPE_IGET(_uint32, uint32_t)
175 SHMEM_TYPE_IGET(_uint64, uint64_t)
176 SHMEM_TYPE_IGET(_size, size_t)
177 SHMEM_TYPE_IGET(_ptrdiff, ptrdiff_t)
178
179 #define DO_SHMEM_IGETMEM(ctx, target, source, tst, sst, element_size, nelems, pe) do { \
180 int rc = OSHMEM_SUCCESS; \
181 size_t i = 0; \
182 \
183 RUNTIME_CHECK_INIT(); \
184 RUNTIME_CHECK_PE(pe); \
185 RUNTIME_CHECK_ADDR(source); \
186 \
187 for (i = 0; i < nelems; i++) \
188 { \
189 rc = MCA_SPML_CALL(get( \
190 ctx, \
191 (void*)((char*)source + i * sst * element_size), \
192 element_size, \
193 (void*)((char*)target + i * tst * element_size), \
194 pe)); \
195 } \
196 RUNTIME_CHECK_RC(rc); \
197 } while (0)
198
199 #define SHMEM_CTX_TYPE_IGETMEM(name, element_size, prefix) \
200 void prefix##_ctx##name(shmem_ctx_t ctx, void *target, const void *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
201 { \
202 DO_SHMEM_IGETMEM(ctx, target, source, tst, sst, \
203 element_size, nelems, pe); \
204 return ; \
205 }
206
207 #define SHMEM_TYPE_IGETMEM(name, element_size, prefix) \
208 void prefix##name(void *target, const void *source, ptrdiff_t tst, ptrdiff_t sst, size_t nelems, int pe) \
209 { \
210 DO_SHMEM_IGETMEM(oshmem_ctx_default, target, source, tst, sst, \
211 element_size, nelems, pe); \
212 return ; \
213 }
214
215 SHMEM_CTX_TYPE_IGETMEM(_iget8, 1, shmem)
216 SHMEM_CTX_TYPE_IGETMEM(_iget16, 2, shmem)
217 SHMEM_CTX_TYPE_IGETMEM(_iget32, 4, shmem)
218 SHMEM_CTX_TYPE_IGETMEM(_iget64, 8, shmem)
219 SHMEM_CTX_TYPE_IGETMEM(_iget128, 16, shmem)
220 SHMEM_TYPE_IGETMEM(_iget8, 1, shmem)
221 SHMEM_TYPE_IGETMEM(_iget16, 2, shmem)
222 SHMEM_TYPE_IGETMEM(_iget32, 4, shmem)
223 SHMEM_TYPE_IGETMEM(_iget64, 8, shmem)
224 SHMEM_TYPE_IGETMEM(_iget128, 16, shmem)
225