|
235 | 235 |
|
236 | 236 | // reduction macros |
237 | 237 |
|
238 | | -#define OPDI_INTERNAL_DECLARE_REDUCTION(OP_NAME, TYPE, OP, INIT, ID) \ |
239 | | - TYPE operator OP (opdi::Reducer<TYPE, ID> const& lhs, \ |
240 | | - opdi::Reducer<TYPE, ID> const& rhs) { \ |
241 | | - return lhs.value OP rhs.value; \ |
242 | | - } \ |
243 | | - \ |
244 | | - OPDI_PRAGMA(omp declare reduction(OP_NAME : TYPE : \ |
245 | | - opdi::Reducer<TYPE, ID>(omp_out) = opdi::Reducer<TYPE, ID>(omp_out) OP opdi::Reducer<TYPE, ID>(omp_in)) \ |
246 | | - initializer(omp_priv = INIT)) |
| 238 | +#if _OPENMP >= 202411 |
| 239 | + #define OPDI_INTERNAL_DECLARE_REDUCTION(OP_NAME, TYPE, OP, INIT, ID) \ |
| 240 | + TYPE operator OP (opdi::Reducer<TYPE, ID> const& lhs, \ |
| 241 | + opdi::Reducer<TYPE, ID> const& rhs) { \ |
| 242 | + return lhs.value OP rhs.value; \ |
| 243 | + } \ |
| 244 | + \ |
| 245 | + OPDI_PRAGMA(omp declare_reduction(OP_NAME : TYPE) \ |
| 246 | + combiner(opdi::Reducer<TYPE, ID>(omp_out) = \ |
| 247 | + opdi::Reducer<TYPE, ID>(omp_out) OP opdi::Reducer<TYPE, ID>(omp_in)) \ |
| 248 | + initializer(omp_priv = INIT)) |
| 249 | +#else |
| 250 | + #define OPDI_INTERNAL_DECLARE_REDUCTION(OP_NAME, TYPE, OP, INIT, ID) \ |
| 251 | + TYPE operator OP (opdi::Reducer<TYPE, ID> const& lhs, \ |
| 252 | + opdi::Reducer<TYPE, ID> const& rhs) { \ |
| 253 | + return lhs.value OP rhs.value; \ |
| 254 | + } \ |
| 255 | + \ |
| 256 | + OPDI_PRAGMA(omp declare reduction(OP_NAME : TYPE : \ |
| 257 | + opdi::Reducer<TYPE, ID>(omp_out) = opdi::Reducer<TYPE, ID>(omp_out) OP opdi::Reducer<TYPE, ID>(omp_in)) \ |
| 258 | + initializer(omp_priv = INIT)) |
| 259 | +#endif |
247 | 260 |
|
248 | 261 | #define OPDI_DECLARE_REDUCTION(OP_NAME, TYPE, OP, INIT) \ |
249 | 262 | OPDI_INTERNAL_DECLARE_REDUCTION(OP_NAME, TYPE, OP, INIT, __COUNTER__) |
|
0 commit comments