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 #include "oshmem/include/shmemx.h"
15
16 #include "oshmem/runtime/runtime.h"
17
18 #include "oshmem/mca/scoll/scoll.h"
19 #include "oshmem/proc/proc.h"
20 #include "oshmem/op/op.h"
21
22
23
24
25
26
27
28
29 #define SHMEM_TYPE_REDUCE_OP(name, type_name, type, prefix) \
30 void prefix##type_name##_##name##_to_all( type *target, \
31 const type *source, \
32 int nreduce, \
33 int PE_start, \
34 int logPE_stride, \
35 int PE_size, \
36 type *pWrk, \
37 long *pSync ) \
38 { \
39 int rc = OSHMEM_SUCCESS; \
40 oshmem_group_t* group = NULL; \
41 \
42 RUNTIME_CHECK_INIT(); \
43 RUNTIME_CHECK_ADDR_SIZE(target, nreduce); \
44 RUNTIME_CHECK_ADDR_SIZE(source, nreduce); \
45 \
46 { \
47 group = oshmem_proc_group_create_nofail(PE_start, 1<<logPE_stride, PE_size); \
48 oshmem_op_t* op = oshmem_op_##name##type_name; \
49 size_t size = nreduce * op->dt_size; \
50 \
51 \
52 rc = group->g_scoll.scoll_reduce( \
53 group, \
54 op, \
55 (void*)target, \
56 (const void*)source, \
57 size, \
58 pSync, \
59 (void*)pWrk, \
60 SCOLL_DEFAULT_ALG ); \
61 \
62 oshmem_proc_group_destroy(group); \
63 } \
64 RUNTIME_CHECK_RC(rc); \
65 }
66
67 #if OSHMEM_PROFILING
68 #include "oshmem/include/pshmem.h"
69 #pragma weak shmem_short_and_to_all = pshmem_short_and_to_all
70 #pragma weak shmem_int_and_to_all = pshmem_int_and_to_all
71 #pragma weak shmem_long_and_to_all = pshmem_long_and_to_all
72 #pragma weak shmem_longlong_and_to_all = pshmem_longlong_and_to_all
73 #pragma weak shmemx_int16_and_to_all = pshmemx_int16_and_to_all
74 #pragma weak shmemx_int32_and_to_all = pshmemx_int32_and_to_all
75 #pragma weak shmemx_int64_and_to_all = pshmemx_int64_and_to_all
76
77 #pragma weak shmem_short_or_to_all = pshmem_short_or_to_all
78 #pragma weak shmem_int_or_to_all = pshmem_int_or_to_all
79 #pragma weak shmem_long_or_to_all = pshmem_long_or_to_all
80 #pragma weak shmem_longlong_or_to_all = pshmem_longlong_or_to_all
81 #pragma weak shmemx_int16_or_to_all = pshmemx_int16_or_to_all
82 #pragma weak shmemx_int32_or_to_all = pshmemx_int32_or_to_all
83 #pragma weak shmemx_int64_or_to_all = pshmemx_int64_or_to_all
84
85 #pragma weak shmem_short_xor_to_all = pshmem_short_xor_to_all
86 #pragma weak shmem_int_xor_to_all = pshmem_int_xor_to_all
87 #pragma weak shmem_long_xor_to_all = pshmem_long_xor_to_all
88 #pragma weak shmem_longlong_xor_to_all = pshmem_longlong_xor_to_all
89 #pragma weak shmemx_int16_xor_to_all = pshmemx_int16_xor_to_all
90 #pragma weak shmemx_int32_xor_to_all = pshmemx_int32_xor_to_all
91 #pragma weak shmemx_int64_xor_to_all = pshmemx_int64_xor_to_all
92
93 #pragma weak shmem_short_max_to_all = pshmem_short_max_to_all
94 #pragma weak shmem_int_max_to_all = pshmem_int_max_to_all
95 #pragma weak shmem_long_max_to_all = pshmem_long_max_to_all
96 #pragma weak shmem_longlong_max_to_all = pshmem_longlong_max_to_all
97 #pragma weak shmem_float_max_to_all = pshmem_float_max_to_all
98 #pragma weak shmem_double_max_to_all = pshmem_double_max_to_all
99 #pragma weak shmem_longdouble_max_to_all= pshmem_longdouble_max_to_all
100 #pragma weak shmemx_int16_max_to_all = pshmemx_int16_max_to_all
101 #pragma weak shmemx_int32_max_to_all = pshmemx_int32_max_to_all
102 #pragma weak shmemx_int64_max_to_all = pshmemx_int64_max_to_all
103
104 #pragma weak shmem_short_min_to_all = pshmem_short_min_to_all
105 #pragma weak shmem_int_min_to_all = pshmem_int_min_to_all
106 #pragma weak shmem_long_min_to_all = pshmem_long_min_to_all
107 #pragma weak shmem_longlong_min_to_all = pshmem_longlong_min_to_all
108 #pragma weak shmem_float_min_to_all = pshmem_float_min_to_all
109 #pragma weak shmem_double_min_to_all = pshmem_double_min_to_all
110 #pragma weak shmem_longdouble_min_to_all= pshmem_longdouble_min_to_all
111 #pragma weak shmemx_int16_min_to_all = pshmemx_int16_min_to_all
112 #pragma weak shmemx_int32_min_to_all = pshmemx_int32_min_to_all
113 #pragma weak shmemx_int64_min_to_all = pshmemx_int64_min_to_all
114
115 #pragma weak shmem_short_sum_to_all = pshmem_short_sum_to_all
116 #pragma weak shmem_int_sum_to_all = pshmem_int_sum_to_all
117 #pragma weak shmem_long_sum_to_all = pshmem_long_sum_to_all
118 #pragma weak shmem_longlong_sum_to_all = pshmem_longlong_sum_to_all
119 #pragma weak shmem_float_sum_to_all = pshmem_float_sum_to_all
120 #pragma weak shmem_double_sum_to_all = pshmem_double_sum_to_all
121 #pragma weak shmem_longdouble_sum_to_all= pshmem_longdouble_sum_to_all
122 #pragma weak shmem_complexf_sum_to_all = pshmem_complexf_sum_to_all
123 #pragma weak shmem_complexd_sum_to_all = pshmem_complexd_sum_to_all
124 #pragma weak shmemx_int16_sum_to_all = pshmemx_int16_sum_to_all
125 #pragma weak shmemx_int32_sum_to_all = pshmemx_int32_sum_to_all
126 #pragma weak shmemx_int64_sum_to_all = pshmemx_int64_sum_to_all
127
128 #pragma weak shmem_short_prod_to_all = pshmem_short_prod_to_all
129 #pragma weak shmem_int_prod_to_all = pshmem_int_prod_to_all
130 #pragma weak shmem_long_prod_to_all = pshmem_long_prod_to_all
131 #pragma weak shmem_longlong_prod_to_all = pshmem_longlong_prod_to_all
132 #pragma weak shmem_float_prod_to_all = pshmem_float_prod_to_all
133 #pragma weak shmem_double_prod_to_all = pshmem_double_prod_to_all
134 #pragma weak shmem_longdouble_prod_to_all = pshmem_longdouble_prod_to_all
135 #pragma weak shmem_complexf_prod_to_all = pshmem_complexf_prod_to_all
136 #pragma weak shmem_complexd_prod_to_all = pshmem_complexd_prod_to_all
137 #pragma weak shmemx_int16_prod_to_all = pshmemx_int16_prod_to_all
138 #pragma weak shmemx_int32_prod_to_all = pshmemx_int32_prod_to_all
139 #pragma weak shmemx_int64_prod_to_all = pshmemx_int64_prod_to_all
140 #include "oshmem/shmem/c/profile/defines.h"
141 #endif
142
143 SHMEM_TYPE_REDUCE_OP(and, _short, short, shmem)
144 SHMEM_TYPE_REDUCE_OP(and, _int, int, shmem)
145 SHMEM_TYPE_REDUCE_OP(and, _long, long, shmem)
146 SHMEM_TYPE_REDUCE_OP(and, _longlong, long long, shmem)
147 SHMEM_TYPE_REDUCE_OP(and, _int16, int16_t, shmemx)
148 SHMEM_TYPE_REDUCE_OP(and, _int32, int32_t, shmemx)
149 SHMEM_TYPE_REDUCE_OP(and, _int64, int64_t, shmemx)
150
151 SHMEM_TYPE_REDUCE_OP(or, _short, short, shmem)
152 SHMEM_TYPE_REDUCE_OP(or, _int, int, shmem)
153 SHMEM_TYPE_REDUCE_OP(or, _long, long, shmem)
154 SHMEM_TYPE_REDUCE_OP(or, _longlong, long long, shmem)
155 SHMEM_TYPE_REDUCE_OP(or, _int16, int16_t, shmemx)
156 SHMEM_TYPE_REDUCE_OP(or, _int32, int32_t, shmemx)
157 SHMEM_TYPE_REDUCE_OP(or, _int64, int64_t, shmemx)
158
159 SHMEM_TYPE_REDUCE_OP(xor, _short, short, shmem)
160 SHMEM_TYPE_REDUCE_OP(xor, _int, int, shmem)
161 SHMEM_TYPE_REDUCE_OP(xor, _long, long, shmem)
162 SHMEM_TYPE_REDUCE_OP(xor, _longlong, long long, shmem)
163 SHMEM_TYPE_REDUCE_OP(xor, _int16, int16_t, shmemx)
164 SHMEM_TYPE_REDUCE_OP(xor, _int32, int32_t, shmemx)
165 SHMEM_TYPE_REDUCE_OP(xor, _int64, int64_t, shmemx)
166
167 SHMEM_TYPE_REDUCE_OP(max, _short, short, shmem)
168 SHMEM_TYPE_REDUCE_OP(max, _int, int, shmem)
169 SHMEM_TYPE_REDUCE_OP(max, _long, long, shmem)
170 SHMEM_TYPE_REDUCE_OP(max, _longlong, long long, shmem)
171 SHMEM_TYPE_REDUCE_OP(max, _float, float, shmem)
172 SHMEM_TYPE_REDUCE_OP(max, _double, double, shmem)
173 SHMEM_TYPE_REDUCE_OP(max, _longdouble, long double, shmem)
174 SHMEM_TYPE_REDUCE_OP(max, _int16, int16_t, shmemx)
175 SHMEM_TYPE_REDUCE_OP(max, _int32, int32_t, shmemx)
176 SHMEM_TYPE_REDUCE_OP(max, _int64, int64_t, shmemx)
177
178 SHMEM_TYPE_REDUCE_OP(min, _short, short, shmem)
179 SHMEM_TYPE_REDUCE_OP(min, _int, int, shmem)
180 SHMEM_TYPE_REDUCE_OP(min, _long, long, shmem)
181 SHMEM_TYPE_REDUCE_OP(min, _longlong, long long, shmem)
182 SHMEM_TYPE_REDUCE_OP(min, _float, float, shmem)
183 SHMEM_TYPE_REDUCE_OP(min, _double, double, shmem)
184 SHMEM_TYPE_REDUCE_OP(min, _longdouble, long double, shmem)
185 SHMEM_TYPE_REDUCE_OP(min, _int16, int16_t, shmemx)
186 SHMEM_TYPE_REDUCE_OP(min, _int32, int32_t, shmemx)
187 SHMEM_TYPE_REDUCE_OP(min, _int64, int64_t, shmemx)
188
189 SHMEM_TYPE_REDUCE_OP(sum, _short, short, shmem)
190 SHMEM_TYPE_REDUCE_OP(sum, _int, int, shmem)
191 SHMEM_TYPE_REDUCE_OP(sum, _long, long, shmem)
192 SHMEM_TYPE_REDUCE_OP(sum, _longlong, long long, shmem)
193 SHMEM_TYPE_REDUCE_OP(sum, _float, float, shmem)
194 SHMEM_TYPE_REDUCE_OP(sum, _double, double, shmem)
195 SHMEM_TYPE_REDUCE_OP(sum, _longdouble, long double, shmem)
196 SHMEM_TYPE_REDUCE_OP(sum, _complexf, float complex, shmem)
197 SHMEM_TYPE_REDUCE_OP(sum, _complexd, double complex, shmem)
198 SHMEM_TYPE_REDUCE_OP(sum, _int16, int16_t, shmemx)
199 SHMEM_TYPE_REDUCE_OP(sum, _int32, int32_t, shmemx)
200 SHMEM_TYPE_REDUCE_OP(sum, _int64, int64_t, shmemx)
201
202 SHMEM_TYPE_REDUCE_OP(prod, _short, short, shmem)
203 SHMEM_TYPE_REDUCE_OP(prod, _int, int, shmem)
204 SHMEM_TYPE_REDUCE_OP(prod, _long, long, shmem)
205 SHMEM_TYPE_REDUCE_OP(prod, _longlong, long long, shmem)
206 SHMEM_TYPE_REDUCE_OP(prod, _float, float, shmem)
207 SHMEM_TYPE_REDUCE_OP(prod, _double, double, shmem)
208 SHMEM_TYPE_REDUCE_OP(prod, _longdouble, long double, shmem)
209 SHMEM_TYPE_REDUCE_OP(prod, _complexf, float complex, shmem)
210 SHMEM_TYPE_REDUCE_OP(prod, _complexd, double complex, shmem)
211 SHMEM_TYPE_REDUCE_OP(prod, _int16, int16_t, shmemx)
212 SHMEM_TYPE_REDUCE_OP(prod, _int32, int32_t, shmemx)
213 SHMEM_TYPE_REDUCE_OP(prod, _int64, int64_t, shmemx)