mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-03 10:49:58 +00:00
74 lines
1.2 KiB
C++
74 lines
1.2 KiB
C++
|
#include <omp.h>
|
||
|
|
||
|
__attribute__((noinline, noclone)) void
|
||
|
foo (int &b)
|
||
|
{
|
||
|
#pragma omp parallel
|
||
|
#pragma omp single
|
||
|
{
|
||
|
bool f = false;
|
||
|
#pragma omp taskloop firstprivate (b, f)
|
||
|
for (int i = 0; i < 30; i++)
|
||
|
{
|
||
|
int q = omp_get_thread_num ();
|
||
|
if (!f)
|
||
|
{
|
||
|
if (b != 2)
|
||
|
__builtin_abort ();
|
||
|
}
|
||
|
else if (b != 8 * q)
|
||
|
__builtin_abort ();
|
||
|
b = 8 * q;
|
||
|
f = true;
|
||
|
}
|
||
|
}
|
||
|
int n;
|
||
|
#pragma omp parallel
|
||
|
#pragma omp single
|
||
|
{
|
||
|
bool f = false;
|
||
|
#pragma omp taskloop firstprivate (f) lastprivate (b, n)
|
||
|
for (int i = 0; i < 30; i++)
|
||
|
{
|
||
|
int q = omp_get_thread_num ();
|
||
|
if (f && b != 8 * q)
|
||
|
__builtin_abort ();
|
||
|
b = 8 * q;
|
||
|
n = q;
|
||
|
f = true;
|
||
|
}
|
||
|
}
|
||
|
if (b != 8 * n)
|
||
|
__builtin_abort ();
|
||
|
b = 9;
|
||
|
#pragma omp parallel
|
||
|
#pragma omp single
|
||
|
{
|
||
|
bool f = false;
|
||
|
#pragma omp taskloop firstprivate (b, f) lastprivate (b, n)
|
||
|
for (int i = 0; i < 30; i++)
|
||
|
{
|
||
|
int q = omp_get_thread_num ();
|
||
|
if (!f)
|
||
|
{
|
||
|
if (b != 9)
|
||
|
__builtin_abort ();
|
||
|
}
|
||
|
else if (b != 11 * q)
|
||
|
__builtin_abort ();
|
||
|
b = 11 * q;
|
||
|
n = q;
|
||
|
f = true;
|
||
|
}
|
||
|
}
|
||
|
if (b != 11 * n)
|
||
|
__builtin_abort ();
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main ()
|
||
|
{
|
||
|
int b = 2;
|
||
|
foo (b);
|
||
|
}
|