20 #ifndef OMPI_OP_BASE_FUNCTIONS_H
21 #define OMPI_OP_BASE_FUNCTIONS_H
23 #include "ompi_config.h"
30 #define OMPI_OP_PROTO (void *in, void *out, int *count, struct ompi_datatype_t **dtype, struct ompi_op_base_module_1_0_0_t *module)
33 #define OMPI_OP_HANDLER_C_INTEGER_INTRINSIC(name) \
34 void ompi_op_base_##name##_int8_t OMPI_OP_PROTO; \
35 void ompi_op_base_##name##_uint8_t OMPI_OP_PROTO; \
36 void ompi_op_base_##name##_int16_t OMPI_OP_PROTO; \
37 void ompi_op_base_##name##_uint16_t OMPI_OP_PROTO; \
38 void ompi_op_base_##name##_int32_t OMPI_OP_PROTO; \
39 void ompi_op_base_##name##_uint32_t OMPI_OP_PROTO; \
40 void ompi_op_base_##name##_int64_t OMPI_OP_PROTO; \
41 void ompi_op_base_##name##_uint64_t OMPI_OP_PROTO;
42 #define OMPI_OP_HANDLER_C_INTEGER(name) \
43 OMPI_OP_HANDLER_C_INTEGER_INTRINSIC(name)
47 #define OMPI_OP_HANDLER_FORTRAN_INTEGER_INTRINSIC(name) \
48 void ompi_op_base_##name##_fortran_integer OMPI_OP_PROTO;
49 #if OMPI_HAVE_FORTRAN_INTEGER1
50 #define OMPI_OP_HANDLER_FORTRAN_INTEGER1(name) \
51 void ompi_op_base_##name##_fortran_integer1 OMPI_OP_PROTO;
53 #define OMPI_OP_HANDLER_FORTRAN_INTEGER1(name)
55 #if OMPI_HAVE_FORTRAN_INTEGER2
56 #define OMPI_OP_HANDLER_FORTRAN_INTEGER2(name) \
57 void ompi_op_base_##name##_fortran_integer2 OMPI_OP_PROTO;
59 #define OMPI_OP_HANDLER_FORTRAN_INTEGER2(name)
61 #if OMPI_HAVE_FORTRAN_INTEGER4
62 #define OMPI_OP_HANDLER_FORTRAN_INTEGER4(name) \
63 void ompi_op_base_##name##_fortran_integer4 OMPI_OP_PROTO;
65 #define OMPI_OP_HANDLER_FORTRAN_INTEGER4(name)
67 #if OMPI_HAVE_FORTRAN_INTEGER8
68 #define OMPI_OP_HANDLER_FORTRAN_INTEGER8(name) \
69 void ompi_op_base_##name##_fortran_integer8 OMPI_OP_PROTO;
71 #define OMPI_OP_HANDLER_FORTRAN_INTEGER8(name)
73 #if OMPI_HAVE_FORTRAN_INTEGER16
74 #define OMPI_OP_HANDLER_FORTRAN_INTEGER16(name) \
75 void ompi_op_base_##name##_fortran_integer16 OMPI_OP_PROTO;
77 #define OMPI_OP_HANDLER_FORTRAN_INTEGER16(name)
79 #define OMPI_OP_HANDLER_FORTRAN_INTEGER(name) \
80 OMPI_OP_HANDLER_FORTRAN_INTEGER_INTRINSIC(name) \
81 OMPI_OP_HANDLER_FORTRAN_INTEGER1(name) \
82 OMPI_OP_HANDLER_FORTRAN_INTEGER2(name) \
83 OMPI_OP_HANDLER_FORTRAN_INTEGER4(name) \
84 OMPI_OP_HANDLER_FORTRAN_INTEGER8(name) \
85 OMPI_OP_HANDLER_FORTRAN_INTEGER16(name)
89 #define OMPI_OP_HANDLER_FLOATING_POINT_INTRINSIC(name) \
90 void ompi_op_base_##name##_float OMPI_OP_PROTO; \
91 void ompi_op_base_##name##_double OMPI_OP_PROTO; \
92 void ompi_op_base_##name##_fortran_real OMPI_OP_PROTO; \
93 void ompi_op_base_##name##_fortran_double_precision OMPI_OP_PROTO; \
94 void ompi_op_base_##name##_long_double OMPI_OP_PROTO;
95 #if OMPI_HAVE_FORTRAN_REAL2
96 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL2(name) \
97 void ompi_op_base_##name##_fortran_real2 OMPI_OP_PROTO;
99 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL2(name)
101 #if OMPI_HAVE_FORTRAN_REAL4
102 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL4(name) \
103 void ompi_op_base_##name##_fortran_real4 OMPI_OP_PROTO;
105 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL4(name)
107 #if OMPI_HAVE_FORTRAN_REAL8
108 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL8(name) \
109 void ompi_op_base_##name##_fortran_real8 OMPI_OP_PROTO;
111 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL8(name)
113 #if OMPI_HAVE_FORTRAN_REAL16
114 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL16(name) \
115 void ompi_op_base_##name##_fortran_real16 OMPI_OP_PROTO;
117 #define OMPI_OP_HANDLER_FLOATING_POINT_REAL16(name)
119 #define OMPI_OP_HANDLER_FLOATING_POINT(name) \
120 OMPI_OP_HANDLER_FLOATING_POINT_INTRINSIC(name) \
121 OMPI_OP_HANDLER_FLOATING_POINT_REAL4(name) \
122 OMPI_OP_HANDLER_FLOATING_POINT_REAL8(name) \
123 OMPI_OP_HANDLER_FLOATING_POINT_REAL16(name) \
127 #define OMPI_OP_HANDLER_LOGICAL(name) \
128 void ompi_op_base_##name##_fortran_logical OMPI_OP_PROTO; \
129 void ompi_op_base_##name##_bool OMPI_OP_PROTO;
133 #if OMPI_HAVE_FORTRAN_REAL
134 #define OMPI_OP_HANDLER_COMPLEX_INTRINSIC(name) \
135 void ompi_op_base_##name##_fortran_complex OMPI_OP_PROTO;
137 #define OMPI_OP_HANDLER_COMPLEX_INTRINSIC(name)
139 #if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
140 #define OMPI_OP_HANDLER_DOUBLE_COMPLEX_INTRINSIC(name) \
141 void ompi_op_base_##name##_fortran_double_complex OMPI_OP_PROTO;
143 #define OMPI_OP_HANDLER_DOUBLE_COMPLEX_INTRINSIC(name)
145 #if OMPI_HAVE_FORTRAN_REAL4
146 #define OMPI_OP_HANDLER_COMPLEX8(name) \
147 void ompi_op_base_##name##_fortran_complex8 OMPI_OP_PROTO;
149 #define OMPI_OP_HANDLER_COMPLEX8(name)
151 #if OMPI_HAVE_FORTRAN_REAL8
152 #define OMPI_OP_HANDLER_COMPLEX16(name) \
153 void ompi_op_base_##name##_fortran_complex16 OMPI_OP_PROTO;
155 #define OMPI_OP_HANDLER_COMPLEX16(name)
157 #if OMPI_HAVE_FORTRAN_REAL16
158 #define OMPI_OP_HANDLER_COMPLEX32(name) \
159 void ompi_op_base_##name##_fortran_complex32 OMPI_OP_PROTO;
161 #define OMPI_OP_HANDLER_COMPLEX32(name)
163 #define OMPI_OP_HANDLER_COMPLEX(name) \
164 OMPI_OP_HANDLER_COMPLEX_INTRINSIC(name) \
165 OMPI_OP_HANDLER_DOUBLE_COMPLEX_INTRINSIC(name) \
166 OMPI_OP_HANDLER_COMPLEX8(name) \
167 OMPI_OP_HANDLER_COMPLEX16(name) \
168 OMPI_OP_HANDLER_COMPLEX32(name)
172 #define OMPI_OP_HANDLER_BYTE(name) \
173 void ompi_op_base_##name##_byte OMPI_OP_PROTO;
177 #define OMPI_OP_HANDLER_2TYPE(name) \
178 void ompi_op_base_##name##_2real OMPI_OP_PROTO; \
179 void ompi_op_base_##name##_2double_precision OMPI_OP_PROTO; \
180 void ompi_op_base_##name##_2integer OMPI_OP_PROTO; \
181 void ompi_op_base_##name##_float_int OMPI_OP_PROTO; \
182 void ompi_op_base_##name##_double_int OMPI_OP_PROTO; \
183 void ompi_op_base_##name##_long_int OMPI_OP_PROTO; \
184 void ompi_op_base_##name##_2int OMPI_OP_PROTO; \
185 void ompi_op_base_##name##_short_int OMPI_OP_PROTO; \
186 void ompi_op_base_##name##_long_double_int OMPI_OP_PROTO;
193 OMPI_OP_HANDLER_C_INTEGER(max)
194 OMPI_OP_HANDLER_FORTRAN_INTEGER(max)
195 OMPI_OP_HANDLER_FLOATING_POINT(max)
200 OMPI_OP_HANDLER_C_INTEGER(min)
201 OMPI_OP_HANDLER_FORTRAN_INTEGER(min)
202 OMPI_OP_HANDLER_FLOATING_POINT(min)
207 OMPI_OP_HANDLER_C_INTEGER(sum)
208 OMPI_OP_HANDLER_FORTRAN_INTEGER(sum)
209 OMPI_OP_HANDLER_FLOATING_POINT(sum)
210 OMPI_OP_HANDLER_COMPLEX(sum)
215 OMPI_OP_HANDLER_C_INTEGER(prod)
216 OMPI_OP_HANDLER_FORTRAN_INTEGER(prod)
217 OMPI_OP_HANDLER_FLOATING_POINT(prod)
218 OMPI_OP_HANDLER_COMPLEX(prod)
223 OMPI_OP_HANDLER_C_INTEGER(land)
224 OMPI_OP_HANDLER_LOGICAL(land)
229 OMPI_OP_HANDLER_C_INTEGER(band)
230 OMPI_OP_HANDLER_FORTRAN_INTEGER(band)
231 OMPI_OP_HANDLER_BYTE(band)
236 OMPI_OP_HANDLER_C_INTEGER(lor)
237 OMPI_OP_HANDLER_LOGICAL(lor)
242 OMPI_OP_HANDLER_C_INTEGER(bor)
243 OMPI_OP_HANDLER_FORTRAN_INTEGER(bor)
244 OMPI_OP_HANDLER_BYTE(bor)
249 OMPI_OP_HANDLER_C_INTEGER(lxor)
250 OMPI_OP_HANDLER_LOGICAL(lxor)
255 OMPI_OP_HANDLER_C_INTEGER(bxor)
256 OMPI_OP_HANDLER_FORTRAN_INTEGER(bxor)
257 OMPI_OP_HANDLER_BYTE(bxor)
262 OMPI_OP_HANDLER_2TYPE(maxloc)
267 OMPI_OP_HANDLER_2TYPE(minloc)
272 #define OMPI_OP_PROTO_3BUF \
273 ( void * restrict in1, void * restrict in2, void * restrict out, \
274 int *count, struct ompi_datatype_t **dtype, \
275 struct ompi_op_base_module_1_0_0_t *module)
279 #define OMPI_OP_3BUFF_HANDLER_C_INTEGER_INTRINSIC(name) \
280 void ompi_op_base_3buff_##name##_int8_t OMPI_OP_PROTO_3BUF; \
281 void ompi_op_base_3buff_##name##_uint8_t OMPI_OP_PROTO_3BUF; \
282 void ompi_op_base_3buff_##name##_int16_t OMPI_OP_PROTO_3BUF; \
283 void ompi_op_base_3buff_##name##_uint16_t OMPI_OP_PROTO_3BUF; \
284 void ompi_op_base_3buff_##name##_int32_t OMPI_OP_PROTO_3BUF; \
285 void ompi_op_base_3buff_##name##_uint32_t OMPI_OP_PROTO_3BUF; \
286 void ompi_op_base_3buff_##name##_int64_t OMPI_OP_PROTO_3BUF; \
287 void ompi_op_base_3buff_##name##_uint64_t OMPI_OP_PROTO_3BUF;
288 #define OMPI_OP_3BUFF_HANDLER_C_INTEGER(name) \
289 OMPI_OP_3BUFF_HANDLER_C_INTEGER_INTRINSIC(name)
293 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER_INTRINSIC(name) \
294 void ompi_op_base_3buff_##name##_fortran_integer OMPI_OP_PROTO_3BUF;
295 #if OMPI_HAVE_FORTRAN_INTEGER1
296 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER1(name) \
297 void ompi_op_base_3buff_##name##_fortran_integer1 OMPI_OP_PROTO_3BUF;
299 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER1(name)
301 #if OMPI_HAVE_FORTRAN_INTEGER2
302 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER2(name) \
303 void ompi_op_base_3buff_##name##_fortran_integer2 OMPI_OP_PROTO_3BUF;
305 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER2(name)
307 #if OMPI_HAVE_FORTRAN_INTEGER4
308 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER4(name) \
309 void ompi_op_base_3buff_##name##_fortran_integer4 OMPI_OP_PROTO_3BUF;
311 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER4(name)
313 #if OMPI_HAVE_FORTRAN_INTEGER8
314 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER8(name) \
315 void ompi_op_base_3buff_##name##_fortran_integer8 OMPI_OP_PROTO_3BUF;
317 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER8(name)
319 #if OMPI_HAVE_FORTRAN_INTEGER16
320 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER16(name) \
321 void ompi_op_base_3buff_##name##_fortran_integer16 OMPI_OP_PROTO_3BUF;
323 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER16(name)
325 #define OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(name) \
326 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER_INTRINSIC(name) \
327 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER1(name) \
328 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER2(name) \
329 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER4(name) \
330 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER8(name) \
331 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER16(name)
335 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_INTRINSIC(name) \
336 void ompi_op_base_3buff_##name##_float OMPI_OP_PROTO_3BUF; \
337 void ompi_op_base_3buff_##name##_double OMPI_OP_PROTO_3BUF; \
338 void ompi_op_base_3buff_##name##_fortran_real OMPI_OP_PROTO_3BUF; \
339 void ompi_op_base_3buff_##name##_fortran_double_precision OMPI_OP_PROTO_3BUF; \
340 void ompi_op_base_3buff_##name##_long_double OMPI_OP_PROTO_3BUF;
341 #if OMPI_HAVE_FORTRAN_REAL2
342 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL2(name) \
343 void ompi_op_base_3buff_##name##_fortran_real2 OMPI_OP_PROTO_3BUF;
345 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL2(name)
347 #if OMPI_HAVE_FORTRAN_REAL4
348 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL4(name) \
349 void ompi_op_base_3buff_##name##_fortran_real4 OMPI_OP_PROTO_3BUF;
351 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL4(name)
353 #if OMPI_HAVE_FORTRAN_REAL8
354 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL8(name) \
355 void ompi_op_base_3buff_##name##_fortran_real8 OMPI_OP_PROTO_3BUF;
357 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL8(name)
359 #if OMPI_HAVE_FORTRAN_REAL16
360 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL16(name) \
361 void ompi_op_base_3buff_##name##_fortran_real16 OMPI_OP_PROTO_3BUF;
363 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL16(name)
365 #define OMPI_OP_3BUFF_HANDLER_FLOATING_POINT(name) \
366 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_INTRINSIC(name) \
367 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL4(name) \
368 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL8(name) \
369 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT_REAL16(name) \
373 #define OMPI_OP_3BUFF_HANDLER_LOGICAL(name) \
374 void ompi_op_base_3buff_##name##_fortran_logical OMPI_OP_PROTO_3BUF; \
375 void ompi_op_base_3buff_##name##_bool OMPI_OP_PROTO_3BUF;
379 #if OMPI_HAVE_FORTRAN_REAL
380 #define OMPI_OP_3BUFF_HANDLER_COMPLEX_INTRINSIC(name) \
381 void ompi_op_base_3buff_##name##_fortran_complex OMPI_OP_PROTO_3BUF;
383 #define OMPI_OP_3BUFF_HANDLER_COMPLEX_INTRINSIC(name)
385 #if OMPI_HAVE_FORTRAN_DOUBLE_PRECISION
386 #define OMPI_OP_3BUFF_HANDLER_DOUBLE_COMPLEX_INTRINSIC(name) \
387 void ompi_op_base_3buff_##name##_fortran_double_complex OMPI_OP_PROTO_3BUF;
389 #define OMPI_OP_3BUFF_HANDLER_DOUBLE_COMPLEX_INTRINSIC(name)
391 #if OMPI_HAVE_FORTRAN_REAL4
392 #define OMPI_OP_3BUFF_HANDLER_COMPLEX8(name) \
393 void ompi_op_base_3buff_##name##_fortran_complex8 OMPI_OP_PROTO_3BUF;
395 #define OMPI_OP_3BUFF_HANDLER_COMPLEX8(name)
397 #if OMPI_HAVE_FORTRAN_REAL8
398 #define OMPI_OP_3BUFF_HANDLER_COMPLEX16(name) \
399 void ompi_op_base_3buff_##name##_fortran_complex16 OMPI_OP_PROTO_3BUF;
401 #define OMPI_OP_3BUFF_HANDLER_COMPLEX16(name)
403 #if OMPI_HAVE_FORTRAN_REAL16
404 #define OMPI_OP_3BUFF_HANDLER_COMPLEX32(name) \
405 void ompi_op_base_3buff_##name##_fortran_complex32 OMPI_OP_PROTO_3BUF;
407 #define OMPI_OP_3BUFF_HANDLER_COMPLEX32(name)
409 #define OMPI_OP_3BUFF_HANDLER_COMPLEX(name) \
410 OMPI_OP_3BUFF_HANDLER_COMPLEX_INTRINSIC(name) \
411 OMPI_OP_3BUFF_HANDLER_DOUBLE_COMPLEX_INTRINSIC(name) \
412 OMPI_OP_3BUFF_HANDLER_COMPLEX8(name) \
413 OMPI_OP_3BUFF_HANDLER_COMPLEX16(name) \
414 OMPI_OP_3BUFF_HANDLER_COMPLEX32(name)
418 #define OMPI_OP_3BUFF_HANDLER_BYTE(name) \
419 void ompi_op_base_3buff_##name##_byte OMPI_OP_PROTO_3BUF;
423 #define OMPI_OP_3BUFF_HANDLER_2TYPE(name) \
424 void ompi_op_base_3buff_##name##_2real OMPI_OP_PROTO_3BUF; \
425 void ompi_op_base_3buff_##name##_2double_precision OMPI_OP_PROTO_3BUF; \
426 void ompi_op_base_3buff_##name##_2integer OMPI_OP_PROTO_3BUF; \
427 void ompi_op_base_3buff_##name##_float_int OMPI_OP_PROTO_3BUF; \
428 void ompi_op_base_3buff_##name##_double_int OMPI_OP_PROTO_3BUF; \
429 void ompi_op_base_3buff_##name##_long_int OMPI_OP_PROTO_3BUF; \
430 void ompi_op_base_3buff_##name##_2int OMPI_OP_PROTO_3BUF; \
431 void ompi_op_base_3buff_##name##_short_int OMPI_OP_PROTO_3BUF; \
432 void ompi_op_base_3buff_##name##_long_double_int OMPI_OP_PROTO_3BUF;
437 OMPI_OP_3BUFF_HANDLER_C_INTEGER(max)
438 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(max)
439 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT(max)
444 OMPI_OP_3BUFF_HANDLER_C_INTEGER(min)
445 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(min)
446 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT(min)
451 OMPI_OP_3BUFF_HANDLER_C_INTEGER(sum)
452 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(sum)
453 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT(sum)
454 OMPI_OP_3BUFF_HANDLER_COMPLEX(sum)
459 OMPI_OP_3BUFF_HANDLER_C_INTEGER(prod)
460 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(prod)
461 OMPI_OP_3BUFF_HANDLER_FLOATING_POINT(prod)
462 OMPI_OP_3BUFF_HANDLER_COMPLEX(prod)
467 OMPI_OP_3BUFF_HANDLER_C_INTEGER(land)
468 OMPI_OP_3BUFF_HANDLER_LOGICAL(land)
473 OMPI_OP_3BUFF_HANDLER_C_INTEGER(band)
474 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(band)
475 OMPI_OP_3BUFF_HANDLER_BYTE(band)
480 OMPI_OP_3BUFF_HANDLER_C_INTEGER(lor)
481 OMPI_OP_3BUFF_HANDLER_LOGICAL(lor)
486 OMPI_OP_3BUFF_HANDLER_C_INTEGER(bor)
487 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(bor)
488 OMPI_OP_3BUFF_HANDLER_BYTE(bor)
493 OMPI_OP_3BUFF_HANDLER_C_INTEGER(lxor)
494 OMPI_OP_3BUFF_HANDLER_LOGICAL(lxor)
499 OMPI_OP_3BUFF_HANDLER_C_INTEGER(bxor)
500 OMPI_OP_3BUFF_HANDLER_FORTRAN_INTEGER(bxor)
501 OMPI_OP_3BUFF_HANDLER_BYTE(bxor)
506 OMPI_OP_3BUFF_HANDLER_2TYPE(maxloc)
511 OMPI_OP_3BUFF_HANDLER_2TYPE(minloc)
517 OMPI_DECLSPEC extern ompi_op_base_handler_fn_t
519 OMPI_DECLSPEC extern ompi_op_base_3buff_handler_fn_t
Maximum value.
Definition: op.h:232
Maximum type.
Definition: op.h:193
MPI_Op back-end operation framework.