mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-03 10:49:58 +00:00
57 lines
1.2 KiB
C
57 lines
1.2 KiB
C
extern void abort (void);
|
|
int a[16], b[16], c[16], d[5][2];
|
|
|
|
__attribute__((noinline, noclone)) void
|
|
foo (int x, int y)
|
|
{
|
|
int i;
|
|
#pragma omp for schedule (static, 1) reduction (+:a[:3])
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
a[0] += i;
|
|
a[1] += 2 * i;
|
|
a[2] += 3 * i;
|
|
}
|
|
#pragma omp for schedule (guided) reduction (+:b[4:3])
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
b[4] += i;
|
|
b[5] += 2 * i;
|
|
b[6] += 3 * i;
|
|
}
|
|
#pragma omp for schedule (static) reduction (+:c[x:4])
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
c[9] += i;
|
|
c[10] += 2 * i;
|
|
c[11] += 3 * i;
|
|
c[12] += 4 * i;
|
|
}
|
|
#pragma omp for reduction (+:d[x - 8:2][y:])
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
d[1][0] += i;
|
|
d[1][1] += 2 * i;
|
|
d[2][0] += 3 * i;
|
|
d[2][1] += 4 * i;
|
|
}
|
|
}
|
|
|
|
int
|
|
main ()
|
|
{
|
|
int i;
|
|
#pragma omp parallel
|
|
foo (9, 0);
|
|
for (i = 0; i < 16; i++)
|
|
if (a[i] != (i < 3 ? 64 * 63 / 2 * (i + 1) : 0)
|
|
|| b[i] != ((i >= 4 && i < 7) ? 64 * 63 / 2 * (i - 3) : 0)
|
|
|| c[i] != ((i >= 9 && i < 13) ? 64 * 63 / 2 * (i - 8) : 0))
|
|
abort ();
|
|
for (i = 0; i < 5; i++)
|
|
if (d[i][0] != ((i && i <= 2) ? 64 * 63 / 2 * (2 * i - 1) : 0)
|
|
|| d[i][1] != ((i && i <= 2) ? 64 * 63 / 2 * (2 * i) : 0))
|
|
abort ();
|
|
return 0;
|
|
}
|