1
2
3
4
5
6
7
8
9
10
11
12 #ifndef OSHMEM_OP_H
13 #define OSHMEM_OP_H
14
15 #include "oshmem_config.h"
16 #include "oshmem/types.h"
17 #include "oshmem/constants.h"
18
19 #include "oshmem/mca/scoll/scoll.h"
20
21 #include "opal/class/opal_list.h"
22 #include "opal/dss/dss_types.h"
23
24 BEGIN_C_DECLS
25
26
27
28
29
30
31 enum {
32 OSHMEM_OP_TYPE_SHORT,
33 OSHMEM_OP_TYPE_INT,
34 OSHMEM_OP_TYPE_LONG,
35 OSHMEM_OP_TYPE_LLONG,
36 OSHMEM_OP_TYPE_INT16_T,
37 OSHMEM_OP_TYPE_INT32_T,
38 OSHMEM_OP_TYPE_INT64_T,
39
40 OSHMEM_OP_TYPE_FLOAT,
41 OSHMEM_OP_TYPE_DOUBLE,
42 OSHMEM_OP_TYPE_LDOUBLE,
43
44 OSHMEM_OP_TYPE_FCOMPLEX,
45 OSHMEM_OP_TYPE_DCOMPLEX,
46
47 OSHMEM_OP_TYPE_FINT2,
48 OSHMEM_OP_TYPE_FINT4,
49 OSHMEM_OP_TYPE_FINT8,
50 OSHMEM_OP_TYPE_FREAL4,
51 OSHMEM_OP_TYPE_FREAL8,
52 OSHMEM_OP_TYPE_FREAL16,
53
54
55 OSHMEM_OP_TYPE_NUMBER
56 };
57
58
59
60
61 enum {
62 OSHMEM_OP_AND,
63 OSHMEM_OP_OR,
64 OSHMEM_OP_XOR,
65 OSHMEM_OP_MAX,
66 OSHMEM_OP_MIN,
67 OSHMEM_OP_SUM,
68 OSHMEM_OP_PROD,
69
70
71 OSHMEM_OP_NUMBER
72 };
73
74 typedef void (oshmem_op_c_handler_fn_t)(void *, void *, int);
75
76
77
78
79 struct oshmem_op_t {
80 opal_object_t base;
81 int id;
82 int op;
83 int dt;
84 size_t dt_size;
85 union {
86
87 oshmem_op_c_handler_fn_t *c_fn;
88 } o_func;
89 };
90 typedef struct oshmem_op_t oshmem_op_t;
91 OSHMEM_DECLSPEC OBJ_CLASS_DECLARATION(oshmem_op_t);
92
93
94 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_short;
95 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_int;
96 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_long;
97 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_longlong;
98 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_fint2;
99 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_fint4;
100 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_fint8;
101 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_int16;
102 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_int32;
103 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_and_int64;
104
105
106 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_short;
107 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_int;
108 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_long;
109 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_longlong;
110 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_fint2;
111 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_fint4;
112 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_fint8;
113 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_int16;
114 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_int32;
115 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_or_int64;
116
117
118 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_short;
119 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_int;
120 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_long;
121 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_longlong;
122 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_fint2;
123 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_fint4;
124 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_fint8;
125 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_int16;
126 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_int32;
127 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_xor_int64;
128
129
130 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_short;
131 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_int;
132 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_long;
133 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_longlong;
134 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_float;
135 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_double;
136 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_longdouble;
137 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_fint2;
138 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_fint4;
139 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_fint8;
140 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_freal4;
141 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_freal8;
142 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_freal16;
143 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_int16;
144 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_int32;
145 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_max_int64;
146
147
148 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_short;
149 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_int;
150 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_long;
151 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_longlong;
152 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_float;
153 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_double;
154 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_longdouble;
155 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_fint2;
156 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_fint4;
157 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_fint8;
158 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_freal4;
159 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_freal8;
160 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_freal16;
161 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_int16;
162 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_int32;
163 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_min_int64;
164
165
166 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_short;
167 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_int;
168 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_long;
169 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_longlong;
170 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_float;
171 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_double;
172 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_longdouble;
173 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_complexf;
174 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_complexd;
175 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_fint2;
176 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_fint4;
177 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_fint8;
178 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_freal4;
179 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_freal8;
180 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_freal16;
181 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_int16;
182 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_int32;
183 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_sum_int64;
184
185
186 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_short;
187 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_int;
188 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_long;
189 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_longlong;
190 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_float;
191 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_double;
192 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_longdouble;
193 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_complexf;
194 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_complexd;
195 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_fint2;
196 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_fint4;
197 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_fint8;
198 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_freal4;
199 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_freal8;
200 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_freal16;
201 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_int16;
202 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_int32;
203 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_prod_int64;
204
205
206 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_swap_int;
207 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_swap_long;
208 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_swap_longlong;
209 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_swap_int32;
210 OSHMEM_DECLSPEC extern oshmem_op_t* oshmem_op_swap_int64;
211
212
213
214
215
216
217
218
219
220
221 int oshmem_op_init(void);
222
223
224
225
226
227
228
229
230 int oshmem_op_finalize(void);
231
232 END_C_DECLS
233
234 #endif