view libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
line wrap: on
line source

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(1) reduction (task, foo: var) clauses)		  \
    for (i = 1; i <= max; i++)						  \
      {									  \
        P (omp task in_reduction (foo: var))				  \
	var++;								  \
	P (omp ordered depend(sink: i - 1))				  \
	if (v++ != i + n - 1)						  \
	  abort ();							  \
        _Pragma ("omp ordered depend(source)")				  \
        var++;								  \
      }									  \
    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;
}