mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-11 19:49:32 +00:00
51 lines
1.8 KiB
C
51 lines
1.8 KiB
C
extern
|
|
#ifdef __cplusplus
|
|
"C"
|
|
#endif
|
|
void abort (void);
|
|
#pragma omp declare reduction (foo: int: omp_out += omp_in - 1) initializer (omp_priv = 1)
|
|
|
|
int
|
|
main ()
|
|
{
|
|
int i, v = 0;
|
|
unsigned long long j;
|
|
volatile unsigned long long sixtyfour = 64;
|
|
int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0, g = 0;
|
|
#pragma omp parallel
|
|
{
|
|
#define P(str) _Pragma (#str)
|
|
#define ONE_ORDERED_LOOP(var, i, max, n, clauses...) \
|
|
P (omp for ordered reduction (task, foo: var) clauses) \
|
|
for (i = 0; i < max; i++) \
|
|
{ \
|
|
var++; \
|
|
P (omp task in_reduction (foo: var)) \
|
|
var++; \
|
|
_Pragma ("omp ordered") \
|
|
if (v++ != i + n) \
|
|
abort (); \
|
|
} \
|
|
if (var != 128 || v != 64 + n) \
|
|
abort (); \
|
|
_Pragma ("omp barrier")
|
|
ONE_ORDERED_LOOP (a, i, 64, 0, )
|
|
ONE_ORDERED_LOOP (b, i, 64, 64, schedule (monotonic: static))
|
|
ONE_ORDERED_LOOP (c, i, 64, 128, schedule (static, 1))
|
|
ONE_ORDERED_LOOP (d, i, 64, 192, schedule (monotonic: runtime))
|
|
ONE_ORDERED_LOOP (e, i, 64, 256, schedule (dynamic, 2))
|
|
ONE_ORDERED_LOOP (f, i, 64, 320, schedule (monotonic: guided, 3))
|
|
ONE_ORDERED_LOOP (g, i, 64, 384, schedule (auto))
|
|
#pragma omp single
|
|
{ v = 0; a = 0; b = 0; c = 0; d = 0; e = 0; f = 0; g = 0; }
|
|
ONE_ORDERED_LOOP (a, j, sixtyfour, 0, )
|
|
ONE_ORDERED_LOOP (b, j, sixtyfour, 64, schedule (static))
|
|
ONE_ORDERED_LOOP (c, j, sixtyfour, 128, schedule (monotonic: static, 1))
|
|
ONE_ORDERED_LOOP (d, j, sixtyfour, 192, schedule (runtime))
|
|
ONE_ORDERED_LOOP (e, j, sixtyfour, 256, schedule (monotonic: dynamic, 2))
|
|
ONE_ORDERED_LOOP (f, j, sixtyfour, 320, schedule (guided, 3))
|
|
ONE_ORDERED_LOOP (g, j, sixtyfour, 384, schedule (monotonic: auto))
|
|
}
|
|
return 0;
|
|
}
|